开发环境:jupyter notebook
开发使用的框架(包):Scikit-learn
数据来源:Scikit-learn自带数据集
导入数据
# 导入sklearn自带数据集波士顿房价
from sklearn import datasets
boston_data = datasets.load_boston()
# 定义数据
X = boston_data.data
# 定义标签
y = boston_data.target
数据集划分
# 数据集划分(三七分)
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X, # 属性(特征)数据
y, # 标签值
test_size=0.3, # 测试集占比
random_state=12, # 复现种子
shuffle=None, # 是否(洗牌)打乱
stratify=None) # 保持测试集与整个数据集的结果比例一致
'''
训练集占比:0.7
测试集占比:0.3
'''
参数说明:
stratify主要用于分类上,如果让stratify = y,意思是让划分测试集上的分类结果比例与未划分的整个数据集上的比例一致
模型训练、预测及评估
# 线性回归模型训练
from sklearn import linear_model
# 调用线性回归模型
LR_model = linear_model.LinearRegression()
# 训练模型
LR_model.fit(X_train,y_train)
# 在测试集上预测
y_pred_LR = LR_model.predict(X_test)
# 评估模型
from sklearn import metrics
# 均方差
MSE_LR = metrics.mean_squared_error(y_test,y_pred_LR)
# 平均绝对误差
MAE_LR = metrics.mean_absolute_error(y_test,y_pred_LR)
print(f'MSE_LR: {MSE_LR}',
f'MAE_LR: {MAE_LR}',
sep='\n')
可视化结果
# 可视化预测值与真实值
import matplotlib.pyplot as plt
import seaborn;seaborn.set() # 设置绘图风格
%matplotlib inline
import numpy as np
# 创建画布
fig = plt.figure(figsize=[4,3],dpi=200)
plt.scatter(y_test,
y_pred_LR,
s=1.5)
plt.xlabel('y_test');plt.ylabel('y_pred_LR')
plt.title('y_test & y_pred_LR')
x = np.arange(10,50)
y_linear = x
plt.plot(x,
y_linear,
c='red',
lw=2)
图形说明:
预测的房价如果与真实的房价很接近的话,所有的数据点应该向y=x这条线周围,由上图可见预测值大致在y=x的周围,且趋势一致
这个专栏会持续更新~