Machine Learning | (5) Scikit-learn的分类器算法-朴素贝叶斯

简介: Machine Learning | (5) Scikit-learn的分类器算法-朴素贝叶斯

Machine Learning | 机器学习简介


Machine Learning | (1) Scikit-learn与特征工程


Machine Learning | (2) sklearn数据集与机器学习组成


Machine Learning | (3) Scikit-learn的分类器算法-k-近邻


Machine Learning | (4) Scikit-learn的分类器算法-逻辑回归


Machine Learning | (5) Scikit-learn的分类器算法-朴素贝叶斯


朴素贝叶斯

朴素贝叶斯(Naive Bayes)是一个非常简单,但是实用性很强的分类模型。朴素贝叶斯分类器的构造基础是贝叶斯理论。


概率论基础

概率定义为一件事情发生的可能性。事情发生的概率可以 通过观测数据中的事件发生次数来计算,事件发生的概率等于改事件发生次数除以所有事件发生的总次数。举一些例子:


扔出一个硬币,结果头像朝上

某天是晴天

某个单词在未知文档中出现

我们将事件的概率记作P(X),那么假设这一事件为X属于样本空间中的一个类别,那么0≤P(X)≤1。


联合概率与条件概率


联合概率

是指两件事情同时发生的概率。那么我们假设样本空间有一些天气数据:


是指两件事情同时发生的概率。那么我们假设样本空间有一些天气数据:


image.png

image.png

image.png

a = "life is short,i like python"
b = "life is too long,i dislike python"
c = "yes,i like python"
label=[1,0,1]

词袋法的特征值计算

若使用词袋法,且以训练集中的文本为词汇表,即将训练集中的文本中出现的单词(不重复)都统计出来作为词典,那么记单词的数目为n,这代表了文本的n个维度。以上三个文本在这8个特征维度上的表示为:

image.png

上面a',b'就是两个文档的词向量的表现形式,对于贝叶斯公式,从label中我们可以得出两个类别的概率为:


P(ci=1)=0.5,P(ci=0)=0.5


对于一个给定的文档类别,每个单词特征向量的概率是多少呢?


提供一种TF计算方法,为类别y_kyk每个单词出现的次数N_iNi,除以文档类别y_kyk中所有单词出现次数的总数NN:


Pi=N/Ni


首先求出现总数,对于1类别文档,在a'中,就可得出总数为1+1+1+1+1+1=6,c'中,总共1+1+1+1=4,故在1类别文档中总共有10次


每个单词出现总数,假设是两个列表,a'+c'就能得出每个单词出现次数,比如P(w=python)=2/10=0.20000000,同样可以得到其它的单词概率。最终结果如下:

# 类别1文档中的词向量概率
p1 = [0.10000000,0.10000000,0.20000000,0.10000000,0,0.20000000,0,0,0.20000000,0.10000000]
# 类别0文档中的词向量概率
p0 = [0.16666667,0.16666667,0.16666667,0,0.16666667,0,0.16666667,0.16666667,0.16666667,0]

拉普拉斯平滑系数


为了避免训练集样本对一些特征的缺失,即某一些特征出现的次数为0,在计算P(X1,X2,X3,...,Xn∣Yi)的时候,各个概率相乘最终结果为零,这样就会影响结果。我们需要对这个概率计算公式做一个平滑处理:


Pi=N+α∗m / Ni+α


其中mm为特征词向量的个数,\alphaα为平滑系数,当\alpha{=}1α=1,称为拉普拉斯平滑


sklearn.naive_bayes.MultinomialNB

class sklearn.naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
  """
  :param alpha:float,optional(default = 1.0)加法(拉普拉斯/ Lidstone)平滑参数(0为无平滑)
  """

image.png

互联网新闻分类

读取20类新闻文本的数据细节

from sklearn.datasets import fetch_20newsgroups
news = fetch_20newsgroups(subset='all')
print news.data[0]

上述代码得出该数据共有18846条新闻,但是这些文本数据既没有被设定特征,也没有数字化的亮度。因此,在交给朴素贝叶斯分类器学习之前,要对数据做进一步的处理。

20类新闻文本数据分割

from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test = train_test_split(news.data,news.target,test_size=0.25,random_state=42)

文本转换为特征向量进行TF特征抽取

from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer()
# 训练数据输入,并转换为特征向量
X_train = vec.fit_transform(X_train)
# 测试数据转换
X_test = vec.transform(X_test)

朴素贝叶斯分类器对文本数据进行类别预测

from sklearn.naive_bayes import MultinomialNB
# 使用平滑处理初始化的朴素贝叶斯模型
mnb = MultinomialNB(alpha=1.0)
# 利用训练数据对模型参数进行估计
mnb.fit(X_train,y_train)
# 对测试验本进行类别预测。结果存储在变量y_predict中
y_predict = mnb.predict(X_test)

性能测试


特点分析

