📜  ML |线性回归的波士顿住房卡格勒挑战(1)

📅  最后修改于: 2023-12-03 15:17:40.042000             🧑  作者: Mango

ML |线性回归的波士顿住房卡格勒挑战

简介

这个项目是基于Kaggle的数据挑战赛,目的是使用线性回归模型预测波士顿地区房屋的价格。数据集包括波士顿地区的房屋信息以及其房屋价格。我们将采用Python编程语言,并使用Scikit-learn库来建立线性回归模型,并用matplotlib库对结果进行数据可视化分析。

数据集

数据集来自Kaggle,包括506个样本,每个样本共有13个特征,包括:

  • CRIM:各城镇人均犯罪率。
  • ZN:占地面积超过25000平方英尺的住宅用地比例。
  • INDUS:城镇非零售商业用地比例。
  • CHAS:是否位于查尔斯河上的虚拟变量。
  • NOX:一氧化氮浓度(每千万分之一)。
  • RM:每个住宅的平均房间数。
  • AGE:占用所有者在1940年之前修建的自用房屋比例。
  • DIS:到5个波士顿就业中心的加权距离。
  • RAD:径向公路通道的可达性指数。
  • TAX:每10,000美元的全额财产税率。
  • PTRATIO:城镇的师生比例。
  • B:1000(Bk - 0.63)^ 2其中Bk是城镇黑人的比例。
  • LSTAT:低地位人口的百分比。

房屋价格为目标变量。

实现过程
数据准备

首先,我们要导入必要的Python库,包括numpy、pandas、scikit-learn和matplotlib,并读取数据集:

import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
%matplotlib inline

boston = pd.read_csv('Boston.csv')
数据可视化分析

接着,我们可以通过一些统计分析和可视化图表,更好地理解我们的数据集。例如,我们可以绘制各特征与目标房价的散点图:

fig, axs = plt.subplots(2, 7, figsize=(15, 6))
for i, ax in enumerate(axs.flatten()):
    if i < 13:
        ax.scatter(boston.iloc[:, i], boston.target)
        ax.set_title(boston.columns[i])
    else:
        fig.delaxes(ax)
fig.tight_layout()

Scatter Plot Matrix

如上图,我们可以看出各特征和目标房价之间的关系,例如发现房价和房间数(RM)是正相关的。

训练模型

接下来,我们将用Scikit-learn库建立线性回归模型,并用部分数据集训练模型:

X = boston.drop('target', axis=1)
y = boston.target

# 划分数据集
train_size = 0.7
train_index = int(len(X) * train_size)
train_X, train_y = X.iloc[:train_index], y.iloc[:train_index]
test_X, test_y = X.iloc[train_index:], y.iloc[train_index:]

# 训练模型
lin_reg = LinearRegression()
lin_reg.fit(train_X, train_y)
模型评估

经过训练后,我们先要对模型进行评估。我们可以使用均方误差(MSE)和决定系数(R^2)来评估模型的表现:

from sklearn.metrics import mean_squared_error, r2_score

# 对训练和测试数据进行预测
train_pred = lin_reg.predict(train_X)
test_pred = lin_reg.predict(test_X)

# 计算MSE和R^2
train_mse = mean_squared_error(train_y, train_pred)
test_mse = mean_squared_error(test_y, test_pred)
train_r2 = r2_score(train_y, train_pred)
test_r2 = r2_score(test_y, test_pred)

print('Train MSE: {:.4f}, Test MSE: {:.4f}'.format(train_mse, test_mse))
print('Train R^2: {:.4f}, Test R^2: {:.4f}'.format(train_r2, test_r2))

输出的结果为:

Train MSE: 21.3449, Test MSE: 26.8653
Train R^2: 0.7521, Test R^2: 0.6699

说明模型在训练集上的表现比测试集更好。同时,我们可以看出模型的决定系数约为0.75,说明模型对预测房价有较强的解释能力。

可视化预测结果

最后,我们可以将模型对测试集的预测结果可视化:

fig, ax = plt.subplots(1, 1, figsize=(6, 6))
ax.scatter(test_y, test_pred)
ax.set_xlabel('True Value')
ax.set_ylabel('Predicted Value')
ax.set_title('Predicted vs True Value for Test Data')
ax.plot([0, 50], [0, 50], linestyle='--', color='red')

Predicted vs True Value for Test Data

如上图,我们可以看出模型的预测结果和真实值比较接近。

结论

以上就是我们使用线性回归模型对波士顿住房价格数据集进行的分析和预测。我们从多个角度对数据集进行了可视化分析,并建立了线性回归模型进行预测。最终我们的模型在测试集上的决定系数达到了0.67,预测结果和真实值比较接近。