机器学习:线性回归
机器学习:线性回归算法,让数据“说话”的艺术
大家好!今天我们来聊聊机器学习中的一位“老大哥”——线性回归算法。它不仅是机器学习的基础,还是我们理解监督学习流程的绝佳起点。所以,让我们从最简单的线性关系开始吧!
线性关系:数据中的“直来直去”
线性关系,顾名思义,就是两个变量之间的关系可以用一条直线来表示。比如,你每多吃一块巧克力,体重就会增加0.5公斤(别担心,这只是假设!)。这种关系可以用一个简单的数学公式表示:
$y = a x + b $
这里:
- $ y $ 是因变量(比如体重),
- $ x $ 是自变量(比如巧克力数量),
- $ b $ 是截距(当 $ x = 0 $ 时 $ y $) 的值),
- $ a $ 是斜率($ x $ 每增加一个单位,$ y $ 的变化量)。

线性关系的三大特征
- 直线关系:在图上画出来就是一条直线,简单明了。
- 固定比例变化:$ x $ 的变化会导致 $ y $ 以固定的比例变化,比如每多吃一块巧克力,体重增加0.5公斤。
- 可加性:多个自变量的线性关系可以叠加,比如房价不仅受面积影响,还受地段影响。
线性关系在统计学、经济学、机器学习等领域都有广泛应用。比如:
- 回归分析:通过线性回归模型预测房价。
- 趋势分析:分析时间序列数据中的线性趋势。
- 优化问题:在运筹学中,线性规划问题通常基于线性关系。
单变量线性回归:从“面积”预测“房价”
让我们以房价预测为例,看看线性回归是如何工作的。假设我们有一组数据,记录了房屋面积和对应的价格:
| 面积(平方米) | 价格(万元) |
|---|---|
| 25 | 153 |
| 48 | 281 |
| 35 | 209 |
| 60 | 477 |
| 72 | 433 |
| 78 | 469 |
| 82 | 499 |
| 93 | 555 |
| 103 | 620 |
我们的目标是找到一个函数,能根据面积预测房价。这个过程叫做数据拟合,就是用数学函数去近似表示数据点的趋势。
用Python实现单变量线性回归
我们可以用Python的scikit-learn库来完成这个任务。以下是代码示例:
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
# 假设数据已经加载到DataFrame中
data = pd.DataFrame({
'面积': [25, 48, 35, 60, 72, 78, 82, 93, 103],
'价格': [153, 281, 209, 487, 453, 469, 499, 555, 700]
})
# 特征和标签
X = data[['面积']]
y = data['价格']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=42)
# 训练线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 输出模型参数
print(f"模型截距: {model.intercept_}")
print(f"模型系数: {model.coef_}")
# 防止乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# 可视化
plt.scatter(X_test, y_test, color='blue', label='实际价格')
plt.plot(X_test, y_pred, color='red', label='预测价格')
plt.xlabel('面积 (平方米)')
plt.ylabel('价格 (万元)')
plt.title('房价预测')
plt.legend()
plt.show()
训练过程图解
通过这个模型,我们只需要知道房屋面积,就可以预测房价。是不是很简单?你已经掌握了单变量线性回归的基本操作,成为一名合格的“调包侠”了!
多变量线性回归:考虑更多因素
显然,房价不仅仅受面积影响,还可能受其他因素影响,比如距离地铁站的距离。这时,我们就需要用到多变量线性回归。模型的形式为:
$ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \beta_3 x_3 + ... + \beta_n x_n + \epsilon $
其中:
- $ y $ 是因变量(如房价),
- $ x_1, x_2, \dots, x_n $ 是自变量(如面积、地铁站距离等),
- $ \beta_0 $ 是截距,
- $ \beta_1, \beta_2, \dots, \beta_n $ 是回归系数,
- $ \epsilon $ 是误差项。
用Python实现多变量线性回归
以下是代码示例:
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
# 生成示例数据
np.random.seed(42)
n_samples = 100
# 生成房屋面积 (平方米)
area = np.random.randint(50, 200, size=n_samples)
# 生成距离地铁站的距离 (米)
distance_to_subway = np.random.randint(100, 2000, size=n_samples)
# 生成房价 (万元)
price = 2.5 * area - 0.02 * distance_to_subway + np.random.normal(0, 50, size=n_samples)
# 创建DataFrame
data = pd.DataFrame({
'area': area,
'distance_to_subway': distance_to_subway,
'price': price
})
# 分割数据集为训练集和测试集
X = data[['area', 'distance_to_subway']]
y = data['price']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建线性回归模型
model = LinearRegression()
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估模型
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"均方误差 (MSE): {mse}")
print(f"决定系数 (R^2): {r2}")
# 输出模型参数
print(f"截距 (Intercept): {model.intercept_}")
print(f"系数 (Coefficients): {model.coef_}")
# 示例预测
example = pd.DataFrame({'area': [100], 'distance_to_subway': [500]})
predicted_price = model.predict(example)
print(f"预测房价: {predicted_price[0]} 万元")
决定系数 $ R^2 $:模型的“成绩单”
决定系数($ R^2 $)是评估模型性能的重要指标:
- 解释能力:$ R^2 $ 表示模型能够解释目标变量变化的百分比。比如 $ R^2 = 0.8 $ 表示模型能解释80%的变化。
- 取值范围:\(R^2\) 的取值范围是[0,1]:
- $ R^2 = 1$:模型完美拟合数据。
- $ R^2 = 0 $:模型无法解释目标变量的变化。
- $ R^2 < 0 $:模型的表现比直接使用均值预测更差(通常表明模型有问题)。
扩展
学会调包足以应付工作,但应付不了面试,也不能拿来装B,所以了解其背后原理也不无坏处:《机器数学:最小二乘法》。
总结
通过今天的探索,我们学习了线性回归的基本概念和实现方法。无论是单变量还是多变量线性回归,它们都是机器学习中最基础也最重要的工具。掌握了这些,你就迈出了成为数据科学家的第一步!
下次再见,我们继续探索更多有趣的机器学习算法!🚀

浙公网安备 33010602011771号