ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

房价预测Task5-7

2020-05-13 19:55:04  阅读:296  来源: 互联网

标签:plot ridge Task5 房价 preds train test model 预测


房价预测Task5-7

Task 5

从X1-X6中选择合适的项,作为对Y预测的Feature Names;划分训练集和测试集

如何选择

我们使用相关函数来测试X1-X6和Y之间的相关程度。

df_5 = df
corr_matrix = df_5.corr()   # (1)
corr_matrix['Y house price of unit area'].sort_values()     # (2)

# return 
X3 distance to the nearest MRT station   -0.673613
X2 house age                             -0.210567
AgentId                                   0.077259
X1 transaction date                       0.087491
X6 longitude                              0.523287
X5 latitude                               0.546307
X4 number of convenience stores           0.571005
Y house price of unit area                1.000000
Name: Y house price of unit area, dtype: float64

(1)直接使用.corr()函数,研究相关性;

(2)这里是研究各参数X1-X6和Y的相关系数。所以结果中,Y处的相关系数为1。

相关系数越趋近于1,代表正相关性越强,也就是正比;趋近于-1,代表负相关性越强,也就是反比。

根据上面的结果,我们选择X2,X3,X4,X5,X6作为Feature Name.

划分数据集

要划分训练集和测试集。由于我们要使用X来预测Y,所以,X和Y要分离

训练集有两部分:没有Y的训练数据train_x;只有Y的数据集train_y

我们通过train_x训练得到一个线性模型,和train_y不断对比来校正系数。

测试集也有两部分:没有Y的test_x;只有Y的test_y

我们把test_x代入到训练好的模型中,会得到y的预测值,这个预测值就能和实际值test_y进行对比,来测试模型的成熟度。

from sklearn.model_selection import train_test_split

df_5 = df.drop(['AgentId', 'X1 transaction date'], axis=1)

data_x = df_5.drop('Y house price of unit area', axis=1)    
data_y = df_5[['Y house price of unit area']]               
train_x, test_x, train_y, test_y = train_test_split(data_x, data_y, test_size=0.2)  # (1)

(1)我们使用train_test_split()进行数据集的分割。这个函数会把data_xdata_y各分成两部分:训练集+测试集。

data_x = train_x + test_x; data_y = train_y + test_y;

其中,train_x和train_y的序号是对应的;test_x和test_y的序号是对应的。

test_size代表测试集占整个数据集的占比。

Task 6

使用线性回归模型进行学习;并分析MAE和MAPE参数。

from sklearn import linear_model
from sklearn import metrics

# Linear Regeression
LR_reg = linear_model.LinearRegression()        # (1)
LR_reg.fit(train_x, train_y)                    # (2)
print("LR:", LR_reg.coef_, LR_reg.intercept_)   # (3)

# Error measure
preds = LR_reg.predict(test_x)                  # (4)
mse = metrics.mean_squared_error(test_y, preds) # (5)
mae = metrics.mean_absolute_error(test_y, preds)
mape = np.mean(np.abs((preds-test_y)/test_y))*100 
print(mse, mae, mape)

(1)新建线性回归模型,也就是实例化;

(2)训练要使用.fit()函数,输入训练集的X和Y即可。

(3).coef_:线性回归函数的系数。我们这里选取了5个X,所以会有5个系数;

.intercept_:线性回归函数的截距。

(4)测试要使用.predict()函数,输入test_x,即可得到对应的预测值preds

同时,我们还有真实值test_y,上面的预测值和这里的真实值一对比,即可得到各种误差;

(5)至于下面这些误差,都是使用metrics这个库自带的函数得到的。这里我们不再展开。

Ridge Model

# Ridge Regression
# This model is better than Ridge
model_ridge =linear_model.Ridge(alpha = .5)
model_ridge.fit(train_x,train_y)
print("RR:", model_ridge.coef_, model_ridge.intercept_)

# Test
preds_ridge = model_ridge.predict(test_x)
mse_ridge = metrics.mean_squared_error(test_y, preds_ridge)
mae_ridge = metrics.mean_absolute_error(test_y, preds_ridge)
mape_ridge = np.mean(np.abs((preds_ridge-test_y)/test_y))*100
print(mse_ridge, mae_ridge, mape_ridge)

Ridge 比起线性回归的效果要好。这两个的使用方法差不多。

Task 7

分析是否为过拟合?欠拟合

import matplotlib.pyplot as plot 
plot.figure('model')
plot.plot(test_y, preds, '.')   # (1)
# plot.scatter(test_y, preds)   # (2)
plot.plot([test_y.min(), test_y.max()], [test_y.min(), test_y.max()], 'k--', lw =2) # (3)
plot.show()

这里,我们先画一下预测值和实际值的图像。根据分布来判断。

(1)以test_y为横坐标,preds为纵坐标作图,图形的样式是散点图;

(2)我们也可以使用.scatter()做散点图,这个散点图和上面的区别:点的默认粗细比较粗。

(3)以(test_y.min(), test_y.min()),(test_y.max(), test_y.max())为起点和终点,做一条直线。

注意:这样写的矩阵都是以对应点作为起点和终点的直线。

标签:plot,ridge,Task5,房价,preds,train,test,model,预测
来源: https://www.cnblogs.com/rongyupan/p/12884454.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有