机器学习中回归任务、分类任务常用的算法
回归任务:主要包括线性回归、决策树回归、支持向量回归、随机森林和梯度提升回归。适用于连续值预测问题,如房价预测、销售额预测等。特点:回归算法通常基于最小化误差,通过拟合一条最优曲线预测目标值。选择建议:数据量小时首选线性回归;数据量大且复杂时,随机森林和梯度提升是不错的选择。分类任务:包括逻辑回归、K近邻算法、支持向量机、决策树分类、随机森林分类、朴素贝叶斯分类。适用于离散值分类问题,如垃圾邮件识
一、回归任务
1. 线性回归 (Linear Regression)
-
概述:线性回归是一种统计方法,通过线性关系来预测目标值。假设输入特征与输出变量之间是线性关系,目的是找到一条最优的线性拟合线。
-
公式:线性回归拟合的目标是找到一条直线,使数据点与直线的距离(误差)平方和最小。假设有 ( n ) 个样本,每个样本有 ( m ) 个特征,模型形式为:
y=w1x1+w2x2+⋯+wmxm+b y = w_1 x_1 + w_2 x_2 + \dots + w_m x_m + b y=w1x1+w2x2+⋯+wmxm+b
其中,( yyy ) 是预测值,( wiw_iwi) 是各特征的回归系数,( bbb ) 是偏置项。 -
损失函数 (MSE):通过最小化均方误差(MSE)来优化模型参数:
J(w,b)=1n∑i=1n(yi−y^i)2 J(w, b) = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 J(w,b)=n1i=1∑n(yi−y^i)2
其中,( yiy_iyi ) 是实际值,( y^i\hat{y}_iy^i) 是预测值。 -
原理:通过最小化均方误差(MSE)找到最佳参数。 使用梯度下降或正规方程来求解。
-
应用场景:适用于数据之间存在线性关系的情况,如房价预测、销售预测等。
-
优缺点:
- 优点:简单易理解,计算效率高。
- 缺点:仅适用于线性数据,对异常值敏感。
-
代码示例:
from sklearn.linear_model import LinearRegression # 创建线性回归模型 model = LinearRegression() # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test)
2. 决策树回归 (Decision Tree Regression)
-
概述:决策树回归是一种使用树形结构来表示决策过程的回归模型。该模型通过不断划分数据集来生成树状结构,直至每个叶节点都包含相似的输出。
-
公式:决策树在每个分裂节点选择一个特征和分割点,将数据集划分成两个子集,以最小化分裂前后的方差或均方误差。例如,对于一个分裂节点,目标是找到分裂前后误差之和最小的划分方式。
-
损失函数:在决策树中使用方差作为损失函数:
MSE=1n∑i=1n(yi−yˉ)2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \bar{y})^2 MSE=n1i=1∑n(yi−yˉ)2
其中,( yiy_iyi ) 是样本真实值,( yˉ\bar{y}yˉ ) 是节点中样本的均值。 -
原理:决策树回归使用以下策略进行划分:
- 选择最优特征:使用均方差(MSE)或绝对误差(MAE)来选择最佳分割特征。
- 停止条件:树的深度达到预设值,或叶节点中的样本数少于预定值。
-
应用场景:适用于非线性关系的数据,且特征之间无明显交互的情况。
-
优缺点:
- 优点:易解释,能捕捉非线性关系。
- 缺点:容易过拟合,尤其是深度大的情况下。
-
代码示例:
from sklearn.tree import DecisionTreeRegressor # 创建决策树回归模型 model = DecisionTreeRegressor(max_depth=5) # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test)
3. 支持向量回归 (Support Vector Regression, SVR)
-
概述:支持向量回归使用支持向量机的方法解决回归问题,能够在特定的误差范围内忽略部分误差。
-
公式:SVR 的目标是找到一个决策平面,使得所有样本点距离平面的距离不超过一个给定的阈值(通常是 (ϵ\epsilonϵ))。 SVR 的预测模型为:
f(x)=∑i=1n(w⋅ϕ(xi)+b) f(x) = \sum_{i=1}^{n} (w \cdot \phi(x_i) + b) f(x)=i=1∑n(w⋅ϕ(xi)+b)
通过优化下列目标函数求解 ( w ) 和 ( b ):
minw,b12∥w∥2+C∑i=1nmax(0,∣yi−y^i∣−ϵ)=min12∣∣w∣∣2+C∑i=1nξi \min_{w, b} \frac{1}{2} \|w\|^2 + C \sum_{i=1}^{n} \max(0, |y_i - \hat{y}_i| - \epsilon)=\min \frac{1}{2} ||w||^2 + C \sum_{i=1}^{n} \xi_i w,bmin21∥w∥2+Ci=1∑nmax(0,∣yi−y^i∣−ϵ)=min21∣∣w∣∣2+Ci=1∑nξi
其中 ( CCC ) 是正则化参数,用于控制训练样本对模型的影响。(ϵ\epsilonϵ) 是容忍的误差范围。 (ξi\xi_iξi):松弛变量,表示某些数据点到超平面的距离 -
原理:
- 找到最优超平面:通过最大化数据点与超平面之间的间隔。
- 松弛变量:允许一些点落在超平面之外,增加模型的容错能力。
-
应用场景:适合高维数据,噪声敏感场景。
-
优缺点:
- 优点:对异常值较鲁棒,适合高维数据。
- 缺点:计算复杂度高,参数调优困难。
-
代码示例:
from sklearn.svm import SVR # 创建支持向量回归模型 model = SVR(kernel='rbf') # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test)
4. 随机森林回归 (Random Forest Regression)
-
概述:随机森林是一种集成学习算法,通过多个决策树的预测结果进行平均来提高准确性和稳定性。
-
公式:随机森林是多棵决策树的集合,每棵树独立预测,然后取平均值作为最终预测结果。对于每个输入数据点 ( xxx ),随机森林模型的预测值为:
y^=1T∑t=1Tht(x) \hat{y} = \frac{1}{T} \sum_{t=1}^{T} h_t(x) y^=T1t=1∑Tht(x)
其中 ( TTT ) 是决策树的数量,( ht(x)h_t(x)ht(x) ) 是第 ( ttt ) 棵树的预测值。 -
原理:随机森林的构建过程如下:
- 引导采样(Bagging):从原始数据集中有放回地随机抽取多个样本集。
- 训练多棵决策树:对每个样本集训练一棵决策树。
- 预测:通过对所有树的预测结果取平均来得到最终结果。
-
应用场景:适用于高维数据和复杂特征。
-
优缺点:
- 优点:抗过拟合能力强,能处理非线性关系。
- 缺点:计算资源消耗较高。
-
代码示例:
from sklearn.ensemble import RandomForestRegressor # 创建随机森林回归模型 model = RandomForestRegressor(n_estimators=100, max_depth=5) # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test)
5. 梯度提升回归 (Gradient Boosting Regression)
-
概述:梯度提升是一种集成学习方法,通过逐步构建多个弱学习器并不断优化误差。
-
公式:梯度提升回归逐步构建多个弱学习器(决策树),每个学习器拟合前一个模型的残差。目标函数为:
L(y,F(x))=∑i=1Nl(yi,F(xi)) L(y, F(x)) = \sum_{i=1}^{N} l(y_i, F(x_i)) L(y,F(x))=i=1∑Nl(yi,F(xi))
其中 (lll) 是损失函数,(FFF) 是模型的预测函数。每一轮的模型更新为:
Fm(x)=Fm−1(x)+γhm(x) F_{m}(x) = F_{m-1}(x) + \gamma h_m(x) Fm(x)=Fm−1(x)+γhm(x)
其中 (γ\gammaγ) 是学习率,(hm(x)h_m(x)hm(x)) 是新基础学习器的输出。 -
原理:梯度提升的过程如下:
- 初始化模型:用简单的常数值来初始化模型。
- 迭代训练:在每次迭代中,计算当前模型的残差,使用这些残差来训练新的基础学习器(通常是决策树)。
- 更新模型:将新学习器的预测结果添加到当前模型中。
-
应用场景:适合数据量大且复杂度高的情况,如金融预测。
-
优缺点:
- 优点:精度高,能够处理复杂特征。
- 缺点:计算时间长,易过拟合。
-
代码示例:
from sklearn.ensemble import GradientBoostingRegressor # 创建梯度提升回归模型 model = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=5) # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test)
二、分类任务
1. 逻辑回归 (Logistic Regression)
-
概述:逻辑回归是一种分类算法,通过 sigmoid 函数将输出限制在 [0,1] 范围内。
-
公式:逻辑回归用于估计样本属于某一类别的概率,模型输出是一个概率值。对于输入 ( xxx ),逻辑回归的输出是:
P(y=1∣x)=11+e−(w⋅x+b) P(y=1|x) = \frac{1}{1 + e^{-(w \cdot x + b)}} P(y=1∣x)=1+e−(w⋅x+b)1
其中,( www ) 是回归系数,( bbb ) 是偏置项。 -
损失函数:逻辑回归的损失函数是交叉熵损失(对数损失):
J(w,b)=−1n∑i=1n[yilog(y^i)+(1−yi)log(1−y^i)] J(w, b) = -\frac{1}{n} \sum_{i=1}^{n} \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right] J(w,b)=−n1i=1∑n[yilog(y^i)+(1−yi)log(1−y^i)]
其中,( y^i\hat{y}_iy^i ) 是预测概率,( yiy_iyi ) 是实际标签。 -
原理:
- 通过最大似然估计(MLE)来估计参数(β\betaβ),最大化目标函数:
L(β)=∏i=1Np(yi∣xi;β) L(\beta) = \prod_{i=1}^{N} p(y_i | x_i; \beta) L(β)=i=1∏Np(yi∣xi;β) - 损失函数为对数损失(Log Loss):
L=−1N∑i=1N[yilog(p)+(1−yi)log(1−p)] L = -\frac{1}{N} \sum_{i=1}^{N} [y_i \log(p) + (1 - y_i) \log(1 - p)] L=−N1i=1∑N[yilog(p)+(1−yi)log(1−p)]
- 通过最大似然估计(MLE)来估计参数(β\betaβ),最大化目标函数:
-
应用场景:适合二分类问题,如垃圾邮件检测、信用评分等。
-
优缺点:
- 优点:简单高效,适合二分类。
- 缺点:难以处理非线性数据,特征工程依赖强。
-
代码示例:
from sklearn.linear_model import LogisticRegression # 创建逻辑回归模型 model = LogisticRegression() # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test)
2. K 近邻算法 (K-Nearest Neighbors, KNN)
- 概述:K近邻算法是一种基于实例的学习方法,用于分类和回归任务。它的基本思想是对于一个待分类的样本,计算训练集中所有样本与该样本的距离,选择距离最近的 ( KKK ) 个样本,根据这 ( KKK ) 个样本的标签进行投票或加权平均,从而决定待分类样本的类别或数值。
- 公式:KNN算法通常使用欧几里得距离来衡量样本之间的相似度,计算公式为:
d(x,y)=∑i=1n(xi−yi)2 d(x, y) = \sqrt{\sum_{i=1}^{n} (x_i - y_i)^2} d(x,y)=i=1∑n(xi−yi)2
其中 ( xxx ) 和 ( yyy ) 是两个样本,( nnn ) 是特征的维度。
KNN 回归:在回归任务中,KNN 的预测规则如下:
- 同样计算待预测样本 ( xxx) 与训练集中所有样本的距离。
- 选取距离最近的 ( KKK ) 个样本 ( {x1,x2,…,xK}\{x_1, x_2, \ldots, x_K\}{x1,x2,…,xK} )。
- 将这 ( KKK ) 个样本的目标值进行平均,得到预测值:
y^=1K∑i=1Kyi \hat{y} = \frac{1}{K} \sum_{i=1}^{K} y_i y^=K1i=1∑Kyi
其中 ( yiy_iyi ) 是第 ( iii ) 个最近邻的目标值。
KNN 分类:在分类任务中,KNN 的分类规则如下:
- 计算待分类样本 ( xxx ) 与训练集中所有样本的距离。
- 选取距离最近的 ( KKK ) 个样本,记为 ( {x1,x2,…,xK}\{x_1, x_2, \ldots, x_K\}{x1,x2,…,xK} )。
- 统计这 ( KKK ) 个样本中每个类别的数量,选择数量最多的类别作为 ( xxx ) 的预测类别:
y^=mode{y1,y2,…,yK} \hat{y} = \text{mode} \{y_1, y_2, \ldots, y_K\} y^=mode{y1,y2,…,yK}
其中 ( yiy_iyi ) 是第 ( iii ) 个最近邻的真实类别。- K值的选择:KKK值的选择对模型的性能至关重要。较小的KKK值可能会导致过拟合,而较大的KKK值可能会导致欠拟合。一般使用交叉验证法选择最优KKK值。
-
原理:
- 距离度量:常用的距离度量包括欧氏距离、曼哈顿距离等。
- K值选择:选择K个最近邻居的数量,K值过小会导致噪声影响,过大会导致决策边界模糊。
-
应用场景:适合小数据集、非线性分布的数据。广泛用于推荐系统、图像分类等。
-
优缺点:
- 优点:简单、无需训练过程,适用于少量数据。
- 缺点:对噪声敏感,计算复杂度较高,需选择合适的 ( KKK ) 值。
-
代码示例:
from sklearn.neighbors import KNeighborsClassifier # 创建 KNN 分类器,设定 K=5 model = KNeighborsClassifier(n_neighbors=5) # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test)
3. 支持向量机 (Support Vector Machine, SVM)
-
概述:SVM 是一种二分类模型,通过构造最优超平面来最大化不同类别之间的间隔。适用于高维数据集。
-
公式:最大化间隔的目标为:
min12∣∣w∣∣2 \min \frac{1}{2} ||w||^2 min21∣∣w∣∣2
同时满足约束条件:
yi(w⋅xi+b)≥1,∀i y_i (w \cdot x_i + b) \geq 1, \quad \forall i yi(w⋅xi+b)≥1,∀i -
(www):超平面的法向量
-
(bbb):偏置项
-
原理:
- 最大间隔超平面:通过拉格朗日乘数法求解优化问题,构造间隔最大化的分隔超平面。
- 软间隔:对于非线性可分的情况,SVM引入松弛变量,允许部分样本点在间隔内。
-
应用场景:适用于文本分类、图像识别、医药诊断等高维数据集。
-
优缺点:
- 优点:精度高,适用于高维数据,能处理非线性数据。
- 缺点:训练速度慢,内存占用大,参数调优复杂。
-
代码示例:
from sklearn.svm import SVC # 创建 SVM 分类器,使用 RBF 核 model = SVC(kernel='rbf') # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test)
4. 决策树分类 (Decision Tree Classification)
-
概述:决策树分类器通过树形结构将数据分割成不同类别。通过判断特征的条件将数据分配到叶节点的类别中。
-
公式:决策树根据每个特征的条件将数据分割成不同类别。通过信息增益或基尼系数选择最优特征分裂。以信息增益为例:
信息增益=H(D)−∑v=1V∣Dv∣∣D∣H(Dv) \text{信息增益} = H(D) - \sum_{v=1}^{V} \frac{|D_v|}{|D|} H(D_v) 信息增益=H(D)−v=1∑V∣D∣∣Dv∣H(Dv)
其中 ( H(D)H(D)H(D) ) 为数据集 ( DDD ) 的熵,( DvD_vDv ) 为按特征 ( AAA ) 分割的数据集。 -
基尼系数:
Gini(D)=1−∑k=1Kpk2 \text{Gini}(D) = 1 - \sum_{k=1}^{K} p_k^2 Gini(D)=1−k=1∑Kpk2
其中,( pkp_kpk ) 表示数据集中属于类别 ( kkk ) 的概率。 -
原理:递归地选择最优特征进行分裂,生成树结构,直到满足停止条件。
- 特征选择:通过信息增益、信息增益率或基尼指数来选择最佳特征进行分割。
- 停止条件:达到预定的树深度,或叶节点中的样本数小于预定值。
-
应用场景:适合对数据解释性要求高的场景,如信用评分、风险分析等。
-
优缺点:
- 优点:易于理解,处理非线性数据。
- 缺点:容易过拟合,受噪声影响大。
-
代码示例:
from sklearn.tree import DecisionTreeClassifier # 创建决策树分类器,设定最大深度为5 model = DecisionTreeClassifier(max_depth=5) # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test)
5. 随机森林分类 (Random Forest Classification)
-
概述:随机森林是一种基于集成学习的算法,利用多棵决策树对数据进行分类。其结果是所有决策树的投票结果。
-
公式:随机森林是多棵决策树的集合,每棵树独立预测,然后取众数作为最终分类结果。对于输入数据点 ( xxx ),随机森林模型的预测为:
y^=mode{ht(x)}t=1T \hat{y} = \text{mode} \{ h_t(x) \}_{t=1}^{T} y^=mode{ht(x)}t=1T
其中 ( TTT ) 是决策树的数量,( ht(x)h_t(x)ht(x) ) 是第 ( ttt ) 棵树的预测类别。 -
原理:通过随机抽样的方式训练多棵决策树,对结果进行平均或投票。
- 引导采样(Bagging):从原始数据集中随机抽取多个样本集来训练多棵树。
- 特征随机选择:在每棵树的分割过程中,仅考虑随机选择的特征。
-
应用场景:适合处理高维度的数据,适用于人脸识别、文本分类等任务。
-
优缺点:
- 优点:抗过拟合能力强,适合高维数据。
- 缺点:训练和预测时间较长,模型复杂度高。
-
代码示例:
from sklearn.ensemble import RandomForestClassifier # 创建随机森林分类器,设定100棵树 model = RandomForestClassifier(n_estimators=100, max_depth=5) # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test)
6. 朴素贝叶斯分类 (Naive Bayes Classification)
-
概述:朴素贝叶斯是一种基于贝叶斯定理的分类方法,假设特征之间是独立的。广泛用于文本分类问题。
-
公式:朴素贝叶斯基于贝叶斯定理,通过计算后验概率进行分类。对于特征 ( x1,x2,…,xnx_1, x_2, \dots, x_nx1,x2,…,xn ) 和类别 ( CCC ),后验概率 ( P(C∣x1,x2,…,xnP(C|x_1, x_2, \dots, x_nP(C∣x1,x2,…,xn) ) 为:
P(C∣x1,x2,…,xn)=P(C)⋅∏i=1nP(xi∣C)P(x1,x2,…,xn) P(C|x_1, x_2, \dots, x_n) = \frac{P(C) \cdot \prod_{i=1}^{n} P(x_i|C)}{P(x_1, x_2, \dots, x_n)} P(C∣x1,x2,…,xn)=P(x1,x2,…,xn)P(C)⋅∏i=1nP(xi∣C)
其中 ( P(C)P(C)P(C) ) 是类别的先验概率,( P(xi∣C)P(x_i|C)P(xi∣C) ) 是在类别 ( CCC ) 下观测到特征 ( xix_ixi ) 的概率。 -
原理:根据贝叶斯定理,计算每个类别的条件概率,选择后验概率最大的类别。
- 通过贝叶斯定理计算给定特征条件下每个类别的后验概率:
P(y∣X)=P(X∣y)P(y)P(X) P(y | X) = \frac{P(X | y) P(y)}{P(X)} P(y∣X)=P(X)P(X∣y)P(y)
其中 (P(X∣yP(X | yP(X∣y)) 是给定类别的条件概率,(P(y)P(y)P(y)) 是先验概率
- 通过贝叶斯定理计算给定特征条件下每个类别的后验概率:
-
应用场景:适用于文本分类、情感分析等任务。
-
优缺点:
- 优点:速度快,效率高,适合多分类任务。
- 缺点:特征独立假设较强,不适用于特征相关性强的情况。
-
代码示例:
from sklearn.naive_bayes import GaussianNB # 创建朴素贝叶斯分类器 model = GaussianNB() # 训练模型 model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test)
总结
-
回归任务:主要包括线性回归、决策树回归、支持向量回归、随机森林和梯度提升回归。适用于
连续值预测问题
,如房价预测、销售额预测等。- 特点:回归算法通常基于最小化误差,通过拟合一条最优曲线预测目标值。
- 选择建议:数据量小时首选线性回归;数据量大且复杂时,随机森林和梯度提升是不错的选择。
-
分类任务:包括逻辑回归、K近邻算法、支持向量机、决策树分类、随机森林分类、朴素贝叶斯分类。适用于
离散值分类问题
,如垃圾邮件识别、图像分类等。- 特点:分类算法通常通过最大化边界或使用集成方法来提高分类准确率。
- 选择建议:数据量较小且线性分布时可用逻

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)