Scikit-Learn 中的 linear_model 是线性模型算法族库,本文将使用该库来实现基本的线性回归算法。

Scikit-Learn 对各类机器学习算法都进行了良好的封装,以线性回归算法为例,只需要以下简单三步便可以进行预测:

  1. # 导入所需库
  2. from sklearn import linear_model
  3. # 训练线性回归模型
  4. model = linear_model.LinearRegression()
  5. model.fit(x, y)

在导入线性模型算法后,只需要利用 fit 方法为模型传入训练数据,完成模型的训练工作,就可以直接使用模型的predict方法,通过传入待预测的数据进行结果预测。

实现线性回归算法

1. 动手生成一个简单的数据集

  1. %matplotlib inline
  2. # 导入所需库
  3. import matplotlib.pyplot as plt
  4. import numpy as np
  5. # 生成数据集
  6. x = np.linspace(-3, 3, 30) # 生成[-3, 3]区间内的30个点
  7. y = 2 * x + 1
  8. # 数据集绘图
  9. plt.scatter(x, y)
  10. plt.show()

【ML 入门】线性回归算法的 Python 实现 - 图1

2. 数据整理

sklearn 中线性回归算法的fit方法需要传入的x和y是两组矩阵,每一行为同一个样本的信息,具体格式为:

  1. x: [ [sample 1], [sample 2], [sample 3], ..., [sample n] ]

因此,我们需要对x和y做以下格式转变:

  1. x = x.reshape((-1, 1))
  2. y = y.reshape((-1, 1))

3. 开始训练

  1. from sklearn import linear_model
  2. # 训练线性回归模型
  3. model = linear_model.LinearRegression()
  4. model.fit(x, y)

4. 结果测试

  1. x_ = np.array([[1], [2]])
  2. model.predict(x_)

可以预测结果为 array([[3.], [5.]]),得到了正确结果。
我们还可以通过 model.coef_model.intercept_ 来查看这时的法向量 【ML 入门】线性回归算法的 Python 实现 - 图2 和截距 b

当数据集中的数据存在随机扰动时:

现实中的数据并不能像上例数据中的那么理想,总会存在这样或那样的随机扰动,我们稍加改动以模拟这个过程:

  1. x = x + np.random.rand(30)

【ML 入门】线性回归算法的 Python 实现 - 图3

运行结果为:
【ML 入门】线性回归算法的 Python 实现 - 图4
可以看出,加入随机扰动之后,线性回归模型对法向量 【ML 入门】线性回归算法的 Python 实现 - 图5 的学习还是比较准确的,但对于截距项就出现了较大的影响。