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−(w⋅x+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=1∑n[yilog(y^i)+(1−yi)log(1−y^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=1∏Np(yi∣xi;β) - 损失函数为对数损失(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=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近邻算法是一种基于实例的学习方法,用于分类和回归任务。它的基本思想是对于一个待分类的样本,计算训练集中所有样本与该样本的距离,选择距离最近的 ( 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=1∑n(xi−yi)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=1∑Kyi
其中 ( 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∣∣w∣∣2
同时满足约束条件:
y i ( w ⋅ x i + b ) ≥ 1 , ∀ i y_i (w \cdot x_i + b) \geq 1, \quad \forall i yi(w⋅xi+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=1∑V∣D∣∣Dv∣H(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)=1−k=1∑Kpk2
其中,( 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(C∣x1,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(C∣x1,x2,…,xn)=P(x1,x2,…,xn)P(C)⋅∏i=1nP(xi∣C)
其中 ( P ( C ) P(C) P(C) ) 是类别的先验概率,( P ( x i ∣ C ) P(x_i|C) P(xi∣C) ) 是在类别 ( 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(y∣X)=P(X)P(X∣y)P(y)
其中 ( P ( X ∣ y P(X | y P(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)