1. 回归任务的基本概念
回归分析是机器学习中最基础也最重要的任务类型之一。简单来说,回归就是通过已知数据来预测连续数值输出的过程。与分类任务不同,回归的输出不是离散的类别标签,而是可以在一定范围内连续变化的数值。
举个例子,预测房价就是一个典型的回归问题。我们收集房屋的面积、房龄、地理位置等特征数据,然后训练模型预测出一个具体的房价数值。这个数值可能在几十万到几百万之间连续变化,而不是简单地分为"贵"或"便宜"两类。
回归任务在现实中有广泛应用:
- 金融领域:股票价格预测、风险评估
- 医疗领域:疾病风险评分、药物剂量预测
- 工业领域:产品质量预测、设备寿命估计
- 商业领域:销售额预测、客户价值评估
2. 简单线性回归的实现
2.1 数学原理
最简单的回归模型是线性回归,它假设输入特征和输出值之间存在线性关系。数学表达式为:
y = wX + b
其中:
- y是预测值
- X是输入特征
- w是权重(斜率)
- b是偏置(截距)
我们的目标就是找到最优的w和b,使得预测值y尽可能接近真实值。
2.2 Python实现示例
下面用Python代码演示如何实现一个简单的线性回归模型:
python复制import numpy as np
from sklearn.linear_model import LinearRegression
# 生成示例数据
X = np.array([[1], [2], [3], [4], [5]]) # 特征
y = np.array([2, 4, 6, 8, 10]) # 目标值
# 创建并训练模型
model = LinearRegression()
model.fit(X, y)
# 预测新数据
new_X = np.array([[6]])
prediction = model.predict(new_X)
print(f"预测结果: {prediction[0]}")
这段代码展示了:
- 如何准备数据(特征X和目标y)
- 如何创建和训练线性回归模型
- 如何使用训练好的模型进行预测
3. 模型评估指标
3.1 常用评估指标
评估回归模型的性能需要使用适当的指标,常用的有:
- 均方误差(MSE):预测值与真实值差的平方的平均值
- 均方根误差(RMSE):MSE的平方根,与目标值同单位
- 平均绝对误差(MAE):预测值与真实值绝对差的平均值
- R²分数:模型解释的方差比例,范围0-1,越接近1越好
3.2 代码实现评估
python复制from sklearn.metrics import mean_squared_error, r2_score
# 在训练集上预测
y_pred = model.predict(X)
# 计算评估指标
mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)
print(f"MSE: {mse:.2f}")
print(f"R²: {r2:.2f}")
4. 数据预处理技巧
4.1 特征缩放
对于回归任务,特征缩放非常重要,特别是当特征量纲差异大时。常用方法:
- 标准化:(X - 均值)/标准差
- 归一化:(X - min)/(max - min)
python复制from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
4.2 处理缺失值
现实数据常有缺失值,处理方法包括:
- 删除含缺失值的样本
- 用均值/中位数填充
- 使用预测模型估算
python复制from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy='mean')
X_imputed = imputer.fit_transform(X)
5. 多项式回归进阶
当数据关系不是简单线性时,可以使用多项式回归:
python复制from sklearn.preprocessing import PolynomialFeatures
# 生成多项式特征
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X)
# 使用线性回归拟合多项式特征
model.fit(X_poly, y)
多项式回归可以捕捉更复杂的关系,但要注意防止过拟合。
6. 正则化方法
为了防止过拟合,可以使用正则化技术:
- Lasso回归(L1正则化)
- Ridge回归(L2正则化)
- ElasticNet(L1+L2)
python复制from sklearn.linear_model import Lasso, Ridge
# Lasso回归
lasso = Lasso(alpha=0.1)
lasso.fit(X, y)
# Ridge回归
ridge = Ridge(alpha=0.1)
ridge.fit(X, y)
7. 实际应用中的注意事项
- 数据质量检查:始终先检查数据的分布、异常值和缺失情况
- 特征工程:好的特征比模型选择更重要
- 模型简单性:优先尝试简单模型,必要时再使用复杂模型
- 交叉验证:使用k折交叉验证评估模型泛化能力
- 可解释性:考虑业务需求,有时可解释性比精度更重要
8. 完整项目示例
下面是一个完整的简单回归项目流程:
python复制# 导入必要库
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
from sklearn.preprocessing import StandardScaler
# 1. 加载数据
data = pd.read_csv('housing.csv')
X = data[['area', 'bedrooms', 'age']]
y = data['price']
# 2. 数据预处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 3. 划分训练测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2)
# 4. 训练模型
model = LinearRegression()
model.fit(X_train, y_train)
# 5. 评估模型
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f"测试集MSE: {mse:.2f}")
# 6. 使用模型预测新数据
new_house = [[1200, 3, 5]] # 面积1200, 3卧室, 5年房龄
new_house_scaled = scaler.transform(new_house)
predicted_price = model.predict(new_house_scaled)
print(f"预测房价: ${predicted_price[0]:,.2f}")
这个示例展示了从数据加载到模型部署的完整流程,涵盖了回归任务的主要环节。
