欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Sklearn 线性回归实战

程序员文章站 2022-07-14 13:41:08
...

Sklearn 线性回归实战

本文是根据Python的sklearn第三方库完成的,由于在网上可以找到的例子大多数只有官方糖尿病的例子还有训练几个点的例子,所以便把我这一次实战学到的切实体验进行逐步分析。

逐步解释
import numpy as np
from sklearn import linear_model
from matplotlib import pyplot as plt

首先我们需要三个第三方库,分别是用于处理数据的numpy,绘制图片matplotlib和用于拟合的sklearn。本文假设各位读者的Python已经适配好,如果没有请自行安装完毕。

x_train = np.arange(10).reshape(10, 1)				     # 制作训练集的输入集合
random_error = np.random.normal(0, 1, 10).reshape(10, 1)  # 制作随机误差
y_train = x_train * 2 + 1 + random_error			     # 制作训练集的输出集合  
domain = np.arange(0, 10)							    # 定义域

这部分是我们的准备工作,用于之后的训练,这里必须要强调一点,我们使用numpy.arange(d)产生的向量是一个1×101\times10的行向量,而在后面的训练中使用的是列向量,所以我们还需要使用reshape(d0, d1)的方式,把行向量转化为列向量。

if __name__ == '__main__':
    plt.scatter(x_train, y_train, color='black')	# 绘制训练集的散点图
    plt.xlabel("x")								# x轴名称
    plt.ylabel("y")                                # y轴名称
    plt.plot(domain, 2 * domain + 1, linewidth=1,  # 绘制理论曲线
             color='blue', label="y = 2x + 1")
    reg = linear_model.LinearRegression() 		   # 使用线性回归模型
    reg.fit(x_train, y_train)                       # 对x_train y_train进行线性回归
    print(reg.coef_)
    print(reg.intercept_)
    bias = reg.intercept_[0]
    slope = reg.coef_[0][0]
    plt.plot(domain, slope * domain + bias, linewidth=1,
             color='red', label="result")			# 绘制拟合直线
    plt.legend()								  # 绘制标注
    plt.show()									  # 显示图片

这一部分是我们的主函数,其中的含有plt的部分是绘图的部分,实质上只起到直观的目的。而关键则是我们接下来的拟合部分,每一步代码的功能已经以注释的形式给出。

另外,我们需要观察一下reg.coef_reg.intercept_的形式,这有助于我们对拟合结果进行使用:

[[2.09321333]] # reg.coef_
[0.50232254]   # reg.intercept_

附上一张输出的图片:
Sklearn 线性回归实战

可以看出,两条曲线并没有完全重合,这是因为我们在建立训练集的时候引入了随机误差。当然,我们使用拟合的目的绝对不仅仅是绘制直线而已,还需要对未知的输入(还是需要注意输入的格式,列向量)进行预测:

>>> print(reg.predict(np.random.normal(5, 1, 1).reshape(1, 1)))
[[10.52379246]]
完整代码
import numpy as np
from sklearn import linear_model
from matplotlib import pyplot as plt

x_train = np.arange(10).reshape(10, 1)
random_error = np.random.normal(0, 1, 10).reshape(10, 1)
y_train = x_train * 2 + 1 + random_error
domain = np.arange(0, 10)

if __name__ == '__main__':
    plt.scatter(x_train, y_train, color='black')
    plt.xlabel("x")
    plt.ylabel("y")
    plt.plot(domain, 2 * domain + 1, linewidth=1,
             color='blue', label="y = 2x + 1")
    reg = linear_model.LinearRegression()
    reg.fit(x_train, y_train)
    print(reg.coef_)
    print(reg.intercept_)
    bias = reg.intercept_[0]
    slope = reg.coef_[0][0]
    plt.plot(domain, slope * domain + bias, linewidth=1,
             color='red', label="result")
    plt.legend()
    plt.show()
相关标签: Python 机器学习