Scikit-learn 中文教程

第二部分:Scikit-learn 核心基础
第 3 章 Scikit-learn 核心设计与 API 体系
第 4 章 数据集模块与数据划分
第三部分:数据预处理与特征工程
第 5 章 数据预处理核心模块(sklearn.preprocessing)
第 6 章 特征工程:提取、选择与构建
第四部分:模型评估与验证
第 7 章 模型评估指标(按任务类型划分)
第 8 章 模型验证与超参数调优
第五部分:Scikit-learn 核心算法模块
第 9 章 有监督学习:分类算法
第 10 章 有监督学习:回归算法
第 11 章 无监督学习:聚类与密度算法
第 12 章 半监督学习与其他常用算法
第八部分:性能优化与问题解决
第 18 章 Scikit-learn 性能优化
第 19 章 Scikit-learn 常见问题与解决方案

10.4 回归算法实战与选型

Scikit-learn回归算法全面教程:实战选型、评估指标与常见问题解决

Scikit-learn 中文教程

本教程作为Scikit-learn回归算法的实战指南,涵盖算法选型、评估指标(如RMSE、R²、MAPE)的选择、线性与非线性回归适用场景对比,以及异方差和多重共线性等常见问题的解决方案,适合新手学习。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

Scikit-learn回归算法实战教程:从选型到问题解决

欢迎来到Scikit-learn回归算法学习教程!回归任务是机器学习中的核心问题,用于预测连续数值输出。本教程将引导你从实战入手,逐步掌握回归算法的选型、评估、场景分析和常见问题处理,内容专为新手设计,力求简单易懂。

1. 回归算法实战与选型

回归算法用于拟合数据并做出预测。Scikit-learn提供了多种回归算法,选择合适的方法取决于数据特性和问题需求。

常见回归算法

  • 线性回归:简单线性关系模型,公式为 y = ax + b,适合快速预测线性关系。
  • 岭回归(Ridge Regression):在线性回归基础上加入L2正则化,防止过拟合。
  • Lasso回归:加入L1正则化,可进行特征选择,适合稀疏数据。
  • 决策树回归:基于树结构,可处理非线性关系,但容易过拟合。
  • 随机森林回归:多个决策树的集成,提高精度和鲁棒性。
  • 支持向量回归(SVR):基于支持向量机,适合高维和小样本数据。

如何选型

选型时,考虑以下因素:

  • 数据规模:大数据集可选随机森林,小数据集可选线性回归。
  • 关系复杂度:线性关系用线性回归,非线性用SVR或树模型。
  • 可解释性:线性回归和岭回归解释性强,神经网络则较差。
  • 计算资源:简单算法如线性回归计算快,复杂模型如神经网络更耗时。

代码示例:使用Scikit-learn进行线性回归选型

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_regression

# 生成模拟数据
X, y = make_regression(n_samples=100, n_features=1, noise=10)
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)

# 预测和评估
predictions = model.predict(X_test)
print("模型系数:", model.coef_)

2. 回归任务的评估指标选择

评估模型性能至关重要,常用指标包括RMSE、R²和MAPE。

RMSE(均方根误差)

  • 定义:预测误差平方的均值的平方根,公式为 RMSE = √(mean((y_true - y_pred)^2))。
  • 特点:对误差的平方项敏感,惩罚大误差更重,适合看重误差大小的场景。
  • 使用场景:适用于回归任务,如房价预测,误差单位与目标变量一致。

R²(决定系数)

  • 定义:解释模型能解释的方差比例,范围0到1,1表示完美拟合,公式为 R² = 1 - (SS_res / SS_tot)。
  • 特点:无量纲,用于比较不同模型,但可能误导于过拟合。
  • 使用场景:通用评估,如比较线性回归和随机森林的性能。

MAPE(平均绝对百分比误差)

  • 定义:绝对误差与实际值比值的平均,公式为 MAPE = mean(|(y_true - y_pred) / y_true|) * 100%。
  • 特点:以百分比表示,直观易懂,但分母为零时会出错。
  • 使用场景:当目标变量有比例意义时,如销售增长率预测。

代码示例:使用Scikit-learn计算评估指标

from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_percentage_error

# 假设已有预测值和真实值
rmse = mean_squared_error(y_test, predictions, squared=False)  # RMSE
r2 = r2_score(y_test, predictions)  # R²
mape = mean_absolute_percentage_error(y_test, predictions)  # MAPE
print(f"RMSE: {rmse:.2f}, R²: {r2:.2f}, MAPE: {mape:.2%}")

选择指标时,建议:

  • 如果目标变量范围固定,用RMSE。
  • 需要模型解释性时,用R²。
  • 涉及比例预测时,用MAPE。

3. 线性 vs 非线性回归算法的适用场景

线性回归算法

  • 特点:假设输入和输出之间存在线性关系,模型简单、计算快速、可解释性强。
  • 适用场景
    • 数据关系近似线性,如身高与体重的预测。
    • 需要快速原型开发或解释模型系数时。
    • 数据量小或特征少,避免过拟合。

非线性回归算法

  • 特点:能拟合复杂非线性关系,如多项式回归、SVR、神经网络。
  • 适用场景
    • 数据关系复杂,如股票价格或天气模式预测。
    • 高维数据或多特征交互时,如图像识别。
    • 当线性模型表现不佳,需提高精度时。

对比总结:

  • 线性回归适合简单、可解释的任务;非线性回归适合复杂、精度要求高的任务。
  • 选型时,先尝试线性回归基准,再用交叉验证比较非线性模型。

4. 回归任务的常见问题与解决

回归建模中,异方差和多重共线性是常见陷阱,了解并解决它们至关重要。

异方差(Heteroscedasticity)

  • 问题:误差项的方差随输入变量变化而不恒定,导致模型不稳定和置信区间不准确。
  • 识别方法:绘制残差图(residuals vs fitted values),观察方差是否均匀分布。
  • 解决方法
    • 变换变量:对目标变量或特征进行对数或平方根变换。
    • 加权最小二乘法(WLS):在Scikit-learn中,可使用LinearRegression并设置权重。
    • 使用鲁棒回归算法:如岭回归或随机森林,对异常值不敏感。

多重共线性(Multicollinearity)

  • 问题:预测变量之间高度相关,导致系数估计不稳定、标准误差增大。
  • 识别方法:计算特征间的相关系数矩阵或方差膨胀因子(VIF),VIF > 10通常表示问题。
  • 解决方法
    • 正则化:使用岭回归或Lasso回归,通过添加惩罚项减少系数大小。
    • 主成分分析(PCA):降维处理,提取不相关特征。
    • 增加数据:收集更多样本减少相关性影响。
    • 手动删除特征:基于业务知识移除冗余变量。

代码示例:使用Scikit-learn处理多重共线性

from sklearn.linear_model import Ridge
from sklearn.preprocessing import StandardScaler

# 假设X有共线性问题
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 使用岭回归
ridge_model = Ridge(alpha=1.0)  # alpha是正则化强度
ridge_model.fit(X_scaled, y)
print("处理后的模型系数:", ridge_model.coef_)

总结:回归任务中,选对算法、用对评估指标、识别并解决问题是成功关键。Scikit-learn提供了丰富工具,新手应多实践,逐步提升技能。继续学习下一章节,深入更多高级主题!

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包