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

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)
    

上一篇:Chromium 中监听browser 添加/删除等事件c++


下一篇:solidity的struct对象,web3j java解析输出参数