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

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))

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

python机器学习之(sklearn)岭回归_第1张图片

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

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()

你可能感兴趣的:(机器学习,python)