zoukankan      html  css  js  c++  java
  • 机器学习sklearn(二十七): 模型评估(七)量化预测的质量(四)回归指标

    该 sklearn.metrics 模块实现了一些 loss, score 以及 utility 函数以测量 regression(回归)的性能. 其中一些已经被加强以处理多个输出的场景: mean_squared_errormean_absolute_errorexplained_variance_score 和 r2_score.

    这些函数有 multioutput 这样一个 keyword(关键的)参数, 它指定每一个目标的 score(得分)或 loss(损失)的平均值的方式. 默认是 'uniform_average', 其指定了输出时一致的权重均值. 如果一个 ndarray 的 shape (n_outputs,) 被传递, 则其中的 entries(条目)将被解释为权重,并返回相应的加权平均值. 如果 multioutput 指定了 'raw_values' , 则所有未改变的部分 score(得分)或 loss(损失)将以 (n_outputs,) 形式的数组返回.

    该 r2_score 和 explained_variance_score 函数接受一个额外的值 'variance_weighted' 用于 multioutput 参数. 该选项通过相应目标变量的方差使得每个单独的 score 进行加权. 该设置量化了全局捕获的未缩放方差. 如果目标变量的大小不一样, 则该 score 更好地解释了较高的方差变量. multioutput='variance_weighted' 是 r2_score 的默认值以向后兼容. 以后该值会被改成 uniform_average.

    1. 解释方差得分

    该 explained_variance_score 函数计算了 explained variance regression score(解释的方差回归得分).

    如果 hat{y} 是预估的目标输出, y 是相应(正确的)目标输出, 并且 Var is 方差, 标准差的平方, 那么解释的方差预估如下:

    	exttt{explained\_{}variance}(y, hat{y}) = 1 - frac{Var{ y - hat{y}}}{Var{y}}

    最好的得分是 1.0, 值越低越差.

    下面是一下有关 explained_variance_score 函数使用的一些示例:

    >>> from sklearn.metrics import explained_variance_score
    >>> y_true = [3, -0.5, 2, 7]
    >>> y_pred = [2.5, 0.0, 2, 8]
    >>> explained_variance_score(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')
    ...
    array([ 0.967...,  1.        ])
    >>> explained_variance_score(y_true, y_pred, multioutput=[0.3, 0.7])
    ...
    0.990...

    2. 最大误差

    max_error函数计算最大残差,该度量捕获预测值和真实值之间的最坏情况误差。在完全拟合的单输出回归模型中,训练集上的max_error将为0,尽管在现实世界中这是极不可能的,但是这个度量显示了模型在拟合时的误差程度。

    如果 hat{y}_i 是 i-th 样本的预测值, 并且 y_i 是对应的真实值,则将最大误差定义为 	ext{Max Error}(y, hat{y}) = max(| y_i - hat{y}_i |)

    以下是max_error函数的一个示例:

    >>> from sklearn.metrics import max_error
    >>> y_true = [3, 2, 7, 1]
    >>> y_pred = [9, 2, 7, 1]
    >>> max_error(y_true, y_pred)
    6

    max_error不支持多输出

    3. 平均绝对误差

    该 mean_absolute_error 函数计算了 平均绝对误差, 一个对应绝对误差损失预期值或者 l1-norm 损失的风险度量.

    如果 hat{y}_i 是 i-th 样本的预测值, 并且 y_i 是对应的真实值, 则平均绝对误差 (MAE) 预估的 n_{	ext{samples}} 定义如下

    	ext{MAE}(y, hat{y}) = frac{1}{n_{	ext{samples}}} sum_{i=0}^{n_{	ext{samples}}-1} left| y_i - hat{y}_i 
ight|.

    下面是一个有关 mean_absolute_error 函数用法的小示例:

    >>> 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.849...

    4. 均方误差

    该 mean_squared_error 函数计算了 均方误差, 一个对应于平方(二次)误差或损失的预期值的风险度量.

    如果 hat{y}_i 是 i-th 样本的预测值, 并且 y_i 是对应的真实值, 则均方误差(MSE)预估的 n_{	ext{samples}} 定义如下

    	ext{MSE}(y, hat{y}) = frac{1}{n_	ext{samples}} sum_{i=0}^{n_	ext{samples} - 1} (y_i - hat{y}_i)^2.

    下面是一个有关 mean_squared_error 函数用法的小示例:

    >>> 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 = [[0.5, 1], [-1, 1], [7, -6]]
    >>> y_pred = [[0, 2], [-1, 2], [8, -5]]
    >>> mean_squared_error(y_true, y_pred)  
    0.7083...

    示例

    5. 均方误差对数

    该 mean_squared_log_error 函数计算了一个对应平方对数(二次)误差或损失的预估值风险度量.

    如果 hat{y}_i 是 i-th 样本的预测值, 并且 y_i 是对应的真实值, 则均方误差对数(MSLE)预估的 n_{	ext{samples}} 定义如下

    	ext{MSLE}(y, hat{y}) = frac{1}{n_	ext{samples}} sum_{i=0}^{n_	ext{samples} - 1} (log_e (1 + y_i) - log_e (1 + hat{y}_i) )^2.

    其中 log_e (x) 表示 x 的自然对数. 当目标具有指数增长的趋势时, 该指标最适合使用, 例如人口数量, 跨年度商品的平均销售额等. 请注意, 该指标会对低于预测的估计值进行估计.

    下面是一个有关 mean_squared_log_error 函数用法的小示例:

    >>> from sklearn.metrics import mean_squared_log_error
    >>> y_true = [3, 5, 2.5, 7]
    >>> y_pred = [2.5, 5, 4, 8]
    >>> mean_squared_log_error(y_true, y_pred)  
    0.039...
    >>> y_true = [[0.5, 1], [1, 2], [7, 6]]
    >>> y_pred = [[0.5, 2], [1, 2.5], [8, 8]]
    >>> mean_squared_log_error(y_true, y_pred)  
    0.044...

    6. 中位绝对误差

    该 median_absolute_error 函数尤其有趣, 因为它的离群值很强. 通过取目标和预测之间的所有绝对差值的中值来计算损失.

    该 median_absolute_error 函数不支持多输出.

    下面是一个有关 median_absolute_error 函数用法的小示例:

    >>> from sklearn.metrics import median_absolute_error
    >>> y_true = [3, -0.5, 2, 7]
    >>> y_pred = [2.5, 0.0, 2, 8]
    >>> median_absolute_error(y_true, y_pred)
    0.5

    7. R² score, 可决系数

    该 r2_score 函数计算了 computes R², 即 可决系数. 它提供了将来样本如何可能被模型预测的估量. 最佳分数为 1.0, 可以为负数(因为模型可能会更糟). 总是预测 y 的预期值,不考虑输入特征的常数模型将得到 R^2 得分为 0.0.

    如果 hat{y}_i 是 i-th 样本的预测值, 并且 y_i 是对应的真实值, 则 R² 得分预估的 n_{	ext{samples}} 定义如下

    R^2(y, hat{y}) = 1 - frac{sum_{i=0}^{n_{	ext{samples}} - 1} (y_i - hat{y}_i)^2}{sum_{i=0}^{n_	ext{samples} - 1} (y_i - ar{y})^2}

    其中 ar{y} =  frac{1}{n_{	ext{samples}}} sum_{i=0}^{n_{	ext{samples}} - 1} y_i.

    下面是一个有关 r2_score 函数用法的小示例:

    >>> 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 = [[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')
    ...
    array([ 0.965...,  0.908...])
    >>> r2_score(y_true, y_pred, multioutput=[0.3, 0.7])
    ...
    0.925...

    示例:

  • 相关阅读:
    qs.js库 使用方法
    Python的装饰器
    Html常用标记总结
    SoapUI、Jmeter、Postman三种接口测试工具的比较
    WebService发布协议--SOAP和REST的区别
    Redis简介
    linux搭建svn服务并手动同步代码到web目录和自动更新
    标签有关用法以及锚点定位;
    DevOps简单介绍
    BAT 批处理脚本教程
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/14905532.html
Copyright © 2011-2022 走看看