集成学习 Task03 机器学习基础(二)
二、完整机器学习项目流程(续)
4. 优化基础模型
我们在回归问题中使用训练集估计模型的参数的原则一般都是使得我们的损失函数在训练集达到最小值,其实在实际问题中我们是可以让损失函数在训练集最小化为0,如:在线性回归中,我加入非常多的高次项。
但是:目的是让模型在未知且情况复杂的测试数据上表现优异。
(a) 训练均方误差与测试均方误差
过拟合的问题
(b) 偏差-方差的权衡
偏差和方差
测试均方误差的期望值
E
(
y
0
−
f
^
(
x
0
)
)
2
=
Var
(
f
^
(
x
0
)
)
+
[
Bias
(
f
^
(
x
0
)
)
]
2
+
Var
(
ε
)
E\left(y_{0}-\hat{f}\left(x_{0}\right)\right)^{2}=\operatorname{Var}\left(\hat{f}\left(x_{0}\right)\right)+\left[\operatorname{Bias}\left(\hat{f}\left(x_{0}\right)\right)\right]^{2}+\operatorname{Var}(\varepsilon)
E(y0−f^(x0))2=Var(f^(x0))+[Bias(f^(x0))]2+Var(ε)
可以分解为
f
^
(
x
0
)
\hat{f}(x_0)
f^(x0)的方差、
f
^
(
x
0
)
\hat{f}(x_0)
f^(x0)的偏差平方和误差项
ϵ
\epsilon
ϵ的方差。Var(𝜀)为建模任务的难度。
所谓模型的方差就是:用不同的数据集去估计 𝑓时,估计函数的改变量。模型的偏差是指:为了选择一个简单的模型去估计真实函数所带入的误差。一般而言,增加模型的复杂度,会增加模型的方差,但是会减少模型的偏差,我们要找到一个方差–偏差的权衡,使得测试均方误差最小。
(c)特征提取
训练误差和测试误差
训练误差:模型拟合能力;测试误差:泛化能力(过拟合与欠拟合)
训练误差修正 ??
交叉验证
(d) 压缩估计(正则化)
岭回归和Lasso回归
岭回归
Lasso回归
(e) 降维
PCA
5. 对模型超参数进行调优(调参)
参数和超参数
我们无法使用最小二乘法或者梯度下降法等最优化算法优化出来的数我们称为超参数。
- 网格搜索GridSearchCV()
- 随机搜索 RandomizedSearchCV()
与网格搜索相比,这有两个主要优点:
可以独立于参数数量和可能的值来选择计算成本。
添加不影响性能的参数不会降低效率。
SVR结合管道调优:
# 我们先来对未调参的SVR进行评价:
from sklearn.svm import SVR # 引入SVR类
from sklearn.pipeline import make_pipeline # 引入管道简化学习流程
from sklearn.preprocessing import StandardScaler # 由于SVR基于距离计算,引入对数据进行标准化的类
from sklearn.model_selection import GridSearchCV # 引入网格搜索调优
from sklearn.model_selection import cross_val_score # 引入K折交叉验证
from sklearn import datasets
boston = datasets.load_boston() # 返回一个类似于字典的类
X = boston.data
y = boston.target
features = boston.feature_names
pipe_SVR = make_pipeline(StandardScaler(),SVR())
score1 = cross_val_score(estimator=pipe_SVR,
X = X,
y = y,
scoring = 'r2',
cv = 10) # 10折交叉验证
print("CV accuracy: %.3f +/- %.3f" % ((np.mean(score1)),np.std(score1)))