机器学习实战(基于线性回归预测房屋价格)
·
目录
1. 原理
线性回归是一种基础的监督学习算法,用于解决回归问题。它的目标是找到一个线性函数,能够尽可能准确地预测目标变量(如房价)与特征变量(如房屋面积)之间的关系。
线性回归公式
假设我们有一个输入特征x(如房屋面积)和一个目标变量 y(如房价),线性回归的目标是找到一个线性关系:
其中:
- w是权重(斜率),表示特征对目标的影响程度。
- b 是偏置(截距),表示线性函数与纵轴的交点。
通过最小化预测值 y^ 和真实值 y 之间的误差(通常是均方误差,MSE),可以优化 w 和 b。
2. 具体过程
我们将通过以下步骤实现一个简单的线性回归模型,用于预测房屋价格:
步骤
- 数据准备:
- 构造一个简单的数据集,其中房屋面积(平方英尺)是输入特征,房价(单位:万美元)是目标变量。
- 数据可视化:
- 绘制数据点,观察房屋面积和价格之间的关系。
- 训练模型:
- 使用线性回归算法拟合数据,找到最优的 ww 和 bb。
- 模型评估:
- 计算均方误差(MSE)来评估模型性能。
- 预测新数据:
- 使用训练好的模型预测新房屋面积对应的价格。
3. 代码实现
以下是完整的 Python 代码,使用 scikit-learn 库实现线性回归。
# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# 1. 数据准备
# 房屋面积(平方英尺)和对应的房价(单位:万美元)
X = np.array([500, 800, 1000, 1200, 1500]).reshape(-1, 1) # 特征:房屋面积
y = np.array([50, 80, 100, 120, 150]) # 目标:房价
# 2. 数据可视化
plt.scatter(X, y, color='blue', label='Data Points')
plt.xlabel('House Size (sq ft)')
plt.ylabel('Price (k$)')
plt.title('House Size vs Price')
plt.legend()
plt.show()
# 3. 训练模型
model = LinearRegression() # 初始化线性回归模型
model.fit(X, y) # 拟合数据
# 获取模型参数
w = model.coef_[0] # 权重(斜率)
b = model.intercept_ # 偏置(截距)
print(f"Trained Model: y = {w:.2f} * x + {b:.2f}")
# 4. 模型评估
y_pred = model.predict(X) # 预测训练数据
mse = mean_squared_error(y, y_pred) # 计算均方误差
print(f"Mean Squared Error: {mse:.2f}")
# 可视化拟合直线
plt.scatter(X, y, color='blue', label='Data Points')
plt.plot(X, y_pred, color='red', label='Fitted Line') # 拟合直线
plt.xlabel('House Size (sq ft)')
plt.ylabel('Price (k$)')
plt.title('Linear Regression Fit')
plt.legend()
plt.show()
# 5. 预测新数据
new_X = np.array([600, 1400]).reshape(-1, 1) # 新的房屋面积
new_y_pred = model.predict(new_X) # 预测价格
for size, price in zip(new_X.flatten(), new_y_pred):
print(f"Predicted price for house size {size} sq ft: {price:.2f} k$")
4. 代码解析
(1) 数据准备
- 我们创建了一个简单的房屋数据集,包含面积(
X)和价格(y)。 - 数据被转换为 NumPy 数组,
X的形状为二维(reshape(-1, 1)),以符合scikit-learn的输入格式。
(2) 数据可视化
- 使用
matplotlib绘制散点图,观察面积和价格之间的线性关系。
(3) 训练模型
- 使用
LinearRegression模型拟合数据。 - 模型的参数(权重 ww 和偏置 bb)可以通过
model.coef_和model.intercept_提取。
(4) 模型评估
- 使用
mean_squared_error计算预测值和真实值之间的误差。 - 绘制拟合直线,观察模型的效果。
(5) 预测新数据
- 输入新的房屋面积,使用训练好的模型预测对应的房价。
5. 输出结果
训练模型的方程
假设训练后的模型输出为:
这意味着每增加 1 平方英尺,房价增加 0.1 万美元。
均方误差
例如,模型的均方误差为:
MSE=0.0
表示模型完全拟合了数据。
预测新数据
对于房屋面积为 600 和 1400 平方英尺的房子,预测结果可能如下:
Predicted price for house size 600 sq ft: 60.00 k$
Predicted price for house size 1400 sq ft: 140.00 k$
6. 可视化效果
-
数据点散点图:
- 蓝色点表示训练数据。
- 红色直线表示拟合的线性模型。

-
拟合直线图:
显示模型如何拟合数据点。


7. 总结
- 原理:线性回归通过最小化误差找到特征和目标之间的线性关系。
- 过程:数据准备、模型训练、评估和预测。
- 代码:使用
scikit-learn实现只需几行代码,非常高效。 -
这个例子展示了线性回归的基础应用,是理解机器学习的一个良好起点!如果需要更复杂的例子(如分类任务或深度学习),可以进一步扩展!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)