机器学习算法应用——朴素贝叶斯分类器

朴素贝叶斯分类器

朴素贝叶斯分类器(Naive Bayes Classifier)是一种基于贝叶斯定理和特征条件独立假设的分类方法。它适用于分类任务,特别是文本分类、垃圾邮件识别等领域。

原理

朴素贝叶斯分类器基于以下两个主要假设:

  1. 特征条件独立:给定类别,特征之间是相互独立的。这意味着一个特征的出现不依赖于其他特征的出现。虽然这在现实世界中往往不成立,但这个假设大大简化了计算,使得朴素贝叶斯分类器在实际应用中表现良好。
  2. 贝叶斯定理:用于计算给定特征时某个类别出现的概率。

贝叶斯定理

对于两个随机变量X和Y,贝叶斯定理可以表示为:

[ P(Y|X) = \frac{P(X|Y) \cdot P(Y)}{P(X)} ]

其中:

  • ( P(Y|X) ) 是给定X时Y的后验概率。
  • ( P(X|Y) ) 是给定Y时X的条件概率。
  • ( P(Y) ) 是Y的先验概率。
  • ( P(X) ) 是X的边际概率。

在分类任务中,X代表特征向量,Y代表类别。

朴素贝叶斯分类器的步骤

  1. 数据准备:收集带有类别标签的训练数据。
  2. 计算先验概率:计算每个类别的先验概率 ( P(Y) )。
  3. 计算条件概率:对于每个类别和每个特征,计算给定类别时该特征的条件概率 ( P(X_i|Y) )。由于朴素贝叶斯假设特征条件独立,这些计算可以独立进行。
  4. 分类:对于新的、未标记的数据点,计算其在每个类别下的后验概率 ( P(Y|X) )。选择具有最大后验概率的类别作为预测结果。

类型

  • 高斯朴素贝叶斯:当特征连续并且假设它们遵循高斯(正态)分布时使用。
  • 多项式朴素贝叶斯:用于离散特征,常用于文本分类任务,其中特征表示文档中单词的出现次数。
  • 伯努利朴素贝叶斯:也用于离散特征,但假设特征是二元的(例如,单词是否出现)。

优点

  • 实现简单且高效。
  • 对缺失和噪声数据相对鲁棒。
  • 在小数据集上表现良好。

缺点

  • 特征条件独立假设往往不成立,这可能会影响分类性能。
  • 需要大量的训练数据来估计概率。
  • 对于输入数据的预处理很敏感(例如,文本中的停用词和词干提取)。

应用

朴素贝叶斯分类器在文本分类、垃圾邮件过滤、情感分析、新闻分类等领域有广泛应用。

  1. 数据

Universal Bank 是一家业绩快速增长的银行。为了增加贷款业务,该银行探索将储蓄客户转变成个人贷款客户的方式。银行收集了5000条客户数据,包括客户特征(age、experience、income、family、 CCAvg、education、Zip Code)、客户对上一次贷款营销活动的响应( Personal Loan )、客户和银行的关系( mortgage,securities account.online.CD account、credit card)共13个特征,目标值是 Personal Loan,即客户是否接受了个人贷款。

ID

Age

Experience

Income

ZIP Code

账户

年龄

经验

收入

邮政编码

Family

CCAvg

Education

Mortgage

Securities Account

家庭成员人数

信用卡月平均消费

教育水平

按揭贷款数目

证券账户

CD Account

Online

CreditCard

Personal Loan

定期存款

在线

信用卡

个人贷款

(目标值)

在5000个客户中,仅480个客户接受了提供给他们的个人贷款。

数据实例:

IDAgeExperienceIncomeZIP CodeFamilyCCAvgEducationMortgagePersonal LoanSecurities AccountCD AccountOnlineCreditCard
1251499110741.61001000
24519349008931.51001000
339151194720111000000
43591009411212.72000000
53584591330412000001
63713299212140.4215500010
75327729171121.52000010
85024229394310.33000001
93510819008930.6210400010
103491809302318.93010000
1165391059471042.43000000
12295459027730.12000010
1348231149310623.83001000
145932409492042.52000010
15674111291741121001000
166030229505411.53000011
1738141309501044.7313410000
184218819430542.41000000
1946211939160428.13010000
205528219472010.52001001
215631259401540.9211100010
2257276390095323000010
23295629027711.2126000010
244418439132020.7116301000
2536111529552123.9115900001
264319299430530.519700010
274016839506440.23000000

注意:数据集中的编号(ID)和邮政编码(ZIP CODE)特征因为在分类模型中无意义,所以在数据预处理阶段将它们删除。

  1. 使用高斯朴素贝叶斯分类器(特征为连续型变量)对数据进行分类
  • 使用留出法划分数据集,训练集:测试集为7:3
  • #1. 读入数据
    df = pd.read_csv('universalbank.csv')
    y = df['Personal Loan']
    X = df.drop(['ID', 'ZIP Code', 'Personal Loan'], axis = 1)
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state = 0)
    
  • 使用高斯朴素贝叶斯分类器对训练集进行训练
  • #2. 训练高斯朴素贝叶斯模型
    gnb = GaussianNB()
    gnb.fit(X_train, y_train)

  • 使用训练好的模型对测试数据集进行预测并输出预测结果模型准确度
  • # 3. 评估模型
    y_pred = gnb.predict(X_test)
    print('测试数据的预测结果:', y_pred)
    
    acc = gnb.score(X_test, y_test)
    print('GaussianNB模型的准确度:',acc)
    

  1. 使用多项式朴素贝叶斯(特征为离散型变量)对数据进行分类
  • 筛选出数据中的离散型特征
  • # 1. 读入数据
    y = df['Personal Loan']
    X = df[['Family', 'Education', 'Securities Account', 
    'CD Account', 'Online', 'CreditCard']]              #只选用6个特征
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)
    

  • 使用留出法划分数据集,训练集:测试集为7:3。
  • X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)

  • 使用多项式朴素贝叶斯分类器对训练集进行训练
  • #2. 训练多项式朴素贝叶斯模型
    mnb = MultinomialNB()
    mnb.fit(X_train, y_train)
  • 使用训练好的模型对测试数据集进行预测并输出预测结果模型准确度
  • y_pred = mnb.predict(X_test)
    print('测试数据的预测结果:', y_pred)
    
    acc = mnb.score(X_test, y_test)
    print('MultinomialNB模型的准确度:',acc)
    

代码:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import MultinomialNB

#1. 读入数据
df = pd.read_csv('universalbank.csv')
y = df['Personal Loan']
X = df.drop(['ID', 'ZIP Code', 'Personal Loan'], axis = 1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state = 0)

#2. 训练高斯朴素贝叶斯模型
gnb = GaussianNB()
gnb.fit(X_train, y_train)

# 3. 评估模型
y_pred = gnb.predict(X_test)
print('测试数据的预测结果:', y_pred)

acc = gnb.score(X_test, y_test)
print('GaussianNB模型的准确度:',acc)

# 1. 读入数据
y = df['Personal Loan']
X = df[['Family', 'Education', 'Securities Account', 
'CD Account', 'Online', 'CreditCard']]              #只选用6个特征
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)

#2. 训练多项式朴素贝叶斯模型
mnb = MultinomialNB()
mnb.fit(X_train, y_train)

y_pred = mnb.predict(X_test)
print('测试数据的预测结果:', y_pred)

acc = mnb.score(X_test, y_test)
print('MultinomialNB模型的准确度:',acc)


  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张謹礧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值