机器学习——朴素贝叶斯算法Python实现

本文介绍了朴素贝叶斯算法的关键内容,并参照《统计学习方法》进行了学习总结。文章通过一个具体的汽车评价数据集,详细阐述了如何使用Python实现朴素贝叶斯分类器,包括数据预处理、模型训练以及分类过程。同时,针对可能出现的概率为0的问题,提出了拉普拉斯平滑的解决方案。
摘要由CSDN通过智能技术生成

简介

这里参考《统计学习方法》李航编进行学习总结。详细算法介绍参见书籍,这里只说明关键内容。
这里写图片描述
这里写图片描述

条件独立下:p{X=x|Y=y}=p{X1=x1|Y=y} * p{X2=x2|Y=y} *...* p{Xn=xn|Y=y}

这里写图片描述

(4.4)等价于p{Y=ck|X=x}= p{X=x|Y=ck}*p{Y=ck} / p{X=x}
所以对不同的Y=ck,分母都是一样的,最后(4.7)比较选出最大概率时可以忽略分母,仅比较分子。
而分子为p{Y=ck} * p{X1=x1|Y=ck}* p{X2=x2|Y=ck}*…*p{Xn=xn|Y=ck}

所以(4.7)的公式即为
max(p{Y=ck}* p{X1=x1|Y=ck} * p{X2=x2|Y=ck}*…*p{Xn=xn|Y=ck}) (k=1,2,…) 并返回对应的ck。

因此模型只需要训练出(生成)所有的 p{Y=ck} 和 p{Xi=xij|Y=ck}就可以利用(4.7)进行分类了.
(注:这里的xij表示第i个特征的第j个取值。)

案例:

下面通过一个实例来实现这个算法。
项目数据下载及说明,如下链接:
http://archive.ics.uci.edu/ml/datasets/Car+Evaluation
请自行下载数据,以及了解数据的相关内容。

数据样例:

Class Values:
unacc, acc, good, vgood

Attributes:
buying: vhigh, high, med, low.
maint: vhigh, high, med, low.
doors: 2, 3, 4, 5more.
persons: 2, 4, more.
lug_boot: small, med, big.
safety: low, med, high.

样本:

vhigh,vhigh,2,2,small,low,unacc
vhigh,vhigh,2,2,small,med,unacc
vhigh,vhigh,2,2,small,high,unacc
vhigh,vhigh,2,2,med,low,unacc
vhigh,vhigh,2,2,med,med,unacc
vhigh,vhigh,2,2,med,high,unacc
,,,

先读取数据:

import numpy as np

#从文档中读取数据,每条数据转成列表的形式
def readData(path):
    dataList = []
    with open(path,'r') as f:
        dataSet = f.readlines()

    for d in dataSet:
        d = d[:-1]
        d = d.split(',')
        print(d)
        dataList.append(d)

    return dataList

然后利用这些数据生成所有的 p{Y=ck} 和 p{Xi=xij|Y=ck}。

#为方便代码处理,先做属性映射
#分类值映射
Cls = {
  'unacc':0, 'acc':1, 'good':2, 'vgood':3}   
#特征值映射,共6个特征值,每个特征表示为X[i],X[i][xiv]表示特征Xi的取值。
X = [{
  'vhigh':0, 'high':1, 'med':2, 'low':3},
         {
  'vhigh':0, 'high':1, 'med'
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您介绍一下朴素贝叶斯算法在新闻分类中的应用及其Sklearn实现。 首先,朴素贝叶斯算法是一种基于贝叶斯定理和特征条件独立假设的分类算法,其主要思想是利用先验概率和条件概率来计算后验概率,从而实现分类。在新闻分类中,我们可以将每篇新闻看作一个样本,将其所属的类别作为标签进行分类。 Sklearn是Python中一个强大的机器学习库,其中包含了朴素贝叶斯分类器的实现。下面是一个使用Sklearn实现新闻分类的示例代码: ```python # 导入所需的库和数据集 from sklearn.datasets import fetch_20newsgroups from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.naive_bayes import MultinomialNB from sklearn.metrics import classification_report # 加载数据集 newsgroups_train = fetch_20newsgroups(subset='train') newsgroups_test = fetch_20newsgroups(subset='test') # 特征提取(使用TF-IDF方法) vectorizer = TfidfVectorizer() X_train = vectorizer.fit_transform(newsgroups_train.data) X_test = vectorizer.transform(newsgroups_test.data) y_train = newsgroups_train.target y_test = newsgroups_test.target # 训练模型 clf = MultinomialNB() clf.fit(X_train, y_train) # 预测并评估模型 y_pred = clf.predict(X_test) print(classification_report(y_test, y_pred, target_names=newsgroups_test.target_names)) ``` 以上代码中,我们首先使用Sklearn提供的`fetch_20newsgroups`函数加载新闻数据集。然后,我们使用`TfidfVectorizer`方法对文本进行特征提取,将其转换为TF-IDF特征向量。接着,我们使用`MultinomialNB`方法训练模型,并使用测试集进行预测和评估。 最后,我们使用`classification_report`方法输出分类结果的准确率、召回率和F1值等指标。在这个示例中,我们使用的是多项式朴素贝叶斯分类器(Multinomial Naive Bayes),它适用于文本分类等离散型数据的分类应用。 希望这个示例代码可以对您有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值