无规则采集器列表算法( python机器学习朴素贝叶斯及模型的选择和调优示例详解)

优采云 发布时间: 2022-02-02 10:22

  无规则采集器列表算法(

python机器学习朴素贝叶斯及模型的选择和调优示例详解)

  python机器学习朴素贝叶斯算法和模型的选择和调优详解

  更新时间:2021 年 11 月 12 日 15:47:34 作者:Swayzzu

  本文章主要介绍python机器学习的朴素贝叶斯和模型选择调优示例。有需要的朋友可以借鉴。我希望它会有所帮助。祝你进步更大。

  内容

  一、概率基础1.概率

  概率是某事发生的可能性。

  2.联合概率

  收录多个条件,以及所有条件同时为真的概率,记为:P(A, B) = P(A) * P(B)

  3.条件概率

  在另一个事件 B 已经发生的情况下,事件 A 发生的概率,记为:P(A|B)

  条件概率的性质:P(A1,A2|B) = P(A1|B)P(A2|B)

  注:这个条件概率的成立是由于A1和A2相互独立

  朴素贝叶斯的原理是对于每个样本,计算属于每个类别的概率,并分类到概率最高的类别中。

  二、朴素贝叶斯1.朴素贝叶斯的计算方法

  

  直接代入实际例子,各部分解释如下:

  P(C) = P(Technology):科学文档类别的概率(科学文档数量/文档总数)

  P(W|C) = P('Intelligence', 'Development'|Technology):在科技文献分类文章中,'Intelligence'和'Development'两个特征词出现的概率'。注:“智能”、“发展”属于预测文档中出现的词,技术文档中可能有更多的特征词,但给定的文档可能不收录所有这些词。因此,使用给定文档中收录的内容。

  计算方法:

  P(F1|C) = N(i)/N(在训练集中计算)

  N(i) 是 F1 词在 C 类所有文档中出现的次数

  N 是文档中类别 C 下所有单词的出现次数,并且

  P('Intelligence'|Technology) = 所有技术文档中出现'intelligence'的次数/技术文档中所有单词出现的次数和

  那么 P(F1,F2...|C) = P(F1|C) * P(F2|C)

  P('智力', '发展'|技术) = P('智力'|技术) * P('发展'|技术)

  这样就可以根据预测文档中的特征词计算出预测文档属于科技的概率。相同的方法用于计算其他类型的概率。哪个更高。

  2.拉普拉斯平滑

  

  3.朴素贝叶斯 API

  sklearn.naive_bayes.MultinomialNB

  

  三、朴素贝叶斯算法案例1.案例概述

  本例中的数据来自 sklearn 中的 20newsgroups 数据。通过提取文章中的特征词,使用朴素贝叶斯方法,计算预测的文章,并由得到的概率确定。文章它属于什么类别。

  大致步骤如下:首先,将文章分为两类,一类作为训练集,一类作为测试集。接下来,使用tfidf从训练集和测试集文章中提取特征,这样就生成了训练集和测试集的x。接下来可以直接调用朴素贝叶斯算法将训练集数据x_train, y_train 进去,训练模型。最后,使用训练好的模型进行测试。

  2.数据采集

  导入数据库:import sklearn.datasets as dt

  导入数据:news = dt.fetch_20newsgroups(subset='all')

  3.数据处理

  分割使用与 knn 中相同的方法。另外,对于从sklearn导入的数据,可以直接调用.data获取数据集,调用.target获取目标值。

  拆分数据:x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.25)

  特征值提取方法实例化:tf = TfIdfVectorizer()

  提取训练集数据的特征值:x_train = tf.fit_transform(x_train)

  测试集数据特征值提取:x_test = tf.transform(x_test)

  对于测试集的特征提取,只需要调用transform即可,因为使用的是训练集的标准,而训练集的标准在上一步已经拟合好了,直接使用测试集即可。

  4.算法流程

  算法实例化:mlt = MultinomialNB(alpha=1.0)

  算法训练:mlt.fit(x_train, y_train)

  预测结果:y_predict = mlt.predict(x_test)

  5.备注

  朴素贝叶斯算法的准确率是由训练集决定的,不需要调整。训练集误差大,结果肯定不好。因为计算方法是固定的,没有单一的超参数可以调整。

  朴素贝叶斯的缺点:假设文档中的某些词是独立于其他词的,彼此之间没有关系。并且训练集中的词统计会干扰结果。训练集越好,结果越好,训练集越差,结果越差。

  四、分类模型的评估1.混淆矩阵

  评价标准有多种,其中之一就是准确率,就是将预测的目标值与提供的目标值一一比较,计算出准确率。

  我们还有其他更通用和有用的评估标准,即精度和召回率。精度和召回率是基于混淆矩阵计算的。

  

  

  一般来说,我们只关注召回。

  F1分类标准:

  

  根据上式,可以使用精确率和召回率计算出F1-score,可以反映模型的鲁棒性。

  2.评估模型 API

  sklearn.metricx.classification_report

  3.模型选择与调优 ①交叉验证

  交叉验证是为了让被评估的模型更加准确可信,具体如下:

  >> 将所有数据分成 n 等份

  >>第一个作为验证集,其他作为训练集,得到一个准确率,模型1

  >>第二个作为验证集,其他作为训练集,得到一个准确率,模型2

  >>......

  >> 直到每个副本都通过,得到n个模型的准确率

  >>平均所有的准确度,我们得到一个更可信的最终结果。

  如果将其分成四个相等的部分,则称为“4-fold cross-validation”。

  ②网格搜索

  网格搜索主要结合交叉验证来调整参数。比如K近邻算法中有一个超参数k,需要手动指定,比较复杂。因此,需要为模型预设几个超参数组合。通过交叉验证对每组超参数进行评估,最后选择最优的参数组合。造型。(K近邻算法只有一个超参数k,不是组合,但是如果算法有2个或更多的超参数,就是组合,相当于穷举法)

  网格搜索 API:sklearn.model_selection.GridSearchCV

  

  五、以knn为例进行模型调优

  假设已经对数据和特征进行了处理,得到了x_train、x_test、y_train、y_test,并且已经实例化了算法:knn = KNei*敏*感*词*orsClassifier()

  1.构造超参数

  因为算法中使用的超参数的名字叫做‘n_nei*敏*感*词*ors’,所以超参数的选择范围是直接用名字指定的。如果有第二个超参数,只需在其后添加一个字典元素。

  参数 = {'n_nei*敏*感*词*ors':[5,10,15,20,25]}

  2.进行网格搜索

  输入参数:算法(估计器),网格参数,指定几折交叉验证

  gc = GridSearchCV(knn, param_grid=params, cv=5)

  指定基本信息后,您可以将训练集数据拟合到其中。

  gc.fit(x_train, y_train)

  3.结果视图

  在网格搜索算法中,有几种方法可以查看准确率、模型、交叉验证结果以及每次交叉验证后的结果。

  gc.score(x_test, y_test) 返回准确度

  gc.best_score_ 返回最佳准确度

  gc.best_estimator_ 返回最佳估计器(将自动返回所选超参数)

  以上就是python机器学习朴素贝叶斯和模型的选择和调优的详细内容。更多关于朴素贝叶斯和模型选择和调优的信息,请关注脚本之家文章中的其他相关话题!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线