首页 > 编程知识 正文

python对数几率回归,python建立回归预测模型

时间:2023-05-05 05:23:11 阅读:241454 作者:3225

回归类算法的模型评估与分类型算法的模型评估其实是相似的法则——找真实标签和预测值的差异。在分类型算法中,评判否预测到了正确的分类,而在我们的回归类算法中,评判是否预测到了正确的数值、以及是否拟合到了足够的信息。

绝对误差 MAE

---- 是否预测了正确的数值

sklearn中使用RSS 的变体,均方误差MSE(mean squared error)来衡量我们的预测值和真实值的差异:

均方误差MSE

在sklearn当中,我们有两种方式调用这个评估指标,一种是使用sklearn专用的模型评估模块metrics里的类mean_squared_error,另一种是调用交叉验证的类cross_val_score并使用里面的scoring参数来设置使用均方误差。

sklearn.metrics.mean_squared_error(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average', squared=True)

sklearn.model_selection.cross_val_score(reg,X,y,cv=10,scoring=="neg_mean_squared_error")squared bool, default=True If True returns MSE value, if False returns RMSE value.

这里注意scoring=="neg_mean_squared_error", 均方误差为负是因为sklearn在计算模型评估指标的时,认为均方误差本身是一种误差,是模型的一种损失(loss)。在sklearn当中,所有的损失都使用负数表示,因此均方误差也被显示为负数了。

均方根误差RMSE

RMSE为MSE的算术平方根

缺点:因使用平均误差,平均误差对异常值比较敏感,异常值的出现,使得RMSE的误差较大。

例:

>>> from sklearn.metrics import mean_squared_error

>>> y_true = [3, -0.5, 2, 7]

>>> y_pred = [2.5, 0.0, 2, 8]

>>> mean_squared_error(y_true, y_pred)

0.375

>>> y_true = [3, -0.5, 2, 7]

>>> y_pred = [2.5, 0.0, 2, 8]

>>> mean_squared_error(y_true, y_pred, squared=False)

0.612...

>>> y_true = [[0.5, 1],[-1, 1],[7, -6]]

>>> y_pred = [[0, 2],[-1, 2],[8, -5]]

>>> mean_squared_error(y_true, y_pred)

0.708...

>>> mean_squared_error(y_true, y_pred, squared=False)

0.822...

>>> mean_squared_error(y_true, y_pred, multioutput='raw_values')

array([0.41666667, 1. ])

>>> mean_squared_error(y_true, y_pred, multioutput=[0.3, 0.7])

0.825...

同样可以在sklearn当中,使用命令from sklearn.metrics import mean_absolute_error来调用MAE;在交叉验证中的scoring = "neg_mean_absolute_error"来调用MAE。

sklearn.metrics.mean_absolute_error(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average')

>>> from sklearn.metrics import 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')

array([0.5, 1. ])

>>> mean_absolute_error(y_true, y_pred, multioutput=[0.3, 0.7])

0.85...如果multioutput为'raw_values',则分别返回每个输出的绝对平均误差。

如果multioutput是'uniform_average'或权值的ndarray,则返回所有输出错误的加权平均值。

R^2 (决定系数)

---- 是否拟合了足够的信息

方差的本质是任意一个值和样本均值的差异,差异越大,这些值所带的信息越多。由此可以用来衡量数据上的信息量。如果方差越大,代表数据上的信息量越多,而这个信息量不仅包括了数值的大小,还包括了希望模型捕捉的那些规律。

为衡量模型对数据上的信息量的捕捉而生。

总平方和(SST)= 回归平方和(SSR)+ 残差平方和(SSE)

其中,

为真实标签,

为预测结果,

为样本均值。

比 样本量

即为样本方差。数学理解:

1,

衡量的是1 - 模型没有拟合到的信息占真实标签中所带的信息量。

2, 分母理解为原始数据的离散程度,方差,即真实标签所带的信息量。

3,分子为预测数据和原始数据的误差,残差平方和模型没有拟合到的信息。

4, 两者相除可以消除原始数据离散程度的影响。

理论上取值(−∞,1],正常取值范围为[0, 1]越接近1,模型对数据拟合的越好。

越接近0,表明模型拟合的越差。

小于0(为负),说明模型拟合到的全部信息小于残差平方和

缺点:数据集的样本越大,R2越大。

不同数据集的模型结果比较会有一定的误差。

可以使用三种方式来调用,一是从metrics中导入r2_score,输入预测值和真实值后打分。第二是从线性回归LinearRegression的接口score来进行调用。第三是在交叉验证中,输入scoring = "r2"来调用。

sklearn.metrics.r2_score(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average')

>>> from sklearn.metrics import r2_score

>>> 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 = [1, 2, 3]

>>> y_pred = [1, 2, 3]

>>> r2_score(y_true, y_pred)

1.0

>>> y_true = [1, 2, 3]

>>> y_pred = [2, 2, 2]

>>> r2_score(y_true, y_pred)

0.0

>>> y_true = [1, 2, 3]

>>> y_pred = [3, 2, 1]

>>> r2_score(y_true, y_pred)

-3.0multioutput: {'raw_values','uniform_average','variance_weighted'},array like of shape(n_output,) or None,default='uniform_average'

定义多个输出分数的聚合。类数组值定义用于平均得分的权重。默认设置是"uniform_average"。

"raw_values": 在多输出输入的情况下返回完整的分数集。

"uniform_average": 对所有输出的分数取平均值,权重一致。

"variance_weighted": 所有输出的分数取平均值,用每个单个输出的方差加权。

更多详情可参见原文链接:机器学习 | 简单而强大的线性回归详解​mp.weixin.qq.com

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。