定义:具体表现就是最终模型在训练集上效果好;在测试集上效果差。模型泛化能力弱。
具体表现就是最终模型在训练集上效果好;在测试集上效果差。模型过于复杂。
正则化
定义:欠拟合是指对训练样本的一般性质尚未学好。在训练集及测试集上的表现都不好。
1 模型复杂度过低
2 特征量过少
增加数据的特征数量
4.3.1 带有L2正则化的线性回归——岭回归
岭回归也是一种线性回归,不过在算法建立回归方程的时候,加上正则化的限制,从而达到解决过拟合的效果
1 API
sklearn.linear_model.Ridge(alpha=1.0, fit_intercept = True, solve="auto",normalize=False)
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()
