• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

  • 博客园
  • 联系
  • 订阅
  • 管理

View Post

[Machine Learning] 使用经典线性回归模型实现房价预测

一、内容实现概述

本文主要讲述使用scikit-learn库内置的线性回归模型,实现房价预测

预测房价实现过程如下:

  • 导入所需库:预先导入pandas、matplotlib以及scikit-learn库
  • 导入数据:使用pandas库的文件解析方法read_csv(),读取房价文件数据
  • 数据预处理:对房价数据进行预处理,获得特征数据与目标数据
  • 数据分割:使用sklearn库的数据分割方法对步骤3中的数据进行比例分割,得到训练集和测试集数据
  • 构建线性回归模型:调用sklearn库的线性模型类LinearRegression构建模型
  • 训练模型:调用sklearn库的fit()方法对训练集数据进行训练
  • 预测模型:调用sklearn库的predict()方法对测试集数据进行预测
  • 绘制预测结果:调用matplotlib库的plot()与show()进行绘制并展示预测结果
  • 评估模型:由于该模型是回归模型,所以调用sklearn库的均方误差评估方法mean_squared_error()进行评估

注:

  • 在Python中使用(导入)pandas库时,需要先安装,本实现使用的是pip命令安装 pip install pandas
  • 在Python中使用(导入)matplotlib库时,需要先安装,本实现使用的是pip命令安装 pip install matplotlib
  • 在Python中使用(导入)scikit-learn框架时,需要先安装,本实现使用的是pip命令安装 pip install -U scikit-learn
  • 预先准备好的房价数据BostonHousing.csv
  • Scikit-Learn官方教程

 

二、代码实现

注:源代码地址

# 主题:使用线性回归实现波士顿房价预测
# 任务:找到这些指标(特征)与房价(目标)之间的关系

import pandas as pd
import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# 第一步:导入房价数据
# r为转义字符
house_data = pd.read_csv(r"regression\\linear-regression\\boston-house-prediction\\BostonHousing.csv")


# 第二步:数据预处理
features = house_data.drop("medv", axis=1)
prices = house_data['medv']


# 第三步:分割数据
# 设置这个随机状态(random_state)是为了保证数据集的数据“不随机”​
# 因为设置random_state的目的就是确保每次运行分割程序时,获得完全一样的训练集和测试集。否则,同样的算法模型在不同的训练集和测试集上的效果不一样。如果每次都随机抽样,那么在确定模型和初始参数后,你会发现,模型每运行一次,就会得到不同的预测准确率(因为模型性能通常都对训练集敏感)​,从而使得调参无法有效进行
# 可以这样理解,每个随机状态(random_state,即某个整数值)都代表一批不同的训练集和测试集。如果它的值不变,无论程序运行多少次,获取的都是固定的一批训练集和测试集,这种稳定性为我们进行模型调参提供了方便
# 一旦模型调参完毕,这个值就不需要设置了。如果不设置这个值,就会启用它的默认值None。一旦这个值被设置为None,就启用np.random作为随机种子,即默认以系统时间为随机种子。我们知道,时光荏苒,每时每刻的系统时间都不同,反而让样本的抽取更趋近随机抽样状态。
X_train, X_test, y_train, y_test = train_test_split(features, prices, test_size=0.2, random_state=0)


# 第四步:导入线性回归模型
model = LinearRegression()


# 第五步:训练模型
model.fit(X_train, y_train)


# 第六步:预测模型
y_pred = model.predict(X_test)
print("特征权重:", model.coef_)
print("截距:", model.intercept_)


# 第七步:绘制预测结果
plt.scatter(y_test, y_pred)
plt.xlabel("Actual price")
plt.ylabel("Predicted price")
plt.title("Actual price vs Predicted price")
plt.grid()
plt.plot(y_test, y_test)
plt.show()


# 第八步:评估模型
# 由于回归分析的目标值是连续值,因此我们不能用准确率之类的评估标准来衡量模型的好坏,而应该比较预测值(Predict)和实际值(Actual)之间的差异程度。
# 其中,均方误差(mean-square error,简称MSE)是最常见的评估标准之一,具体公式见该目录下的'mean_squared_error.png'
mse = mean_squared_error(y_test, y_pred)
print("MSE = ", mse)

 

 

三、运行结果

 

 

posted on 2025-01-16 10:25  tony-cao  阅读(354)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3