用最直观的方式理解机器学习中最基础的算法
线性回归(Linear Regression)是统计学中最基础、应用最广泛的预测模型之一。它的核心思想很简单:用一条直线(或超平面)来拟合数据点,从而建立输入变量与输出变量之间的线性关系。

线性回归的数学公式为:
$$y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + ... + \beta_n x_n + \epsilon$$
其中:
最小二乘法(Ordinary Least Squares, OLS)的目标是找到一组参数,使得预测值与实际值之间的误差平方和最小:
$$\min_{\beta} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2$$
几何意义:在所有可能的直线中,找到那条使所有数据点到直线的垂直距离平方和最小的直线。

通过求导并令导数为零,可以得到正规方程(Normal Equation):
$$\beta = (X^T X)^{-1} X^T y$$
这个方程可以直接计算出最优参数,无需迭代。
import numpy as npfrom sklearn.linear_model import LinearRegressionfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import r2_score, mean_squared_error# 生成示例数据np.random.seed(42)X = np.random.randn(100, 2) # 2个特征y = 3*X[:, 0] + 2*X[:, 1] + 1 + np.random.randn(100)*0.5 # 真实关系 + 噪声# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)# 创建并训练模型model = LinearRegression()model.fit(X_train, y_train)# 预测与评估y_pred = model.predict(X_test)print(f"R² Score: {r2_score(y_test, y_pred):.4f}")print(f"RMSE: {np.sqrt(mean_squared_error(y_test, y_pred)):.4f}")# 查看系数print(f"截距: {model.intercept_:.4f}")print(f"系数: {model.coef_}")输出示例:
R² Score: 0.9782RMSE: 0.4873截距: 0.9234系数: [2.9876 1.9567]import statsmodels.api as smimport pandas as pd# 添加常数项(截距)X_train_const = sm.add_constant(X_train)# 拟合OLS模型model_sm = sm.OLS(y_train, X_train_const)results = model_sm.fit()# 输出详细统计报告print(results.summary())statsmodels的优势:
| R² | ||
| 调整R² | ||
| RMSE | ||
| MAE |
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error# 计算各项指标r2 = r2_score(y_test, y_pred)rmse = np.sqrt(mean_squared_error(y_test, y_pred))mae = mean_absolute_error(y_test, y_pred)print(f"R²: {r2:.4f}")print(f"RMSE: {rmse:.4f}")print(f"MAE: {mae:.4f}")from sklearn.datasets import fetch_california_housingfrom sklearn.preprocessing import StandardScaler# 加载加州房价数据集housing = fetch_california_housing()X, y = housing.data, housing.target# 数据标准化scaler = StandardScaler()X_scaled = scaler.fit_transform(X)# 划分数据X_train, X_test, y_train, y_test = train_test_split( X_scaled, y, test_size=0.2, random_state=42)# 训练模型model = LinearRegression()model.fit(X_train, y_train)# 评估y_pred = model.predict(X_test)print(f"测试集R²: {r2_score(y_test, y_pred):.4f}")# 特征重要性分析feature_importance = pd.DataFrame({ 'feature': housing.feature_names, 'coefficient': model.coef_}).sort_values('coefficient', key=abs, ascending=False)print("\n特征重要性排序:")print(feature_importance)问题:特征之间高度相关,导致系数估计不稳定。
解决:
问题:异常值会严重影响最小二乘法的拟合结果。
解决:
问题:数据关系并非线性。
解决:
线性回归虽然简单,但它是理解更复杂模型的基础。掌握它,你就迈出了机器学习的第一步。
核心要点回顾:
本文代码可直接运行,建议配合Jupyter Notebook边学边练。
#python #Jupyternotebook #线性回归模型 #最小二乘法 #sklearn #statsmodels #数据分析 #预测 #代码面试 #数学原理