均方误差 mean squared error(MSE)
其中N是样本数量,i是每个数据样本,fi是模型回归出来的数值,yi是样本点i实际的数值标签所以 MES 的本质,其实是样本正是数据与回归结果的差异。因此在回归中,我们追求的是 MSE 越小越好
其实前面【十分钟机器学习系列笔记】决策树-CART 算法中有提到最小化平方误差就可以表示为
j,smin ⎣⎢⎡c1min xi∈R1(j,s)∑(yi−c1)2+c2min xi∈R2(j,s)∑(yi−c2)2⎦⎥⎤
然而,回归树的接口 score 返回的是 R 平方,并不是 MSE,R 平方被定义如下
R2=1−vu=1−i=1∑N(yi−y^)2i=1∑N(fi−yi)2
其中N是样本数量,i是每个数据样本,fi是模型回归出来的数值,yi是样本点i实际的数值标签,y^是正是数值标签的平均数。显然u就是残差平方和,v就是总平方和
R 平方可以为正为负,如果模型的残差平方和远远大于模型的总平方和,模型非常糟糕,R 平方就会为负),而均方误差永远为正
值得一提的是,虽然均方误差永远为正,但是 sklearn 当中使用均方误差作为评判标准时,却是计算”负均方误差“(neg_mean_squared_error)
交叉验证就是,我们将数据划为 n 份,依次使用其中一份作为数据集,其他 n-1 份作为训练集,多次计算模型的精确性来评估模型的平均准确程度训练集和测试集的划分会干扰模型的结果,因此,用交叉验证 n 次结果求出的平均值,是对模型效果的一个更好的度量
对于交叉验证,在 sklearn 中指的是 cross_val_score
cross_val_score(
['estimator', 'X', 'y=None', 'groups=None', 'scoring=None', "cv='warn'", 'n_jobs=None', 'verbose=0', 'fit_params=None', "pre_dispatch='2*n_jobs'", "error_score='raise-deprecating'"],
)
# estimator:估计器,也就是模型
# X:整个特征数据集
# y:整个结果数据集
# cv:测试次数,这也决定着训练集与测试集的划分
# scoring:评判标准,默认是R平方,这是使用负MSE
复制代码
代码实现
from sklearn.datasets import load_boston # 波士顿房价数据集
from sklearn.model_selection import cross_val_score # 交叉验证
from sklearn.tree import DecisionTreeRegressor # 回归树
复制代码
boston = load_boston()
regressor = DecisionTreeRegressor(random_state=0)
cross_val_score(regressor, boston.data, boston.target, cv=10
,scoring="neg_mean_squared_error"
)
---
array([-16.41568627, -10.61843137, -18.30176471, -55.36803922, -16.01470588, -44.70117647, -12.2148 , -91.3888 , -57.764 , -36.8134 ])
复制代码
视频作者:菜菜TsaiTsai
链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili
评论