Go...

当前位置: 首页>>世界杯冠军魔咒

十大常用回归算法总结

本次总结机器学习中的10大常用回归算法!

一、线性回归

线性回归是回归分析中最基础且应用广泛的模型。它假设因变量(目标变量)和自变量(特征变量)之间存在线性关系,这种关系可以用一个线性方程来表示。线性回归的目标是找到一组最优的回归系数,使得预测值与真实值之间的误差最小。通常使用最小二乘法来实现这一目标,即通过最小化SSE来确定回归系数。

from sklearn.linear_model import LinearRegression

from sklearn.datasets import make_regression

from sklearn.model_selection import train_test_split

# 生成示例数据,这里生成100个样本,每个样本有1个特征,噪声水平为0.1X, y = make_regression(n_samples=100, n_features=1, noise=0.1)

# 将数据分为训练集和测试集,测试集占比20%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)

二、岭回归(Ridge Regression)

岭回归是线性回归的一种改进形式,主要用于处理多重共线性问题。当自变量之间存在高度相关性(多重共线性)时,普通线性回归的系数估计会变得不稳定,方差很大,导致模型的泛化能力下降。岭回归通过在损失函数中添加 L2 正则化项来解决这个问题。L2 正则化项会对回归系数进行约束,使得系数的平方和受到惩罚。

from sklearn.linear_model import Ridge

# 创建岭回归模型,设置正则化参数alpha为1.0

model = Ridge(alpha=1.0)

model.fit(X_train, y_train)y_pred =

model.predict(X_test)

三、 Lasso 回归(Lasso Regression)

Lasso 回归与岭回归类似,也是为了解决多重共线性问题并进行特征选择。不同之处在于,Lasso 回归使用的是 L1 正则化项,L1 正则化的特性使得部分回归系数能够被压缩为 0,从而实现自动特征选择。这意味着 Lasso 回归可以在训练过程中识别出对目标变量不重要的特征,并将其系数设为 0,简化模型的同时减少过拟合的风险。

from sklearn.linear_model import Lasso

# 创建Lasso回归模型,设置正则化参数alpha为0.1

model = Lasso(alpha=0.1)

model.fit(X_train, y_train)

y_pred = model.predict(X_test)

四、弹性网络回归(Elastic Net Regression)

弹性网络回归结合了 L1 和 L2 正则化的优点,它的目标函数为最小化:

其中λ1和λ2分别控制L1和L2正则化的强度,可以通过一个超参数来优化两者的比例,如下:

弹性网络回归既能够像 Lasso 回归一样进行特征选择,又能像岭回归一样处理多重共线性问题,在一些复杂的数据场景中表现更为出色。

from sklearn.linear_model import ElasticNet

# 创建弹性网络回归模型,设置正则化参数alpha为0.1,l1_ratio为0.5

model = ElasticNet(alpha=0.1, l1_ratio=0.5)

model.fit(X_train, y_train)

y_pred = model.predict(X_test)

五、多项式回归(Polynomial Regression)

多项式回归是对线性回归的一种拓展,用于处理自变量与因变量之间的非线性关系。它通过在模型中添加自变量的多项式项,将线性回归模型扩展为能够拟合曲线的形式。通过增加多项式的次数,可以拟合复杂的曲线。但需要注意的是,多项式次数过高可能导致过拟合。

from sklearn.preprocessing import PolynomialFeatures‘’

from sklearn.pipeline import make_pipeline

# 创建多项式回归模型,设置多项式次数为2

degree = 2

model = make_pipeline(PolynomialFeatures(degree), LinearRegression())

model.fit(X_train, y_train)

y_pred = model.predict(X_test)

六、决策树回归(Decision Tree Regression)

决策树回归是一种基于树结构的非参数回归模型。它通过对特征空间进行递归划分,将数据分为不同的区域,每个区域对应一个预测值。决策树的构建过程是一个贪心算法,每次选择能够最大程度降低预测误差的特征和分割点进行分裂。

决策树可以处理非线性关系,并且不需要对数据进行特征缩放。但决策树容易过拟合,尤其是在数据量较小或树的深度过大时。

from sklearn.tree import DecisionTreeRegressor

# 创建决策树回归模型,设置最大深度为3

model = DecisionTreeRegressor(max_depth=3)

model.fit(X_train, y_train)

y_pred = model.predict(X_test)

七、随机森林回归(Random Forest Regression)

随机森林回归是基于决策树的集成学习模型。它通过构建多个决策树,并对这些决策树的预测结果进行平均来得到最终的预测值。随机森林在构建每棵决策树时,会从原始数据集中有放回地随机抽取样本(bootstrap 抽样),同时在选择分裂特征时,也会随机选择一部分特征进行考虑。

这种随机化的操作使得每棵决策树之间具有一定的独立性,从而减少了过拟合的风险,提高了模型的稳定性和泛化能力。

from sklearn.ensemble import RandomForestRegressor

# 创建随机森林回归模型,设置树的数量为100,最大深度为3

model = RandomForestRegressor(n_estimators=100, max_depth=3)

model.fit(X_train, y_train)

y_pred = model.predict(X_test)

八、梯度提升回归(Gradient Boosting Regression)

梯度提升回归也是一种基于决策树的集成学习方法。它通过迭代地训练弱学习器(通常是决策树),每一轮训练都尝试拟合前一轮模型的残差,即预测值与真实值之间的误差。通过不断累加这些弱学习器的预测结果,逐步提高模型的性能。

