我们现在开始学习这门课程的第一个AI程序:利用线性回归预测波士顿房价。
原理简介
如果你之前没有听说过线性回归这个概念,那么在这节课中,你只需要把它当做是一次线性函数 y = kx+b 就可以了。我们要做的就是利用已有数据,去学习得到这条直线,有了这条直线,则对于横坐标 x 的任意取值,我们都可以找到直线上对应的 y 值,也就是模型的预测值。
图中的直线 y = kx+b 是第 1 节课中提到的体重预测模型,它是最简单的线性回归模型。这节课我们要学习的房价预测模型也是 y = kx+b 这个形式,输入特征 x 是住宅平均房间数,输出标记 y 是波士顿房价。
下面正式开始编程之旅吧!
代码分析
导入相关的工具包
# 使用 sklearn 内置的波士顿房价数据集,load_boston 是加载数据集的函数
from sklearn.datasets import load_boston
# 使用sklearn 中的 train_test_split 划分数据集
from sklearn.model_selection import train_test_split
# 使用 sklearn 中的线性回归模型进行预测
from sklearn.linear_model import LinearRegression
# 使用 matplotlib 中的 pyplot 进行可视化
import matplotlib.pyplot as plt
加载数据集
# 加载波士顿房价数据集,返回特征X和标签y
X, y = load_boston(return_X_y=True)
# 只取第6列特征(方便可视化):住宅平均房间数
X = X[:,5:6]
# 划分为训练集和测试集,测试集取20%
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2, random_state=2020)
模型训练和预测
# 创建线性回归对象
regr = LinearRegression()
# 使用训练集训练模型
regr.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = regr.predict(X_test)
预测结果可视化
# 画测试数据散点图
plt.scatter(X_test, y_test, color='blue')
# 画线性回归模型对测试数据的拟合曲线
plt.plot(X_test, y_pred, color='red')
# 显示绘图结果
plt.show()
# 打印斜率和截距
print('斜率:{}, 截距:{}'.format(regr.coef_,regr.intercept_))
下面是运行上述程序后的效果图:
全部代码
# 1. 导入相关的工具包
# 使用 sklearn 内置的波士顿房价数据集,load_boston 是加载数据集的函数
from sklearn.datasets import load_boston
# 使用sklearn 中的 train_test_split 划分数据集
from sklearn.model_selection import train_test_split
# 使用 sklearn 中的线性回归模型进行预测
from sklearn.linear_model import LinearRegression
# 2. 加载数据集
# 加载波士顿房价数据集,返回特征X和标签y
X, y = load_boston(return_X_y=True)
# 只取第6列特征(方便可视化):住宅平均房间数
X = X[:,5:6]
# 划分为训练集和测试集,测试集取20%
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,random_state=2020)
# 3. 模型训练和预测
# 创建线性回归对象
regr = LinearRegression()
# 使用训练集训练模型
regr.fit(X_train,y_train)
# 在测试集上进行预测
y_pred = regr.predict(X_test)
# 4. 打印前3个预测值和真实值
print('y_pred:',y_pred[:3])
print('y_test:',y_test[:3])
# 5. 打印斜率和截距
print(regr.coef_,regr.intercept_)