机器学习——决策树,朴素贝叶斯

2024-08-23 04:20

本文主要是介绍机器学习——决策树,朴素贝叶斯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.决策树

  • 决策树中的基尼系数(Gini Index)是用于衡量数据集中不纯度(或混杂度)的指标。基尼系数的取值范围在0到0.5之间,其中0表示数据完全纯(同一类别),0.5表示数据完全混杂。

基尼系数的公式

对于一个节点,基尼系数的计算公式为:

G i n i ( p ) = 1 − ∑ i = 1 n p i 2 Gini(p) = 1 - \sum_{i=1}^{n} p_i^2 Gini(p)=1i=1npi2
其中:

  • ( n ) 是类别的总数。
  • ( p_i ) 是属于类别 ( i ) 的样本所占的比例。

计算步骤

假设在某个节点上有 ( m ) 个样本,分别属于 ( n ) 个不同的类别,类别 ( i ) 的样本数量为 ( c_i ),那么:

p i = c i m p_i = \frac{c_i}{m} pi=mci
将 ( p_i ) 带入基尼系数公式,可以得到:

G i n i ( p ) = 1 − ∑ i = 1 n ( c i m ) 2 Gini(p) = 1 - \sum_{i=1}^{n} \left( \frac{c_i}{m} \right)^2 Gini(p)=1i=1n(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 pA=204=0.2

  • 类别 B:
    p B = 6 20 = 0.3 p_B = \frac{6}{20} = 0.3 pB=206=0.3

  • 类别 C:
    p C = 10 20 = 0.5 p_C = \frac{10}{20} = 0.5 pC=2010=0.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.22+0.32+0.52)=1(0.04+0.09+0.25)=10.38=0.62

该节点的基尼系数为 0.62,表示数据在这个节点上具有一定的不纯度。基尼系数越小,节点越纯,因此在构建决策树时,通常选择基尼系数最小的划分方式来分割数据。

  • DecisionTreeClassifierscikit-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_components=2)
X_pca = pca.fit_transform(X_scaled)# 4. 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=0.3, random_state=32)# 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_depthmin_samples_splitmin_samples_leafmax_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(yX)=P(Xy)P(y)P(X)P(yX)=P(X)P(Xy)P(y)P(yX)=P(X)P(Xy)P(y)
其中:

  • P ( y ∣ X ) P ( y ∣ X ) P ( y ∣ X ) P(y∣X)P(y | X)P(y∣X) P(yX)P(yX)P(yX)

    是给定特征 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(yX1,X2,,Xn)P(y)P(X1y)P(X2y)P(Xny)P(yX1,X2,,Xn)P(y)P(X1y)P(X2y)P(Xny)P(yX1,X2,,Xn)P(y)P(X1y)P(X2y)P(Xny)
这意味着我们可以通过计算各个特征在每个类别下的条件概率,并将它们相乘来计算后验概率。

  • 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_components=0.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_size=0.2,random_state=44)#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_components=2)
X_pca = pca.fit_transform(X_scaled)# 4. 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=0.3, random_state=42)# 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() 在数据特征服从正态分布的情况下表现良好,如一些传感器数据的分类或者健康检测领域。

这篇关于机器学习——决策树,朴素贝叶斯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1098333

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个