朴素贝叶斯模型被广泛应用于海量互联网文本分类任务。由于其较强的特征条件独立假设,使得模型预测所需要估计的参数规模从幂指数量级想线性量级减少,极大的节约了内存消耗和计算时间。到那时,也正是受这种强假设的限制,模型训练时无法将各个特征之间的联系考量在内,使得该模型在其他数据特征关联性较强的分类任务上的性能表现不佳


目录
相关文章
|
3月前
|
机器学习/深度学习 存储 算法
【博士每天一篇论文-算法】Continual Learning Through Synaptic Intelligence,SI算法
本文介绍了一种名为"Synaptic Intelligence"(SI)的持续学习方法,通过模拟生物神经网络的智能突触机制,解决了人工神经网络在学习新任务时的灾难性遗忘问题,并保持了计算效率。
57 1
【博士每天一篇论文-算法】Continual Learning Through Synaptic Intelligence,SI算法
|
3月前
|
存储 算法
【博士每天一篇文献-算法】On tiny episodic memories in continual learning
本文研究了在连续学习环境中使用小型情节记忆来解决灾难性遗忘问题,通过实证分析发现经验重播(ER)方法在连续学习中的表现优于现有最先进方法,并且重复训练对过去任务的小型记忆可以提升泛化性能。
22 1
【博士每天一篇文献-算法】On tiny episodic memories in continual learning
|
3月前
|
机器学习/深度学习 算法 计算机视觉
【博士每天一篇文献-算法】持续学习经典算法之LwF: Learning without forgetting
LwF(Learning without Forgetting)是一种机器学习方法,通过知识蒸馏损失来在训练新任务时保留旧任务的知识,无需旧任务数据,有效解决了神经网络学习新任务时可能发生的灾难性遗忘问题。
216 9
|
3月前
|
机器学习/深度学习 算法 机器人
【博士每天一篇文献-算法】改进的PNN架构Lifelong learning with dynamically expandable networks
本文介绍了一种名为Dynamically Expandable Network(DEN)的深度神经网络架构,它能够在学习新任务的同时保持对旧任务的记忆,并通过动态扩展网络容量和选择性重训练机制,有效防止语义漂移,实现终身学习。
57 9
|
3月前
|
存储 机器学习/深度学习 算法
【博士每天一篇文献-算法】Fearnet Brain-inspired model for incremental learning
本文介绍了FearNet,一种受大脑记忆机制启发的神经网络模型,用于解决增量学习中的灾难性遗忘问题。FearNet不存储先前的例子,而是使用由海马体复合体和内侧前额叶皮层启发的双记忆系统,以及一个受基底外侧杏仁核启发的模块来决定使用哪个记忆系统进行回忆,有效减轻了灾难性遗忘,且在多个数据集上取得了优异的性能。
29 6
|
3月前
|
存储 机器学习/深度学习 算法
【博士每天一篇文献-算法】连续学习算法之HNet:Continual learning with hypernetworks
本文提出了一种基于任务条件超网络(Hypernetworks)的持续学习模型,通过超网络生成目标网络权重并结合正则化技术减少灾难性遗忘,实现有效的任务顺序学习与长期记忆保持。
45 4
|
3月前
|
机器学习/深度学习 存储 人工智能
【博士每天一篇文献-算法】改进的PNN架构Progressive learning A deep learning framework for continual learning
本文提出了一种名为“Progressive learning”的深度学习框架,通过结合课程选择、渐进式模型容量增长和剪枝机制来解决持续学习问题,有效避免了灾难性遗忘并提高了学习效率。
59 4
|
3月前
|
存储 机器学习/深度学习 算法
【博士每天一篇文献-算法】连续学习算法之RWalk:Riemannian Walk for Incremental Learning Understanding
RWalk算法是一种增量学习框架,通过结合EWC++和修改版的Path Integral算法,并采用不同的采样策略存储先前任务的代表性子集,以量化和平衡遗忘和固执,实现在学习新任务的同时保留旧任务的知识。
86 3
|
3月前
|
机器学习/深度学习 存储 人工智能
【博士每天一篇文献-算法】Zero-Shot Machine Unlearning
这篇论文提出了零样本机器遗忘的概念,介绍了两种新方法——错误最小化-最大化噪声(Error Maximization-Minimization, M-M)和门控知识传输(Gated Knowledge Transfer, GKT),以实现在不访问原始训练数据的情况下从机器学习模型中删除特定数据,同时引入了Anamnesis指数来评估遗忘质量,旨在帮助企业有效遵守数据隐私法规。
57 3
|
3月前
|
数据采集 前端开发 算法
基于朴素贝叶斯算法的新闻类型预测,django框架开发,前端bootstrap,有爬虫有数据库
本文介绍了一个基于Django框架和朴素贝叶斯算法开发的新闻类型预测系统,该系统具备用户登录注册、后台管理、数据展示、新闻分类分布分析、新闻数量排名和新闻标题预测等功能,旨在提高新闻处理效率和个性化推荐服务。