💥 欢迎来到我的博客!很高兴能在这里与您相遇!希望您能在这个轻松愉快的环境中,发现有趣的内容和丰富的知识。同时,期待您分享自己的观点和见解,让我们一起开启精彩的交流旅程!🌟
- 首页:GPT-千鑫 – 热爱AI、热爱Python的天选打工人,活到老学到老!!!
- 导航
- 人工智能系列:包含 OpenAI API Key教程, 50个Prompt指令, Midjourney生成攻略等更多教程…
- 常用开发工具:包含 AI代码补全工具, Vscode-AI工具, IDER or Pycharm-AI工具, 如何使用Cursor等更多教程…- 💥 期待与您一起探索AI、共同成长。✨ 立即订阅本专栏,加入我们的旅程,共同发现更多精彩!🌟
今天,我们将通过一个实战案例,带你一步步使用 Python 的 Scikit-learn (sklearn) 库构建线性回归模型,预测波士顿的房价。准备好了吗?
一、线性回归模型的魅力
线性回归是统计学中最基本也是最常用的算法之一。它通过建立自变量(特征)与因变量(目标)之间的线性关系,来进行预测和分析。在实际应用中,线性回归广泛应用于经济预测、市场分析、工程设计等领域。
为什么选择线性回归?
- 简单易懂:线性回归模型直观,容易解释。
- 计算高效:适合大规模数据处理,训练速度快。
- 可扩展性强:可以通过多项式回归等方式扩展模型复杂度。
二、波士顿房价数据集简介
波士顿房价数据集是机器学习和统计学中经典的数据集之一。该数据集包含506个样本,每个样本有13个特征,描述了波士顿地区的各项影响房价的因素,如犯罪率、房间数量、税率等。目标变量是房价中位数,单位为千美元。
数据集特征介绍
- CRIM:人均犯罪率
- ZN:住宅用地超过25000平方英尺的比例
- INDUS:城镇非零售商用土地的比例
- CHAS:查尔斯河虚拟变量(1表示靠近,0表示不靠近)
- NOX:一氧化氮浓度
- RM:住宅平均房间数
- AGE:1940年前建成的自用房屋比例
- DIS:距五个波士顿就业中心的加权距离
- RAD:高速公路可达性指数
- TAX:每一万美元的不动产税率
- PTRATIO:城镇师生比例
- B:1000(Bk - 0.63)^2,其中Bk为城镇中黑人比例
- LSTAT:人口中地位低下者的比例
- MEDV:房价中位数
了解这些特征,有助于我们更好地理解模型的预测结果。
三、使用Sklearn构建线性回归模型的步骤
接下来,我们将通过具体的代码实现,详细讲解如何使用Sklearn构建线性回归模型。
1. 数据加载与预处理
首先,我们需要加载波士顿房价数据集,并进行必要的数据预处理。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rcParams
from sklearn import datasets
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
# 1.加载 datasets 中的波士顿住房数据集
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
# data
X = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
# target
y = raw_df.values[1::2, 2]
解析:
- 使用
pandas
读取数据,并进行必要的格式转换。 - 将特征和目标变量分离,特征存储在
X
中,目标变量存储在y
中。
2. 划分训练集与测试集
为了评估模型的性能,我们将数据集划分为训练集和测试集。
# 使用 train_test_split 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=125)
解析:
- 使用
train_test_split
将数据集按80%训练,20%测试进行划分。 - 设置
random_state
确保结果的可重复性。
3. 建立并训练线性回归模型
接下来,我们使用Sklearn的 LinearRegression
进行建模和训练。
# 建立线性回归模型
lrf = LinearRegression().fit(X_train, y_train)
print(" Linear Regression model:\n", lrf)
解析:
- 实例化
LinearRegression
对象,并调用fit
方法进行训练。 - 输出训练后的模型参数。
4. 模型预测与可视化
训练完成后,我们使用测试集进行预测,并通过可视化手段对比真实值与预测值。
# 预测测试集结果
y_pred = lrf.predict(X_test)
print("前20个结果:\n", y_pred[:20])
# 线性回归结果可视化
rcParams['font.sans-serif'] = 'SimHei'
fig = plt.figure(figsize=(10,6))
plt.plot(range(y_test.shape[0]), y_test, linewidth=1.5, linestyle='-', color='blue')
plt.plot(range(y_test.shape[0]), y_pred, linewidth=1.5, linestyle='-.', color='red')
plt.xlim((0,102))
plt.ylim((0, 55))
plt.legend(['真实值','预测值'])
plt.show()
解析:
- 使用训练好的模型对测试集进行预测,结果存储在
y_pred
中。 - 绘制真实值与预测值的对比图,直观展示模型的预测效果。
5. 评估模型性能
为了全面评估模型的效果,我们需要计算多个评价指标。
from sklearn.metrics import explained_variance_score, median_absolute_error
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
print("boston 线性回归模型的平均绝对误差:", mean_absolute_error(y_test, y_pred))
print("boston 线性回归模型的均方误差:", mean_squared_error(y_test, y_pred))
print("boston 线性回归模型的中值绝对误差:", median_absolute_error(y_test, y_pred))
print("boston 线性回归模型的可解释方差值:", explained_variance_score(y_test, y_pred))
print("boston 线性回归模型的 R^2值:", r2_score(y_test, y_pred))
解析:
- 平均绝对误差 (MAE):预测值与真实值的平均绝对差。
- 均方误差 (MSE):预测值与真实值差的平方的平均值。
- 中值绝对误差 (Median Absolute Error):预测值与真实值差的中位数绝对值。
- 可解释方差值 (Explained Variance Score):衡量模型解释数据变异性的比例。
- R²值:决定系数,衡量模型的解释能力,值越接近1表示模型越好。
四、分析模型结果
通过上述评价指标,我们可以发现:
- 平均绝对误差 为 3.377,表示预测房价与真实值的平均差距约为3.377千美元。
- 均方误差 为 31.151,反映了预测误差的平方和,较大的MSE提示模型在某些预测上存在较大误差。
- 中值绝对误差 为 1.779,证明大部分预测误差较小。
- 可解释方差值 为 0.711,说明模型解释了约71.1%的数据变异性。
- R²值 为 0.707,意味着模型解释了约70.7%的房价变异性,表现较为理想。
总体而言,线性回归模型在预测波士顿房价上表现良好,但仍有提升空间。
附录:完整代码
为了方便大家快速上手,以下是完整的代码实现:
以下是代码的中文翻译:
```python
# -*- coding: utf-8 -*-
""" 使用 sklearn 估计器构建线性回归模型 """
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rcParams
from sklearn import datasets
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
#from sklearn.preprocessing import StandardScaler
# 1. 加载 datasets 中的波士顿住房数据集
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
# 数据
X = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
# 目标
y = raw_df.values[1::2, 2]
# f_names = housing['feature_names']
# 2. 将数据集划分为训练集和测试集
# 使用 train_test_split 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=125)
# 3. 建立线性回归模型
lrf = LinearRegression().fit(X_train, y_train)
print("线性回归模型:\n", lrf)
# 4. 预测测试集结果
y_pred = lrf.predict(X_test)
print("前20个结果:\n", y_pred[:20])
# 线性回归结果可视化
rcParams['font.sans-serif'] = 'SimHei'
fig = plt.figure(figsize=(10, 6))
plt.plot(range(y_test.shape[0]), y_test, linewidth=1.5, linestyle='-', color='blue')
plt.plot(range(y_test.shape[0]), y_pred, linewidth=1.5, linestyle='-.', color='red')
plt.xlim((0, 102))
plt.ylim((0, 55))
plt.legend(['真实值', '预测值'])
# plt.savefig('linear_result.png')
plt.show()
# 回归模型评价指标
from sklearn.metrics import explained_variance_score, median_absolute_error
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
print("波士顿线性回归模型的平均绝对误差:", mean_absolute_error(y_test, y_pred))
print("波士顿线性回归模型的均方误差:", mean_squared_error(y_test, y_pred))
print("波士顿线性回归模型的中值绝对误差:", median_absolute_error(y_test, y_pred))
print("波士顿线性回归模型的可解释方差值:", explained_variance_score(y_test, y_pred))
print("波士顿线性回归模型的 R^2 值:", r2_score(y_test, y_pred))
这段代码的主要功能是使用 sklearn 库构建和评估一个线性回归模型,利用波士顿住房数据集进行训练和测试,并可视化预测结果。
💥 更多精彩文章:期待与您一起共同成长。✨加入我们的旅程,共同发现更多精彩!🌟🌟