一元线性回归适用于解决有如下数据特征的场景:
1. 单个特征向量与结果向量之间的关系
2. 特征向量与结果向量之间存在线形关系
下面是一个简单的两列数据集,第一列和第二列存在线形关系(广告投入量,产品销售量),通过训练此数据集,得到一元线性回归模型(y = 3.74x + (-36.36))。
给定第一列数据,从而用此模型可预测第二列数据。基于sklearn模块建立并训练一元线形回归模型,通过广告投入量和产品销售量作为数据集,从而实现给定任意广告投入量,可预测产品销售量,具体代码如下所示
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression
import numpy as np
# 第一步:数据获取
data = np.array([
[29, 77],
[28, 62],
[34, 93],
[31, 84],
[25, 59],
[29, 64],
[32, 80],
[31, 75],
[24, 58],
[33, 91],
[25, 51],
[31, 73],
[26, 65],
[30, 84]])
x = np.reshape(data[:, 0], (-1, 1)) # 第一列为广告投入量
y = np.reshape(data[:, 1], (-1, 1)) # 第二列为产品销售量
# 第二步:绘制散点图
plt.scatter(x, y) # 通过散点图,很明显确定两列数据具备线形相关,满足一元线形回归的使用条件
plt.xlabel("Advertising investment")
plt.ylabel("Product sales volume")
# 第三步 建立一元线性回归模型
lr = LinearRegression()
lr.fit(x, y) # 训练模型
a = round(lr.coef_[0][0], 2) # 查看斜率
b = round(lr.intercept_[0], 2) # 查看截距
print("线性回归模型为:y = {}x + {}.".format(a, b))
x_test = np.array([[20], [55]])
y_test = lr.predict(x_test)
plt.plot(x_test, y_test, color='r')
# 第四步 对回归模型进行检验
lr.score(x, y)
# 第五步 利用回归模型进行预测
x_pred = [[40], [45], [50]]
y_pred = lr.predict(x_pred)
plt.scatter(x_pred, y_pred, color='g', marker='*')
plt.legend(['mode','train','pred'])
plt.show()