过拟合
定义:具体表现就是最终模型在训练集上效果好;在测试集上效果差。模型泛化能力弱。
具体表现就是最终模型在训练集上效果好;在测试集上效果差。模型过于复杂。
过拟合的原因
- 训练数据中噪音干扰过大,使得学习器认为部分噪音是特征从而扰乱学习规则。
- 建模样本选取有误,例如训练数据太少,抽样方法错误,样本label错误等,导致样本不能代表整体。
- 模型不合理,或假设成立的条件与实际不符。
- 特征维度/参数太多,导致模型复杂度太高。
解决办法
正则化
欠拟合
定义:欠拟合是指对训练样本的一般性质尚未学好。在训练集及测试集上的表现都不好。
欠拟合的原因
1 模型复杂度过低
2 特征量过少
解决办法
增加数据的特征数量
4.3.1 带有L2正则化的线性回归——岭回归
岭回归也是一种线性回归,不过在算法建立回归方程的时候,加上正则化的限制,从而达到解决过拟合的效果
1 API
sklearn.linear_model.Ridge(alpha=1.0, fit_intercept = True, solve="auto",normalize=False)
- 具有L2正则化的线性回归
- alpha 正则化力度,也叫入 取值0~1 1~10
- solver 会根据数值自动选择优化方法,sag如果数据集特征值都比较大,选择该随机梯度下降优化
- normalize 数据是否进行标准化 normalize=False,可以在fit之前调用preprocseeing.StandardScalse标准化数据
- Ridge.coef_ 回归权重
- Ridge.intercept_ 回归偏置
Ridge方法相当于SGDRegressor(penalty='l2',loss="squared_loss")只不过SGDRegressor实现了一个普通的随机梯度下降学习,推荐使用Ridge(实现了SAG)
sklearn.linear_model.RidgeCV(_BaseRidgeCV,RegressorMixin) 具有l2正则化的线性回归,可以进行交叉验证 coef_:回归系数
def linea3():
"""
岭回归对波士顿房价进行预测
:return:
"""
# 1)获取数据
boston = load_boston()
print("特征数量:\n", boston.data.shape)
# 2)划分数据集
x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22)
# 3)标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4)预估器
estimator = Ridge()
estimator.fit(x_train, y_train)
# 5)得出模型
print("岭回归的权重系数:\n", estimator.coef_)
print("岭回归的偏置为:\n", estimator.intercept_)
# 6)模型评估
y_predict = estimator.predict(x_test)
print("预测房价:\n", y_predict)
error = mean_squared_error(y_test, y_predict)
print("岭回归-均方误差为:\n", error)
return None
if __name__ == "__main__":
# 代码1:正规方程的优化方法对波士顿房价进行预测
linea1()
# 代码2:梯度下降的优化方法对波士顿房价进行预测
linea2()
# 代码3:岭回归对波士顿房价进行预测
linea3()