做淘宝代销哪个网站好,陕西省高速公路建设集团公司网站,赣州卫生人才考试网,wordpress怎样连接数据库连接一.决策树
决策树中的基尼系数#xff08;Gini Index#xff09;是用于衡量数据集中不纯度#xff08;或混杂度#xff09;的指标。基尼系数的取值范围在0到0.5之间#xff0c;其中0表示数据完全纯#xff08;同一类别#xff09;#xff0c;0.5表示数据完全混杂。
基…一.决策树
决策树中的基尼系数Gini Index是用于衡量数据集中不纯度或混杂度的指标。基尼系数的取值范围在0到0.5之间其中0表示数据完全纯同一类别0.5表示数据完全混杂。
基尼系数的公式
对于一个节点基尼系数的计算公式为 G i n i ( p ) 1 − ∑ i 1 n p i 2 Gini(p) 1 - \sum_{i1}^{n} p_i^2 Gini(p)1−i1∑npi2 其中
( n ) 是类别的总数。( p_i ) 是属于类别 ( i ) 的样本所占的比例。
计算步骤
假设在某个节点上有 ( m ) 个样本分别属于 ( n ) 个不同的类别类别 ( i ) 的样本数量为 ( c_i )那么 p i c i m p_i \frac{c_i}{m} pimci 将 ( p_i ) 带入基尼系数公式可以得到 G i n i ( p ) 1 − ∑ i 1 n ( c i m ) 2 Gini(p) 1 - \sum_{i1}^{n} \left( \frac{c_i}{m} \right)^2 Gini(p)1−i1∑n(mci)2
示例计算
假设某个节点上有以下数据分布
类别 A: 4 个样本类别 B: 6 个样本类别 C: 10 个样本
总样本数量 ( m 4 6 10 20 )。
每个类别的比例为 类别 A: p A 4 20 0.2 p_A \frac{4}{20} 0.2 pA2040.2 类别 B: p B 6 20 0.3 p_B \frac{6}{20} 0.3 pB2060.3 类别 C: p C 10 20 0.5 p_C \frac{10}{20} 0.5 pC20100.5
基尼系数计算如下 G i n i ( p ) 1 − ( 0. 2 2 0. 3 2 0. 5 2 ) 1 − ( 0.04 0.09 0.25 ) 1 − 0.38 0.62 Gini(p) 1 - (0.2^2 0.3^2 0.5^2) 1 - (0.04 0.09 0.25) 1 - 0.38 0.62 Gini(p)1−(0.220.320.52)1−(0.040.090.25)1−0.380.62
该节点的基尼系数为 0.62表示数据在这个节点上具有一定的不纯度。基尼系数越小节点越纯因此在构建决策树时通常选择基尼系数最小的划分方式来分割数据。
DecisionTreeClassifier 是 scikit-learn 库中用于分类任务的决策树模型。决策树通过一系列决策规则将数据分成不同的类别。
1. criterion默认值gini
含义用于衡量数据分裂质量的指标。取值 gini使用基尼不纯度Gini impurity作为分裂的标准。基尼不纯度是衡量集合中随机选择的两个元素属于不同类别的概率。entropy使用信息增益Information Gain基于信息熵Entropy来选择分裂点。
2. splitter默认值best
含义选择每次分裂的策略。取值 best在所有特征中选择最佳分裂点。random随机选择特征的最佳分裂点。
3. max_depth默认值None
含义控制决策树的最大深度。树的深度越大模型越复杂。取值 None树会一直生长直到所有叶节点是纯的或者每个叶节点包含少于 min_samples_split 个样本。int树的最大深度。较小的值防止过拟合较大的值允许树更复杂。
4. min_samples_split默认值2
含义内部节点再分裂所需的最小样本数。取值 int指定最小样本数的具体值。float以比例形式指定最小样本数即一个0到1之间的小数。
5. min_samples_leaf默认值1
含义叶节点所需的最小样本数。可以防止模型生成包含少量样本的叶节点。取值 int指定最小样本数的具体值。float以比例形式指定最小样本数。
6. min_weight_fraction_leaf默认值0.0
含义叶节点所需的最小样本权重的比例。取值 float介于0到1之间通常用于处理样本权重。
7. max_features默认值None
含义在每次分裂时考虑的最大特征数量。取值 None使用所有特征。int使用指定数量的特征。float使用特定比例的特征。auto等同于 sqrt(n_features)。sqrt等同于 sqrt(n_features)。log2等同于 log2(n_features)。
8. random_state默认值None
含义控制随机数生成器的种子以便结果可以复现。取值 None随机种子。int指定种子。
9. max_leaf_nodes默认值None
含义限制树的最大叶节点数。设置此参数会优先于 max_depth。取值 None不限制叶节点数量。int最大叶节点数量。
10. min_impurity_decrease默认值0.0
含义节点分裂后不纯度下降的最小值。如果不纯度下降小于这个值节点将不再分裂。取值 float一个非负值。
11. class_weight默认值None
含义为不同类别指定权重用于处理类别不平衡问题。取值 None不调整类别权重。dict根据指定字典中的权重调整类别。balanced根据类频率调整权重权重与样本数量成反比。
12. ccp_alpha默认值0.0
含义复杂度剪枝参数作为最小成本复杂度修剪的参数。增加此值将导致更简单的树。取值 float一个非负值。越大越能剪枝。
示例代码
#决策树from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import accuracy_score# 1. 加载数据集
wine load_wine()
X wine.data
y wine.target# 2. 标准化数据
scaler StandardScaler()
X_scaled scaler.fit_transform(X)# 3. PCA降维
pca PCA(n_components2)
X_pca pca.fit_transform(X_scaled)# 4. 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test train_test_split(X_pca, y, test_size0.3, random_state32)# 5. 决策树预估器
nb DecisionTreeRegressor()
nb.fit(X_train, y_train)# 6. 预测和评估
y_pred nb.predict(X_test)
accuracy accuracy_score(y_test, y_pred)print(f分类准确率: {accuracy:.2f})
控制树的复杂性可以通过调整 max_depth、min_samples_split、min_samples_leaf、max_leaf_nodes 等参数来控制决策树的复杂性避免过拟合。处理类别不平衡使用 class_weight 参数为不同类别指定权重。
二.朴素贝叶斯
朴素贝叶斯Naive Bayes是基于贝叶斯定理的一类简单而强大的分类算法。尽管它的假设比较强特征之间条件独立但在许多实际应用中效果非常好。下面是朴素贝叶斯算法的数学原理
1. 贝叶斯定理
贝叶斯定理是朴素贝叶斯分类器的基础用于计算后验概率。贝叶斯定理的公式如下 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 ) P ( X ∣ y ) ⋅ P ( y ) P(y∣X)P(X∣y)⋅P(y)P(X)P(y | X) \frac{P(X | y) \cdot P(y)}{P(X)}P(y∣X)P(X)P(X∣y)⋅P(y) P(y∣X)P(X∣y)⋅P(y)P(X)P(y∣X)P(X)P(X∣y)⋅P(y)P(y∣X)P(X)P(X∣y)⋅P(y) 其中 P ( y ∣ X ) P ( y ∣ X ) P ( y ∣ X ) P(y∣X)P(y | X)P(y∣X) P(y∣X)P(y∣X)P(y∣X) 是给定特征 XXX 时类别 yyy 的后验概率。 P(X∣y)P(X | y)P(X∣y) 是在类别 yyy 的条件下特征 XXX 出现的概率即似然度。 P(y)P(y)P(y) 是类别 yyy 的先验概率。 P(X)P(X)P(X) 是特征 XXX 的边际概率用于归一化。
2. 朴素假设
朴素贝叶斯模型做了一个关键的简化假设即特征之间是条件独立的这意味着给定类别 yyy 时特征 X 1 , X 2 , … , X n X 1 , X 2 , … , X n X 1 , X 2 , … , X n X1,X2,…,XnX_1, X_2, \dots, X_nX1,X2,…,Xn X1,X2,…,XnX1,X2,…,XnX1,X2,…,Xn 是独立的。这一假设大大简化了后验概率的计算使得模型易于实现且计算效率高。
在这种假设下贝叶斯定理可以简化为 P ( y ∣ X 1 , X 2 , … , X n ) ∝ P ( y ) ⋅ P ( X 1 ∣ y ) ⋅ P ( X 2 ∣ y ) ⋅ ⋯ ⋅ P ( X n ∣ y ) P ( y ∣ X 1 , X 2 , … , X n ) ∝ P ( y ) ⋅ P ( X 1 ∣ y ) ⋅ P ( X 2 ∣ y ) ⋅ ⋯ ⋅ P ( X n ∣ y ) P ( y ∣ X 1 , X 2 , … , X n ) ∝ P ( y ) ⋅ P ( X 1 ∣ y ) ⋅ P ( X 2 ∣ y ) ⋅ ⋯ ⋅ P ( X n ∣ y ) P(y∣X1,X2,…,Xn)∝P(y)⋅P(X1∣y)⋅P(X2∣y)⋅⋯⋅P(Xn∣y)P(y | X_1, X_2, \dots, X_n) \propto P(y) \cdot P(X_1 | y) \cdot P(X_2 | y) \cdot \dots \cdot P(X_n | y)P(y∣X1,X2,…,Xn)∝P(y)⋅P(X1∣y)⋅P(X2∣y)⋅⋯⋅P(Xn∣y) P(y∣X1,X2,…,Xn)∝P(y)⋅P(X1∣y)⋅P(X2∣y)⋅⋯⋅P(Xn∣y)P(y∣X1,X2,…,Xn)∝P(y)⋅P(X1∣y)⋅P(X2∣y)⋅⋯⋅P(Xn∣y)P(y∣X1,X2,…,Xn)∝P(y)⋅P(X1∣y)⋅P(X2∣y)⋅⋯⋅P(Xn∣y) 这意味着我们可以通过计算各个特征在每个类别下的条件概率并将它们相乘来计算后验概率。
MultinomialNB() 多项式朴素贝叶斯和 GaussianNB() 都是朴素贝叶斯Naive Bayes分类器的变种适用于不同类型的数据。
1. MultinomialNB()–多项式朴素贝叶斯
MultinomialNB() 是朴素贝叶斯分类器的一种适用于多项式分布数据或者称为计数数据的分类问题。它假设特征是由一个多项分布生成的这在文本分类和其他类型的分类任务中非常常见。
适用情况
数据特征应为计数数据如文档中单词出现的次数。特征可以是整数计数通常是非负的。多项式朴素贝叶斯通常用于文本分类其中特征向量表示单词出现的频率或者 TF-IDF 权重。
工作原理
计算每个类别的条件概率即给定类别下每个特征的概率分布。使用贝叶斯定理计算后验概率并结合各特征的条件概率得出最终的分类结果。 #多项式朴素贝叶斯
from sklearn.datasets import load_wine
from sklearn.preprocessing import StandardScaler #标准化
from sklearn.preprocessing import MinMaxScaler#归一化
from sklearn.decomposition import PCA
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
import numpy as npdata load_wine()x data.data# #标准化
# transfer StandardScaler()
# x1 transfer.fit_transform(x)# 2. 缩放数据到[0, 1]范围
scaler MinMaxScaler()
x1 scaler.fit_transform(x)#PCA降维
tr PCA(n_components0.89)
x2 tr.fit_transform(x1)# 4. 将负值平移为非负值
x3 x2- np.min(x2)x_train, x_test, y_train, y_test train_test_split(x3, data.target,test_size0.2,random_state44)#MultinomialNB分类--多项式朴素贝叶斯
model MultinomialNB()
model.fit(x_train,y_train)score model.score(x_test,y_test)
print(score)2. GaussianNB()
GaussianNB() 是朴素贝叶斯分类器的另一种形式适用于特征服从正态分布Gaussian Distribution的数据分类问题。
适用情况
特征数据应为连续值符合正态分布。可以处理实数特征如一些测量值或者物理量。
工作原理
假设每个类别的特征值服从正态分布通过计算每个类别下特征的均值和方差来估计类别条件概率分布。使用贝叶斯定理计算后验概率并结合特征的正态分布参数得出最终的分类结果。 #朴素贝叶斯分类
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score# 1. 加载数据集
wine load_wine()
X wine.data
y wine.target# 2. 标准化数据
scaler StandardScaler()
X_scaled scaler.fit_transform(X)# 3. PCA降维
pca PCA(n_components2)
X_pca pca.fit_transform(X_scaled)# 4. 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test train_test_split(X_pca, y, test_size0.3, random_state42)# 5. 朴素贝叶斯分类
nb GaussianNB()
nb.fit(X_train, y_train)# 6. 预测和评估
y_pred nb.predict(X_test)
accuracy accuracy_score(y_test, y_pred)print(f分类准确率: {accuracy:.2f})总结比较 数据类型 MultinomialNB() 适用于离散型特征如计数数据。GaussianNB() 适用于连续型特征如实数数据。 假设 MultinomialNB() 假设特征是由多项分布生成的。GaussianNB() 假设特征值服从正态分布。 应用场景 MultinomialNB() 在文本分类如垃圾邮件分类、推荐系统基于用户行为的分类等方面表现良好。GaussianNB() 在数据特征服从正态分布的情况下表现良好如一些传感器数据的分类或者健康检测领域。