python机器学习之(sklearn)岭回归

    科技2023-10-21  69

    1.岭回归

    今天看了会L2正则化,大致的意思就是在惩戒函数中加入高次项的惩戒项,用来减小线性回归中高次项的系数,避免过拟合的状态。这样就产生了一种具有正则化的线性回归模型------岭回归。

    2.岭回归在sklearn中的api

    sklearn.linear_model.Ridge(alpha=1.0) #具有正则化的线性最小二乘法 #alpha 表示正则化力度 #coel_ 表示回归系数 from sklearn.linear_model import Ridge

    3.岭回归模型案例

    # 岭回归降求解预测结果 ri = Ridge(alpha=1.0)#实例化岭回归对象 ri.fit(x_train, y_train)#输入训练数据 print("特征值", ri.coef_) # 预测测试集的房子价格 ri_y_predict = std_y.inverse_transform(ri.predict(x_test)) print("梯度下降每个房子的预测价格:", ri_y_predict) print("正规方程均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_predict)) print("梯度下降均方误差:", mean_squared_error(std_y.inverse_transform(y_test), SGD_y_predict)) print("岭回归误差:", mean_squared_error(std_y.inverse_transform(y_test), ri_y_predict))

    结果如下:(看着结果确实是好一点)

    最后附上全部代码:正规方程,梯度下降和岭回归模型

    from sklearn.datasets import load_boston from sklearn.linear_model import LinearRegression,SGDRegressor from sklearn.linear_model import Ridge from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.metrics import mean_squared_error def regress(): # 获取数据 lb = load_boston() # 分割数据集为训练集和测试集 x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25) # 进行标准化处理,特征值和目标值都需要分别进行特征化处理 # 特征值进行标准化 std_x = StandardScaler() x_train = std_x.fit_transform(x_train) x_test = std_x.transform(x_test) # 目标值进行标准化 std_y = StandardScaler() y_train = std_y.fit_transform(y_train.reshape(-1,1)) y_test = std_y.transform(y_test.reshape(-1,1)) # estimator预测 #正规方程求解方式预测结果 lr = LinearRegression() lr.fit(x_train, y_train) print("特征值:",lr.coef_) # 预测测试集的房子价格 y_predict = std_y.inverse_transform(lr.predict(x_test)) print("正规方程求解每个房子的预测价格:",y_predict) #梯度下降求解预测结果 SGD=SGDRegressor() SGD.fit(x_train, y_train) print("特征值",SGD.coef_) # 预测测试集的房子价格 SGD_y_predict = std_y.inverse_transform(SGD.predict(x_test)) print("梯度下降每个房子的预测价格:", SGD_y_predict) # 岭回归降求解预测结果 ri = Ridge(alpha=1.0) ri.fit(x_train, y_train) print("特征值", ri.coef_) # 预测测试集的房子价格 ri_y_predict = std_y.inverse_transform(ri.predict(x_test)) print("梯度下降每个房子的预测价格:", ri_y_predict) print("正规方程均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_predict)) print("梯度下降均方误差:", mean_squared_error(std_y.inverse_transform(y_test), SGD_y_predict)) print("岭回归误差:", mean_squared_error(std_y.inverse_transform(y_test), ri_y_predict)) return None if __name__ == "__main__": regress()
    Processed: 0.013, SQL: 8