朴素贝叶斯分类
朴素贝叶斯分类是一种基于概率论的分类方法,它有一个前提就是假定各个特征之间是相互独立的。
在基于各个特征之间都是独立的基础上,我们假设我们现在有一个待分类项x = (x_1, x_2, …, x_n),现在我们要来确定这个x属于哪个类别y。
当然在这之前我们需要有几个基础
第一点,我们要知道什么是条件概率
P
(
A
∣
B
)
=
P
(
A
∩
B
)
/
P
(
B
)
P(A|B)=P(A∩B)/P(B)
P(A∣B)=P(A∩B)/P(B)
即在B发生的条件下A发生的概率等于A∩B的概率除以B发生的概率。
我们该如何去理解这个公式呢?
你可以想象一下,在一个二维平面上有一个面积为1的矩形,矩形里有两个相交的圆形,两个圆形一个称为A,一个称为B,你往上丢一个点,求这个点丢到B圆形内的条件下,同时又丢到A圆形的概率?
丢在B圆形的概率为B圆的面积除以矩形的面积,丢在B圆形又同时丢在A圆的概率就是AB两圆相交部分的面积除以矩形的面积,那么这个点丢到B圆形内的条件下,同时又丢到A圆形的概率为AB两圆相交部分的面积除以B圆形的面积。
第二点,我们要知道贝叶斯定理
P
(
Y
∣
X
)
=
P
(
X
∣
Y
)
⋅
P
(
Y
)
/
P
(
X
)
P(Y|X)=P(X|Y)·P(Y)/P(X)
P(Y∣X)=P(X∣Y)⋅P(Y)/P(X)
P(y∣x) 是后验概率,即在给定特征 x 的情况下类别为 y 的概率。
P(x∣y) 是似然概率,即在类别为 y 的情况下观测到特征 x 的概率。
P(y) 是先验概率,即类别为 y 的概率。
P(x)是特征 x 出现的概率。
贝叶斯定理是怎么来的呢?
假设我们有两个事件A和B,其中P(B) > 0。根据条件概率的定义,我们可以写出两个事件的概率公式:
- P(A|B) 表示在已知事件B发生的条件下,事件A发生的概率。
- P(B|A) 表示在已知事件A发生的条件下,事件B发生的概率。
条件概率的定义为:
P
(
A
∣
B
)
=
P
(
A
∩
B
)
/
P
(
B
)
P(A|B)=P(A∩B)/P(B)
P(A∣B)=P(A∩B)/P(B)
P ( B ∣ A ) = P ( A ∩ B ) / P ( A ) P(B|A)=P(A∩B)/P(A) P(B∣A)=P(A∩B)/P(A)
推导过程
- 联合概率的表达式 从条件概率的定义出发,我们知道联合概率 P(A∩B) 可以用两种方式表示:
P ( A ∩ B ) = P ( A ∣ B ) ⋅ P ( B ) P(A∩B) =P(A|B)·P(B) P(A∩B)=P(A∣B)⋅P(B)
P ( A ∩ B ) = P ( B ∣ A ) ⋅ P ( A ) P(A∩B) =P(B|A)·P(A) P(A∩B)=P(B∣A)⋅P(A)
-
联合概率的等价性 因为两边都是 P(A∩B),所以我们可以得出等式:
P ( A ∣ B ) ⋅ P ( B ) = P ( B ∣ A ) ⋅ P ( A ) P(A∣B)⋅P(B)=P(B∣A)⋅P(A) P(A∣B)⋅P(B)=P(B∣A)⋅P(A) -
贝叶斯定理的形成 我们可以重新排列上述等式来得到贝叶斯定理的形式:
P ( A ∣ B ) = P ( B ∣ A ) ⋅ P ( A ) / P ( B ) P(A∣B)=P(B∣A)⋅P(A)/P(B) P(A∣B)=P(B∣A)⋅P(A)/P(B)
朴素贝叶斯分类器假设特征之间相互独立,因此有
P(x∣y)=P(x1,x2,…,xn∣y)=P(x1∣y)⋅P(x2∣y)⋅…⋅P(xn∣y)
我们在训练阶段的时候,其实就是在计算每一个类别的p(y),以及对于每一个特征x和每一个类别y,计算该特征在该类别下的条件概率p(x|y),然后将这些数据保存起来,在预测阶段获取到待分类项x = (x_1, x_2, …, x_n)之后,计算在该分类项的在每一个类别下的后验概率,然后选出最大的后验概率该后验概率对应的类别就是该分类项的类别。
以上是我自己的口水话总结
下面是ai进行润色之后的总结
朴素贝叶斯分类器的训练阶段和预测阶段
在朴素贝叶斯分类器中,训练阶段的主要任务是计算每个类别的先验概率 P(y) 以及对于每个特征 x 和每个类别 y,计算该特征在该类别下的条件概率 P(x∣y)。这些概率值被保存下来,以便在预测阶段使用。
- 训练阶段:
- 计算先验概率 P(y):对于每个类别 y,计算该类别的出现频率作为先验概率。
- 计算条件概率 P(x∣y):对于每个特征 x和每个类别 y,计算特征 x在类别 y下的条件概率。
- 对于离散特征,直接计算频率作为概率估计。
- 对于连续特征,假设特征服从某种分布(如正态分布),并根据训练数据估计分布参数(如均值和方差)。
- 预测阶段:
- 当获取到待分类项 X=(x1,x2,…,xn)之后,计算在该分类项的每个类别下的后验概率。
- 由于特征之间假设条件独立,我们可以将联合条件概率分解为各个特征的条件概率的乘积。
- 计算每个类别的未归一化的后验概P(X∣y)⋅P(y)。
- 选择具有最大后验概率的类别作为预测结果。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.naive_bayes import MultinomialNB
iris = load_iris()
x = iris.data
y = iris.target
scaler = MinMaxScaler()
x = scaler.fit_transform(x)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=44)
mnb = MultinomialNB()
model = mnb.fit(x_train,y_train)
score = mnb.score(x_test,y_test)
print(score)
决策树分类
决策树分类器是一种基于树结构的监督学习方法,用于分类任务。它通过递归地分割数据集来构建一棵树形结构,每个内部节点代表一个特征上的测试,每个分支代表一个测试结果,而每个叶子节点代表一个类别(或类别分布)。
决策树分类器的构建过程
- 选择最佳特征:
- 在每个节点处,从当前可用的特征中选择一个最佳特征进行分割。
- 最佳特征的选择依据是能够最好地区分不同类别的特征,通常使用信息增益、增益比或基尼指数等指标来衡量特征的重要性。
- 分割数据集:
- 根据选定的最佳特征,将数据集分割成若干子集,每个子集对应于特征的一个取值。
- 这个过程递归地应用于每个子集,直到满足停止条件。
- 停止条件:
- 当满足以下任意一个条件时,停止分割:
- 子集中所有样本属于同一类别。
- 子集中不再包含特征,无法继续分割。
- 达到预定的最大深度或最小样本数量阈值。
- 当满足以下任意一个条件时,停止分割:
- 生成决策树:
- 经过上述过程,最终得到一棵完整的决策树,其中叶子节点代表分类结果。
决策树分类器的关键概念
-
信息增益:
-
信息增益用来衡量特征对数据集的纯度改进程度。
-
信息增益越大,说明特征越重要。
-
信息增益计算公式如下:
I n f o r m a t i o n G a i n = E n t r o p y ( D ) − ∑ ( ∣ D v ∣ ∣ D ∣ ⋅ E n t r o p y ( D v ) ) Information Gain=Entropy(D)−∑(∣Dv∣∣D∣⋅Entropy(Dv)) InformationGain=Entropy(D)−∑(∣Dv∣∣D∣⋅Entropy(Dv))
其中 D 表示数据集,V表示特征的取值集合,Dv表示特征取值为 v的子集。
E n t r o p y ( D ) = − ∑ p ( c ) l o g 2 p ( c ) Entropy(D)=−∑p(c)log2p(c) Entropy(D)=−∑p(c)log2p(c)
其中 C表示类别集合,p©表示类别 c在数据集D中的比例。
-
-
基尼指数:
-
基尼指数用来衡量数据集的不纯度。
-
基尼指数越小,说明数据集越纯。
-
基尼指数计算公式如下:
G i n i ( D ) = 1 − ∑ p ( c ) 2 Gini(D)=1−∑p(c)^2 Gini(D)=1−∑p(c)2G i n i I n d e x = G i n i ( D ) − ∑ ( ∣ D v ∣ ∣ D ∣ ⋅ G i n i ( D v ) ) Gini Index=Gini(D)−∑(∣Dv∣∣D∣⋅Gini(Dv)) GiniIndex=Gini(D)−∑(∣Dv∣∣D∣⋅Gini(Dv))
-
决策树分类器的预测过程
- 从根节点开始:
- 从决策树的根节点开始,对新样本进行分类。
- 沿着路径前进:
- 根据新样本的特征值,沿着决策树的路径前进。
- 每经过一个内部节点,就根据该节点的特征测试结果选择下一个分支。
- 到达叶子节点:
- 当到达叶子节点时,根据叶子节点所代表的类别进行预测。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
# 加载数据
X, y= load_iris()
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建决策树分类器
clf = DecisionTreeClassifier(criterion='gini', random_state=42)
# 训练模型
clf.fit(X_train, y_train)
# 预测
y_pred = clf.predict(X_test)