Python回归预测,python回归算法预测数据
一、常用评价指标
回归模型效果的评价指标经历了几个过程,从SSE到R-square再到调整后的R-square,这是一个完善的过程:
SSE(误差平方和):误差平方和
r平方:决定系数
调整的R平方:自由度调整的决定系数
下面,我将详细讲解以上术语,相信能给大家带来一些帮助!
1.误差平方和
计算公式如下:
在相同数据集下,SSE越小,误差越小,模型效果越好。
缺点:
上证本身的价值大小是没有意义的。随着样本的增加,SSE必然会增加。也就是说,在不同的数据集下,SSE比较是没有意义的。
2.r平方(决定系数)
数学:分母理解为原始数据的离散程度,分子是预测数据与原始数据的误差。两者相除可以消除原始数据离散程度的影响。
事实上,“决定系数”通过数据的变化来表示拟合的质量。
理论上取值范围是(-,1),正常值范围是[0.1]-实际中通常选择拟合较好的曲线来计算R,所以-很少出现。
常数模型总是预测y的期望值,它忽略了输入的特性,所以输出R 2将为0。
越接近1,方程的变量对Y的解释力越强,这个模型的数据拟合越好。
越接近0,模型拟合越差。
经验值:0.4,拟合效果好。
缺点:
数据集样本越大,R越大,所以不同数据集的模型结果比较会有一些误差。
3.调整后的R平方(校正决策系数)
n是样本数,P是特征数。
消除了样本数和特征数的影响。
二、python中的sklearn.metrics
Python的sklearn.metrics包含了一些损失函数和评分指标来评估回归模型的效果。主要包括以下指标:n _ squared _ error,mean _ absolute _ error,explained _ variance _ score and R2 _ score。
(1)解释变量得分(解释变量得分)
Y_hat:预测值,y:真值,var:方差
解释的差异分数:解释的差异分数。该指标用于衡量我们的模型解释数据集波动的程度。如果值为1,模型是完美的,越小效果越差。下面是python的用法:
#解释差异分数
从sklearn.metrics导入explained_variance_score
y_true=[3,-0.5,2,7]
y_pred=[2.5,0.0,2,8]
解释变量得分(y_true,y_pred)
0.957 .
y_true=[[0.5,1],[-1,1],[7,-6]]
y_pred=[[0,2],[-1,2],[8,-5]]
explained _ variance _ score(y _ true,y_pred,multioutput=raw_values )
.
数组([ 0.967. 1.])
explained _ variance _ score(y _ true,y_pred,multioutput=[0.3,0.7])
.
0.990 .
(2)平均绝对误差(平均绝对误差)
Y_hat:预测值,y:真实值
一般来说,给定数据点的平均绝对误差越小,模型的拟合效果就会越好。以下是python上的实现:
从sklearn.metrics导入mean_absolute_error
y_true=[3,-0.5,2,7]
y_pred=[2.5,0.0,2,8]
mean_absolute_error(y_true,y_pred)
0.5
y_true=[[0.5,1],[-1,1],[7,-6]]
y_pred=[[0,2],[-1,2],[8,-5]]
mean_absolute_error(y_true,y_pred)
0.75
mean_absolute_error(y_true,y_pred,multioutput=raw_values )
数组([ 0.5,1。])
mean_absolute_error(y_true,y_pred,multioutput=[0.3,0.7])
.
0.849 .
均方误差(Mean squared error)
Y_hat:预测值,y:真实值
这是人们常用的指标之一。
从sklearn.metrics导入均方误差
y_true=[3,-0.5,2,7]
y_pred=[2.5,0.0,2,8]
均方误差(y真实,y预测)
0.375
y_true=[[0.5,1],[-1,1],[7,-6]]
y_pred=[[0,2],[-1,2],[8,-5]]
均方误差(y真实,y预测)
0.7083 .
(4)均方对数误差
Y_hat:预测值,y:真实值
当目标实现指数增长时,例如人口数量、一种商品在几年时间内的平均销量等,这个指标最适合使用。请注意,这个指标惩罚的是一个被低估的估计大于勤奋的大地估计。
从sklearn.metrics导入均方误差
y_true=[3,5,2.5,7]
y_pred=[2.5,5,4,8]
均方对数误差(y真值,y预测值)
0.039.
y_true=[[0.5,1],[1,2],[7,6]]
y_pred=[[0.5,2],[1,2.5],[8,8]]
均方对数误差(y真值,y预测值)
0.044.
(5)中位数绝对误差(中位数绝对误差)
y帽子:预测值,y:真实值
中位数绝对误差适用于包含异常值的数据的衡量
从sklearn.metrics导入中值_绝对值_误差
y_true=[3,-0.5,2,7]
y_pred=[2.5,0.0,2,8]
中位数_绝对值_误差(y_true,y_pred)
0.5
(6)R评分(决定系数、R方)
稀有方可以理解为因变量y中的变异性能能够被估计的多元回归方程解释的比例,它衡量各个自变量对因变量变动的解释程度,其取值在0与一之间,其值越接近1,则变量的解释程度就越高,其值越接近0,其解释程度就越弱。
一般来说,增加自变量的个数,回归平方和会增加,残差平方和会减少,所以稀有方会增大;反之,减少自变量的个数,回归平方和减少,残差平方和增加。
为了消除自变量的数目的影响,引入了调整的稀有方
从sklearn.metrics导入r2 _分数
y_true=[3,-0.5,2,7]
y_pred=[2.5,0.0,2,8]
r2_score(y_true,y_pred)
0.948.
y_true=[[0.5,1],[-1,1],[7,-6]]
y_pred=[[0,2],[-1,2],[8,-5]]
r2_score(y_true,y_pred,multioutput=variance_weighted )
.
0.938.
y_true=[[0.5,1],[-1,1],[7,-6]]
y_pred=[[0,2],[-1,2],[8,-5]]
r2_score(y_true,y_pred,multioutput=uniform_average )
.
0.936.
r2_score(y_true,y_pred,multioutput=raw_values )
.
数组([ 0.965. 0.908.])
r2_score(y_true,y_pred,multioutput=[0.3,0.7])
.
0.925.
三、交叉验证在大蟒上的实现
############################交叉验证,评价模型的效果############################
从实例导入数据集,线性模型
从sklearn.model_selection导入交叉值分数
糖尿病=数据集. load _糖尿病()
X=糖尿病。数据[:150]
y=糖尿病。目标[:150]
套索=线性_模型。套索()
print(cross_val_score(lasso,X,y,cv=5)) #默认是三重交叉验证
############################交叉验证,评价模型的效果############################
从实例导入数据集,线性模型
从sklearn.model_selection导入交叉值分数
糖尿病=数据集. load _糖尿病()
X=糖尿病。数据[:150]
y=糖尿病。目标[:150]
套索=线性_模型。套索()
print(cross_val_score(lasso,X,y,cv=5)) #默认是三重交叉验证
################定义一个返回交叉验证均方根误差(root-mean-square error)误差函数来评估模型以便可以选择正确的参数########
从sklearn.linear_model导入Ridge,RidgeCV,ElasticNet,LassoCV,LassoLarsCV
从sklearn.model_selection导入交叉值分数
定义rmse_cv(型号):
##使用K折交叉验证模块,将5次的预测准确率打印出
RMSE=NP。sqrt(-cross _ val _ score(model,X_train,y_train,scoring= neg _ mean _ squared _ error ,cv=5)) #输入训练集的数据和目标值
返回(均方根误差)
模型_岭=岭()
阿尔法值=[0.05,0.1,0.3,1,3,5,10,15,30,50,75]
cv _ Ridge=[RMSE _ cv(Ridge(alpha=alpha)).平均值()#对不同的参数阿尔法,使用岭回归来计算其准确率
对于阿尔法中的阿尔法]
cv_ridge
#绘制岭回归的准确率和参数希腊字母的第一个字母的变化图
cv_ridge=pd .系列(cv_ridge,index=alphas)
cv _ ridge。情节(title=验证-就这么做)
plt.xlabel(alpha )
plt.ylabel(rmse )
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。