线性回归--My way of ML 12

上一篇文章到随机森林为止学习完了基础的分类算法,从现在开始就是回归算法的学习了。

关于什么是分类算法什么是回归算法的分类看ML0.

线性回归

寻找一种能预测的趋势

  • 定义:通过一个或者多个自变量(特征)与因变量(目标值)之间的进行见面的回归的分析。其中可以为一个或者多个自变量之间的线性组合
  • 通用公式:h(w)=w0+w1x1+…=wTx

误差大小的度量方式—损失函数

  1. 最小二乘法
  2. 误差平方和

优化:

  1. 正规方程
  2. 梯度下降

梯度下降算法是自我学习的过程,自我迭代去优化

正规方程API:sklearn.linear_model.LinearRegression
梯度下降API:sklearn.Linearn_model.SEDRessor

波士顿房价预测

数据集在kaggle上

流程

  1. get数据
  2. 数据分割
  3. 训练集和测试集标准化处理
  4. 算法开始

对特征值标准化处理,和分类算法不一样,这里的目标值也需要标准化处理,目标值最后要reverse_transform()
要实例化两个标准化api

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))  # 0.19版本的转换器,要求传进去的参数必须是二维的

用正规方程

lr = LinearRegression()
lr.fit(x_train, y_train)
print("权重参数是", lr.coef_)  # 这是权重参数
# 预测测试集的房子价格
y_predict = lr.predict(x_test)
print("测试集的每个房子的价格预测", std_y.inverse_transform(y_predict))  # 转换会标准化之前的房价
print("正规方程的均方误差", mean_squared_error(std_y.inverse_transform(y_test), y_predict))

用梯度下降

sgd = SGDRegressor()
sgd.fit(x_train, y_train)
print("梯度下降权重参数是", sgd.coef_)  # 这是权重参数
# 预测测试集的房子价格
y_sgd_predict = sgd.predict(x_test)
print("梯度下降测试集的每个房子的价格预测", std_y.inverse_transform(y_sgd_predict))  # 转换会标准化之前的房价
print("梯度下降的均方误差", mean_squared_error(std_y.inverse_transform(y_test), y_sgd_predict))

实际上一般用梯度下降的多

梯度下降 正规方程
需要选择学习率alpha 不需要
需要多次迭代 一次运算得出
当特征数量多的时候也较好 特征数量多的时候运算代价大
适用于各种数据模型 只适用于线性模型,不适用于逻辑回归等其他模型

author:[email protected] 欢迎交流

猜你喜欢

转载自blog.csdn.net/qq_34788903/article/details/83245483