机器学习:朴素贝叶斯算法对新闻分类

简介: 机器学习:朴素贝叶斯算法对新闻分类

概率基础

概率定义:一件事情发生的可能性

1、联合概率

包含多个条件,且所有条件同时成立的概率

记作:P ( A , B ) = P ( A ) P ( B ) P(A, B) = P(A)P(B)P(A,B)=P(A)P(B)


2、条件概率

事件A在另一个事件B已经发生的条件下发生的概率

记作:P ( A ∣ B ) P(A|B)P(A∣B)

特性:P ( A 1 , A 2 ∣ B ) = P ( A 1 ∣ B ) P ( A 2 ∣ B ) P(A1, A2|B) = P(A1|B)P(A2|B)P(A1,A2∣B)=P(A1∣B)P(A2∣B)

注意:此条件概率的成立,是由于A1,A2相互独立的结果


朴素贝叶斯

特征独立


贝叶斯公式

P ( C ∣ W ) = P ( W ∣ C ) P ( C ) P ( W ) P(C|W) = \frac{P(W|C)P(C)}{P(W)}

P(C∣W)=

P(W)

P(W∣C)P(C)



=> P ( C ∣ W ) P ( W ) = P ( W ∣ C ) P ( C ) P(C|W)P(W) = P(W|C)P(C)P(C∣W)P(W)=P(W∣C)P(C)


说明:

W为给定文档的特征值(频数统计,预测文档提供)

C为文档类别


公式理解为:

P ( C ∣ F 1 , F 2... ) = P ( F 1 , F 2... ∣ C ) P ( C ) P ( F 1 , F 2... ) P(C|F1,F2...) = \frac{P(F1,F2...|C)P(C)}{P(F1,F2...)}

P(C∣F1,F2...)=

P(F1,F2...)

P(F1,F2...∣C)P(C)



公式分为三个部分

P ( C ) P(C)P(C) 每个文档类别的概率(某文档类别数/总文档数量)

P ( W ∣ C ) P(W|C)P(W∣C) 给定类别下特征(被预测文档中出现的词)的概率


计算方法: P ( F 1 ∣ C ) = N i / N P(F1|C) = Ni/NP(F1∣C)=Ni/N

Ni 为该F1词在C类别所有文档中出现的次数

N 为所属类别C下的文档所有词出现的次数和


P(F1, F2…) 预测文档中每个词的频率


举例:

训练集统计结果


特征  科技类(30)  娱乐类(60)  汇总(90)

商场    9           51          60

影院    8           56          64

支付宝  20          15          35

云计算  63          0           63

汇总    100         121         221



现有预测文档,出现词汇:影院,支付宝,云计算

计算属于科技,娱乐的类别概率


P(科技|影院,支付宝,云计算)

= P(影院,支付宝,云计算|科技)P(科技)

= P(影院|科技)P(支付宝|科技)P(云计算|科技)P(科技)

= (8/100)(20/100)(63/100)(30/90)

= 0.0034



P(娱乐|影院,支付宝,云计算)

= P(影院,支付宝,云计算|娱乐)P(娱乐)

= P(影院|娱乐)P(支付宝|娱乐)P(云计算|娱乐)P(娱乐)

= (56/121)(15/121)(0/121)(60/90)

= 0



娱乐的概率为0,这是不合理的


改进方法

拉普拉斯平滑系数

P(F1|C) = (Ni + a)/(N + am)

a为指定的系数,一般为1

m为训练文档中统计出的特征词个数

作用:防止分类概率为0


改进计算


P(科技|影院,支付宝,云计算)

= ((8+1)/(100+1*4))*((20+1)/(100+1*4))*((63+1)/(100+1*4))*(30/90)

= 0.0036



P(娱乐|影院,支付宝,云计算)

= ((56+1)/(121+1*4))*((15+1)/(121+1*4))*((0+1)/(121+1*4))*(60/90)

= 0.0003



新闻分类

20newsgroups 数据集下载地址:

http://qwone.com/~jason/20Newsgroups/20news-bydate.tar.gz


如果直接拷贝pkl文件,需要注意python版本


代码示例

# -*- coding: utf-8 -*-
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
# 如果获取不到就下载
data = fetch_20newsgroups(subset="all")
# 数据分割
X_train, X_test, y_train, y_test = train_test_split(
    data.data, data.target, test_size=0.33, random_state=42
)
# 特征抽取
tfidf = TfidfVectorizer()
# 以训练集中的词列表对每篇文章做重要性统计
X_train = tfidf.fit_transform(X_train)
print(tfidf.get_feature_names())
X_test = tfidf.transform(X_test)
# 朴素贝叶斯算法预测,alpha是拉普拉斯平滑系数
mlt = MultinomialNB(alpha=1.0)
mlt.fit(X_train, y_train)
score = mlt.score(X_test, y_test)
print("socre: {}".format(score))
# socre: 0.83






特点:

训练误差大,结果肯定不好

不需要调参


优点:

1、朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率

2、对缺失数据不太敏感,算法也比较简单,常用于文本分类

3、分类准确度高,速度快


缺点:

假设文章中一些词语和另一些词语是独立关系,不太靠谱

由于使用了样本属性独立性的假设,所以样本属性有关联时,效果不好

训练集中进行统计词,会对结果造成干扰


文本分类

-朴素贝叶斯

-神经网络(效果更好)


相关文章
|
2月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
139 4
|
3天前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
45 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
19天前
|
算法
PAI下面的gbdt、xgboost、ps-smart 算法如何优化?
设置gbdt 、xgboost等算法的样本和特征的采样率
41 2
|
2月前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
52 1
|
2月前
|
机器学习/深度学习 自然语言处理 算法
深入理解机器学习算法:从线性回归到神经网络
深入理解机器学习算法:从线性回归到神经网络
|
2月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
108 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
2月前
|
机器学习/深度学习 算法
深入探索机器学习中的决策树算法
深入探索机器学习中的决策树算法
43 0
|
2月前
|
机器学习/深度学习 算法 Python
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
41 0
|
3月前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
2月前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的决策树算法
【10月更文挑战第29天】本文将深入浅出地介绍决策树算法,一种在机器学习中广泛使用的分类和回归方法。我们将从基础概念出发,逐步深入到算法的实际应用,最后通过一个代码示例来直观展示如何利用决策树解决实际问题。无论你是机器学习的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和指导。