普通线性回归和评估指标代码实战

编程入门 行业动态 更新时间:2024-10-18 22:28:23

普通<a href=https://www.elefans.com/category/jswz/34/1768154.html style=线性回归和评估指标代码实战"/>

普通线性回归和评估指标代码实战

        我们用加州房价预测来讲述普通线性回归的算法实战和预测指标。在这里省去数据预处理和特征工程的步骤。首先导入相应的模块:

from sklearn.linear_model import LinearRegression as LR
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.datasets import fetch_california_housing as fch #加利福尼亚房屋价值数据集
import pandas as pd

接下来导入数据:

housevalue = fch() #会需要下载

然后我们用特征名字替换原有的column名,pd.dataframe将数据转化为数据框格式,数据拆分并重置索引:

X.columns = housevalue.feature_names
X = pd.DataFrame(housevalue.data) 
y = pd.DataFrame(housevalue.target)
Xtrain, Xtest, Ytrain, Ytest = train_test_split(X,y,test_size=0.3,random_state=420)

可以看到划分出来的数据集索引的乱的,因此我们要重置索引:

#恢复索引
for i in [Xtrain, Xtest]:i.index = range(i.shape[0])

接下来我们训练模型:

reg = LR().fit(Xtrain, Ytrain)

用训练好的模型去预测我们的yhat:

yhat = reg.predict(Xtest) #预测我们的yhat

查看每个变量对应的参数值:

[*zip(Xtrain.columns,reg.coef_.reshape(-1))]

查看截距:

reg.intercept_

现在我们用MSE(均方误差)和r2来评判模型的好坏。MSE用来预测是否预测到了正确的数值,R2用来判断是否拟合了足够多的信息,MSE越小越好,R2越接近1越好:

在这里我们用交叉验证去获得MSE值和R2:

from sklearn.metrics import mean_squared_error as MSE
cross_val_score(reg,X,y,cv=10,scoring="neg_mean_squared_error").mean()
from sklearn.metrics import r2_score
cross_val_score(reg,X,y,cv=10,scoring="r2").mean()

      我们观察到,我们在加利福尼亚房屋价值数据集上的MSE其实不是一个很大的数(0.5),但我们的R2不高,百分之四十几的信息都被遗漏掉了。这证明我们的模型比较好地拟合了一部分数据的数值,却没有能正确拟合数据的分布。让我们与绘图来看看,究竟是不是这 样一回事。我们可以绘制一张图上的两条曲线,一条曲线是我们的真实标签Ytest,另一条曲线是我们的预测结果 yhat,两条曲线的交叠越多,我们的模型拟合就越好:
 

plt.plot(range(len(Ytest)),sorted(Ytest),c="black",label= "Data")
plt.plot(range(len(yhat)),sorted(yhat),c="red",label = "Predict")
plt.legend()
plt.show()

      可见,虽然我们的大部分数据被拟合得比较好,但是图像的开头和结尾处却又着较大的拟合误差。如果我们在图像右 侧分布着更多的数据,我们的模型就会越来越偏离我们真正的标签。这种结果类似于我们前面提到的,虽然在有限的数据集上将数值预测正确了,但却没有正确拟合数据的分布,如果有更多的数据进入我们的模型,那数据标签被预测 错误的可能性是非常大的。

更多推荐

普通线性回归和评估指标代码实战

本文发布于:2023-11-15 01:52:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1591611.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:线性   实战   指标   代码

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!