目录

1. 原理

2. 具体过程

3. 代码实现

4. 代码解析

(1) 数据准备

(2) 数据可视化

(3) 训练模型

(4) 模型评估

(5) 预测新数据

5. 输出结果

训练模型的方程

均方误差

预测新数据

6. 可视化效果

7. 总结


 

1. 原理

线性回归是一种基础的监督学习算法,用于解决回归问题。它的目标是找到一个线性函数,能够尽可能准确地预测目标变量(如房价)与特征变量(如房屋面积)之间的关系。

线性回归公式

假设我们有一个输入特征x(如房屋面积)和一个目标变量 y(如房价),线性回归的目标是找到一个线性关系:

eq?y%3Dw%5Ccdot%20x+b

其中:

  • w是权重(斜率),表示特征对目标的影响程度。
  • b 是偏置(截距),表示线性函数与纵轴的交点。

通过最小化预测值 y^​ 和真实值 y 之间的误差(通常是均方误差,MSE),可以优化 w 和 b。

2. 具体过程

我们将通过以下步骤实现一个简单的线性回归模型,用于预测房屋价格:

步骤

  1. 数据准备:
    • 构造一个简单的数据集,其中房屋面积(平方英尺)是输入特征,房价(单位:万美元)是目标变量。
  2. 数据可视化:
    • 绘制数据点,观察房屋面积和价格之间的关系。
  3. 训练模型:
    • 使用线性回归算法拟合数据,找到最优的 ww 和 bb。
  4. 模型评估:
    • 计算均方误差(MSE)来评估模型性能。
  5. 预测新数据:
    • 使用训练好的模型预测新房屋面积对应的价格。

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. 输出结果

训练模型的方程

假设训练后的模型输出为:

eq?y%3D0.1%5Ccdot%20x+0.0

这意味着每增加 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. 可视化效果

  1. 数据点散点图:

    • 蓝色点表示训练数据。
    • 红色直线表示拟合的线性模型。

756f76b63a0b48f6b22596fdfe771ede.png

  1. 拟合直线图:

显示模型如何拟合数据点。

a644e0ef4dcf496fb2594231a4059d87.png

2b8fa4ff8fbd4be596693eb7f2df65b1.png

7. 总结

  • 原理:线性回归通过最小化误差找到特征和目标之间的线性关系。
  • 过程:数据准备、模型训练、评估和预测。
  • 代码:使用 scikit-learn 实现只需几行代码,非常高效。
  • 这个例子展示了线性回归的基础应用,是理解机器学习的一个良好起点!如果需要更复杂的例子(如分类任务或深度学习),可以进一步扩展!

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