Go...
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 值可能导致结果差异大;计算量大,尤其在样本数量多和维度高时;对数据分布不均匀敏感
推荐系统中,根据用户历史行为为目标用户推荐商品;基于用户地理位置信息进行周边服务推荐