梯度提升回归利用了梯度下降的思想,通过最小化损失函数的梯度来确定下一个弱学习器的参数。与随机森林不同,梯度提升回归是顺序构建弱学习器,每一个新的弱学习器都依赖于前面已训练好的模型。

from sklearn.ensemble import GradientBoostingRegressor

# 创建梯度提升回归模型,设置树的数量为100,学习率为0.1,最大深度为3

model = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3)

model.fit(X_train, y_train)

y_pred = model.predict(X_test)

九、支持向量回归(Support Vector Regression, SVR)

支持向量回归是支持向量机在回归问题上的应用。与支持向量机分类类似,SVR 的目标是找到一个最优的超平面,使得预测值与真实值之间的误差在一定的容忍范围内(不敏感损失函数),并且尽可能使超平面到数据点的间隔最大。

SVR 可以处理线性和非线性回归问题,对于非线性问题,通过核函数将数据映射到高维空间,在高维空间中寻找最优超平面。常见的核函数有线性核、多项式核、径向基核(RBF)等。

from sklearn.svm import SVR

# 创建支持向量回归模型,使用径向基核函数,设置惩罚参数C为1.0,容忍误差epsilon为0.1

model = SVR(kernel='rbf', C=1.0, epsilon=0.1)

model.fit(X_train, y_train)

y_pred = model.predict(X_test)

十、K 近邻回归(KNN Regression)

K 近邻回归是一种基于实例的学习算法,属于非参数模型。对于一个待预测的数据点,KNN 回归会在训练数据集中找到与其距离最近的 K 个邻居,然后根据这 K 个邻居的目标值来预测该数据点的目标值。通常使用欧氏距离或曼哈顿距离来衡量数据点之间的距离。

预测值的计算方式有多种,常见的是简单平均法,即取 K 个邻居目标值的平均值作为预测值;也可以使用加权平均法,距离越近的邻居权重越大。

from sklearn.neighbors import KNeighborsRegressor

# 创建K近邻回归模型,设置邻居数量为5

model = KNeighborsRegressor(n_neighbors=5)

model.fit(X_train, y_train)

y_pred = model.predict(X_test)

表 十大回归模型对比

回归模型

优点

缺点

使用场景

线性回归

简单直观,易于理解和解释;计算效率高,能快速训练和预测;在数据呈线性关系时表现良好

对数据的线性假设要求严格,若数据存在非线性关系,模型拟合效果差;对异常值敏感,异常值可能严重影响回归系数;无法处理自变量间的多重共线性

数据呈现明显线性关系,如预测房屋价格与面积、身高与体重关系;自变量间无多重共线性,且数据无明显非线性趋势

岭回归

有效处理多重共线性问题,通过 L2 正则化提高模型稳定性和泛化能力

引入正则化参数 α,需调参;相比普通线性回归,解释性稍弱

分析多个经济指标对股票价格影响,指标间存在共线性;处理存在多重共线性的金融数据、生物数据建模

Lasso 回归

可进行特征选择,自动将不重要特征系数压缩为 0,简化模型;处理多重共线性问题,减少过拟合风险

对超参数 α 敏感,调参难度较大;不适用于特征间相关性极高的情况

基因数据分析中筛选与疾病相关的关键基因特征;文本分类中特征选择,降低维度

弹性网络回归

兼具 L1 和 L2 正则化优点,既能特征选择又能处理多重共线性;在复杂数据场景表现出色

需同时调整 α 和 l1_ratio 两个超参数,调参复杂

图像识别特征回归任务,处理丰富且复杂相关的图像特征;综合考虑特征选择和共线性处理的场景

多项式回归

可拟合自变量与因变量间的非线性关系,拓展了线性回归应用范围

多项式次数难以确定,次数过高易过拟合;计算复杂度随多项式次数增加而上升

描述产品销售量随时间的非线性变化;拟合物理实验中变量间的曲线关系

决策树回归

能处理非线性关系,无需数据特征缩放;可生成易于理解的决策规则,解释性强

容易过拟合,尤其在数据量小或树深度过大时;对数据微小变化敏感,稳定性差

预测客户购买行为与客户属性关系;分析学生成绩与学习习惯、家庭环境等因素关系

随机森林回归

基于决策树集成,有效降低过拟合风险,提高模型稳定性和泛化能力;能处理高维数据和复杂数据集,无需特征工程;可并行训练,计算效率高

模型复杂度高,训练时间长;对内存要求较高;难以解释单个预测结果

预测天气数据与农作物产量关系,处理大量气象和环境因素数据;电商平台商品销量预测,处理复杂用户行为和商品特征数据

梯度提升回归

在许多实际应用和竞赛中表现优异,能有效提升模型性能;可灵活处理不同类型数据,对复杂非线性关系建模能力强

顺序训练模型,计算成本高;对超参数敏感,调参复杂;容易过拟合

金融风险评估,根据客户数据和市场信息预测风险水平;医疗诊断预测,基于多种医疗指标预测疾病可能性

支持向量回归

在小样本、非线性和高维数据处理上表现出色;通过核函数可灵活处理不同类型数据

对核函数和参数选择敏感,调参困难;计算复杂度高,训练时间长;模型解释性较差

生物医学领域,分析少量样本疾病指标与病情严重程度关系;小样本图像识别任务,处理图像特征与分类关系

K 近邻回归

简单直观,易于实现;无需模型训练,预测时计算开销小;能捕捉数据局部模式

对 K 值选择敏感,不同 K 值可能导致结果差异大;计算量大,尤其在样本数量多和维度高时;对数据分布不均匀敏感

推荐系统中,根据用户历史行为为目标用户推荐商品;基于用户地理位置信息进行周边服务推荐