Bootstrap

机器学习中回归任务、分类任务常用的算法

一、回归任务

1. 线性回归 (Linear Regression)

  • 概述:线性回归是一种统计方法,通过线性关系来预测目标值。假设输入特征与输出变量之间是线性关系,目的是找到一条最优的线性拟合线。

  • 公式:线性回归拟合的目标是找到一条直线,使数据点与直线的距离(误差)平方和最小。假设有 ( n ) 个样本,每个样本有 ( m ) 个特征,模型形式为:
    y = w 1 x 1 + w 2 x 2 + ⋯ + w m x m + b y = w_1 x_1 + w_2 x_2 + \dots + w_m x_m + b y=w1x1+w2x2++wmxm+b
    其中,( y y y ) 是预测值,( w i w_i wi) 是各特征的回归系数,( b b b ) 是偏置项。

  • 损失函数 (MSE):通过最小化均方误差(MSE)来优化模型参数:
    J ( w , b ) = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 J(w, b) = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 J(w,b)=n1i=1n(yiy^i)2
    其中,( y i y_i yi ) 是实际值,( y ^ i \hat{y}_i y^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 = 1 n ∑ i = 1 n ( y i − y ˉ ) 2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \bar{y})^2 MSE=n1i=1n(yiyˉ)2
    其中,( y i y_i yi ) 是样本真实值,( 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 = 1 n ( w ⋅ ϕ ( x i ) + b ) f(x) = \sum_{i=1}^{n} (w \cdot \phi(x_i) + b) f(x)=i=1n(wϕ(xi)+b)
    通过优化下列目标函数求解 ( w ) 和 ( b ):
    min ⁡ w , b 1 2 ∥ w ∥ 2 + C ∑ i = 1 n max ⁡ ( 0 , ∣ y i − y ^ i ∣ − ϵ ) = min ⁡ 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 n ξ 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,bmin21w2+Ci=1nmax(0,yiy^iϵ)=min21∣∣w2+Ci=1nξi
    其中 ( C C C ) 是正则化参数,用于控制训练样本对模型的影响。( ϵ \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)

  • 概述:随机森林是一种集成学习算法,通过多个决策树的预测结果进行平均来提高准确性和稳定性。

  • 公式:随机森林是多棵决策树的集合,每棵树独立预测,然后取平均值作为最终预测结果。对于每个输入数据点 ( x x x ),随机森林模型的预测值为:
    y ^ = 1 T ∑ t = 1 T h t ( x ) \hat{y} = \frac{1}{T} \sum_{t=1}^{T} h_t(x) y^=T1t=1Tht(x)
    其中 ( T T T ) 是决策树的数量,( h t ( x ) h_t(x) ht(x) ) 是第 ( t t t ) 棵树的预测值。

  • 原理:随机森林的构建过程如下:

    • 引导采样(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 = 1 N l ( y i , F ( x i ) ) L(y, F(x)) = \sum_{i=1}^{N} l(y_i, F(x_i)) L(y,F(x))=i=1Nl(yi,F(xi))
    其中 ( l l l) 是损失函数,( F F F) 是模型的预测函数。每一轮的模型更新为:
    F m ( x ) = F m − 1 ( x ) + γ h m ( x ) F_{m}(x) = F_{m-1}(x) + \gamma h_m(x) Fm(x)=Fm1(x)+γhm(x)
    其中 ( γ \gamma γ) 是学习率,( h m ( 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] 范围内。

  • 公式:逻辑回归用于估计样本属于某一类别的概率,模型输出是一个概率值。对于输入 ( x x x ),逻辑回归的输出是:
    P ( y = 1 ∣ x ) = 1 1 + e − ( w ⋅ x + b ) P(y=1|x) = \frac{1}{1 + e^{-(w \cdot x + b)}} P(y=1∣x)=1+e(wx+b)1
    其中,( w w w ) 是回归系数,( b b b ) 是偏置项。

  • 损失函数:逻辑回归的损失函数是交叉熵损失(对数损失):
    J ( w , b ) = − 1 n ∑ i = 1 n [ y i log ⁡ ( y ^ i ) + ( 1 − y i ) 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=1n[yilog(y^i)+(1yi)log(1y^i)]
    其中,( y ^ i \hat{y}_i y^i ) 是预测概率,( y i y_i yi ) 是实际标签。

  • 原理

    • 通过最大似然估计(MLE)来估计参数( β \beta β),最大化目标函数:
      L ( β ) = ∏ i = 1 N p ( y i ∣ x i ; β ) L(\beta) = \prod_{i=1}^{N} p(y_i | x_i; \beta) L(β)=i=1Np(yixi;β)
    • 损失函数为对数损失(Log Loss):
      L = − 1 N ∑ i = 1 N [ y i log ⁡ ( p ) + ( 1 − y i ) log ⁡ ( 1 − p ) ] L = -\frac{1}{N} \sum_{i=1}^{N} [y_i \log(p) + (1 - y_i) \log(1 - p)] L=N1i=1N[yilog(p)+(1yi)log(1p)]
  • 应用场景:适合二分类问题,如垃圾邮件检测、信用评分等。

  • 优缺点

    • 优点:简单高效,适合二分类。
    • 缺点:难以处理非线性数据,特征工程依赖强。
  • 代码示例

    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近邻算法是一种基于实例的学习方法,用于分类和回归任务。它的基本思想是对于一个待分类的样本,计算训练集中所有样本与该样本的距离,选择距离最近的 ( K K K ) 个样本,根据这 ( K K K ) 个样本的标签进行投票或加权平均,从而决定待分类样本的类别或数值。
  • 公式:KNN算法通常使用欧几里得距离来衡量样本之间的相似度,计算公式为:
    d ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 d(x, y) = \sqrt{\sum_{i=1}^{n} (x_i - y_i)^2} d(x,y)=i=1n(xiyi)2
    其中 ( x x x ) 和 ( y y y ) 是两个样本,( n n n ) 是特征的维度。

KNN 回归:在回归任务中,KNN 的预测规则如下:

  • 同样计算待预测样本 ( x x x) 与训练集中所有样本的距离。
  • 选取距离最近的 ( K K K ) 个样本 ( { x 1 , x 2 , … , x K } \{x_1, x_2, \ldots, x_K\} {x1,x2,,xK} )。
  • 将这 ( K K K ) 个样本的目标值进行平均,得到预测值:
    y ^ = 1 K ∑ i = 1 K y i \hat{y} = \frac{1}{K} \sum_{i=1}^{K} y_i y^=K1i=1Kyi
    其中 ( y i y_i yi ) 是第 ( i i i ) 个最近邻的目标值。

KNN 分类:在分类任务中,KNN 的分类规则如下:

  • 计算待分类样本 ( x x x ) 与训练集中所有样本的距离。
  • 选取距离最近的 ( K K K ) 个样本,记为 ( { x 1 , x 2 , … , x K } \{x_1, x_2, \ldots, x_K\} {x1,x2,,xK} )。
  • 统计这 ( K K K ) 个样本中每个类别的数量,选择数量最多的类别作为 ( x x x ) 的预测类别:
    y ^ = mode { y 1 , y 2 , … , y K } \hat{y} = \text{mode} \{y_1, y_2, \ldots, y_K\} y^=mode{y1,y2,,yK}
    其中 ( y i y_i yi ) 是第 ( i i i ) 个最近邻的真实类别。
  • K值的选择 K K K值的选择对模型的性能至关重要。较小的 K K K值可能会导致过拟合,而较大的 K K K值可能会导致欠拟合。一般使用交叉验证法选择最优 K K K值。

  • 原理

    • 距离度量:常用的距离度量包括欧氏距离、曼哈顿距离等。
    • K值选择:选择K个最近邻居的数量,K值过小会导致噪声影响,过大会导致决策边界模糊。
  • 应用场景:适合小数据集、非线性分布的数据。广泛用于推荐系统、图像分类等。

  • 优缺点

    • 优点:简单、无需训练过程,适用于少量数据。
    • 缺点:对噪声敏感,计算复杂度较高,需选择合适的 ( K K K ) 值。
  • 代码示例

    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 是一种二分类模型,通过构造最优超平面来最大化不同类别之间的间隔。适用于高维数据集。

  • 公式:最大化间隔的目标为:
    min ⁡ 1 2 ∣ ∣ w ∣ ∣ 2 \min \frac{1}{2} ||w||^2 min21∣∣w2
    同时满足约束条件:
    y i ( w ⋅ x i + b ) ≥ 1 , ∀ i y_i (w \cdot x_i + b) \geq 1, \quad \forall i yi(wxi+b)1,i

  • ( w w w):超平面的法向量

  • ( b b b):偏置项

  • 原理

    • 最大间隔超平面:通过拉格朗日乘数法求解优化问题,构造间隔最大化的分隔超平面。
    • 软间隔:对于非线性可分的情况,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 = 1 V ∣ D v ∣ ∣ D ∣ H ( D v ) \text{信息增益} = H(D) - \sum_{v=1}^{V} \frac{|D_v|}{|D|} H(D_v) 信息增益=H(D)v=1VDDvH(Dv)
    其中 ( H ( D ) H(D) H(D) ) 为数据集 ( D D D ) 的熵,( D v D_v Dv ) 为按特征 ( A A A ) 分割的数据集。

  • 基尼系数
    Gini ( D ) = 1 − ∑ k = 1 K p k 2 \text{Gini}(D) = 1 - \sum_{k=1}^{K} p_k^2 Gini(D)=1k=1Kpk2
    其中,( p k p_k pk ) 表示数据集中属于类别 ( k k k ) 的概率。

  • 原理:递归地选择最优特征进行分裂,生成树结构,直到满足停止条件。

    • 特征选择:通过信息增益、信息增益率或基尼指数来选择最佳特征进行分割。
    • 停止条件:达到预定的树深度,或叶节点中的样本数小于预定值。
  • 应用场景:适合对数据解释性要求高的场景,如信用评分、风险分析等。

  • 优缺点

    • 优点:易于理解,处理非线性数据。
    • 缺点:容易过拟合,受噪声影响大。
  • 代码示例

    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)

  • 概述:随机森林是一种基于集成学习的算法,利用多棵决策树对数据进行分类。其结果是所有决策树的投票结果。

  • 公式:随机森林是多棵决策树的集合,每棵树独立预测,然后取众数作为最终分类结果。对于输入数据点 ( x x x ),随机森林模型的预测为:
    y ^ = mode { h t ( x ) } t = 1 T \hat{y} = \text{mode} \{ h_t(x) \}_{t=1}^{T} y^=mode{ht(x)}t=1T
    其中 ( T T T ) 是决策树的数量,( h t ( x ) h_t(x) ht(x) ) 是第 ( t t t ) 棵树的预测类别。

  • 原理:通过随机抽样的方式训练多棵决策树,对结果进行平均或投票。

    • 引导采样(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)

  • 概述:朴素贝叶斯是一种基于贝叶斯定理的分类方法,假设特征之间是独立的。广泛用于文本分类问题。

  • 公式:朴素贝叶斯基于贝叶斯定理,通过计算后验概率进行分类。对于特征 ( x 1 , x 2 , … , x n x_1, x_2, \dots, x_n x1,x2,,xn ) 和类别 ( C C C ),后验概率 ( P ( C ∣ x 1 , x 2 , … , x n P(C|x_1, x_2, \dots, x_n P(Cx1,x2,,xn) ) 为:
    P ( C ∣ x 1 , x 2 , … , x n ) = P ( C ) ⋅ ∏ i = 1 n P ( x i ∣ C ) P ( x 1 , x 2 , … , x n ) 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(Cx1,x2,,xn)=P(x1,x2,,xn)P(C)i=1nP(xiC)
    其中 ( P ( C ) P(C) P(C) ) 是类别的先验概率,( P ( x i ∣ C ) P(x_i|C) P(xiC) ) 是在类别 ( C C C ) 下观测到特征 ( x i x_i xi ) 的概率。

  • 原理:根据贝叶斯定理,计算每个类别的条件概率,选择后验概率最大的类别。

    • 通过贝叶斯定理计算给定特征条件下每个类别的后验概率:
      P ( y ∣ X ) = P ( X ∣ y ) P ( y ) P ( X ) P(y | X) = \frac{P(X | y) P(y)}{P(X)} P(yX)=P(X)P(Xy)P(y)
      其中 ( P ( X ∣ y P(X | y P(Xy)) 是给定类别的条件概率,( 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近邻算法、支持向量机、决策树分类、随机森林分类、朴素贝叶斯分类。适用于离散值分类问题,如垃圾邮件识别、图像分类等。

    • 特点:分类算法通常通过最大化边界或使用集成方法来提高分类准确率。
    • 选择建议:数据量较小且线性分布时可用逻
;