Python回归预测,python回归算法预测数据

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: