python scikit-learn 有什么算法

python scikit-learn 有什么算法,第1张

1,前言

很久不发文章,主要是Copy别人的总感觉有些不爽,所以整理些干货,希望相互学习吧。不啰嗦,进入主题吧,本文主要时说的为朴素贝叶斯分类算法。与逻辑回归,决策树一样,是较为广泛使用的有监督分类算法,简单且易于理解(号称十大数据挖掘算法中最简单的算法)。但其在处理文本分类,邮件分类,拼写纠错,中文分词,统计机器翻译等自然语言处理范畴较为广泛使用,或许主要得益于基于概率理论,本文主要为小编从理论理解到实践的过程记录。

2,公式推断

一些贝叶斯定理预习知识:我们知道当事件A和事件B独立时,P(AB)=P(A)(B),但如果事件不独立,则P(AB)=P(A)P(B|A)。为两件事件同时发生时的一般公式,即无论事件A和B是否独立。当然也可以写成P(AB)=P(B)P(A|B),表示若要两件事同事发生,则需要事件B发生后,事件A也要发生。

由上可知,P(A)P(B|A)= P(B)P(A|B)

推出P(B|A)=

其中P(B)为先验概率,P(B|A)为B的后验概率,P(A|B)为A的后验概率(在这里也为似然值),P(A)为A的先验概率(在这也为归一化常量)。

由上推导可知,其实朴素贝叶斯法就是在贝叶斯定理基础上,加上特征条件独立假设,对特定输入的X(样本,包含N个特征),求出后验概率最大值时的类标签Y(如是否为垃圾邮件),理解起来比逻辑回归要简单多,有木有,这也是本算法优点之一,当然运行起来由于得益于特征独立假设,运行速度也更快。

参数估计

3,参数估计

由上面推断出的公式,我们知道其实朴素贝叶斯方法的学习就是对概率P(Y=ck)和P(X(j)=x(j)|Y=ck)的估计。我们可以用极大似然估计法估计上述先验概率和条件概率。

其中I(x)为指示函数,若括号内成立,则计1,否则为0。李航的课本直接给出了用极大似然(MLE)估计求出的结果,并没给推导过程,

我们知道,贝叶斯较为常见的问题为0概率问题。为此,需要平滑处理,主要使用拉普拉斯平滑,如下所示:

K是类的个数,Sj是第j维特征的最大取值。实际上平滑因子λ=0即为最大似然估计,这时会出现提到的0概率问题;而λ=1则避免了0概率问题,这种方法被称为拉普拉斯平滑。

4,算法流程

5,朴素贝叶斯算法优缺点

优点:朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率

需调参较少,简单高效,尤其是在文本分类/垃圾文本过滤/情感判别等自然语言处理有广泛应用。

在样本量较少情况下,也能获得较好效果,计算复杂度较小,即使在多分类问题。

无论是类别类输入还是数值型输入(默认符合正态分布)都有相应模型可以运用。

缺点:0概率问题,需要平滑处理,通常为拉普拉斯平滑,但加一平滑不一定为效果最好,

朴素贝叶斯有分布独立的假设前提,生活中较少完全独立,在属性个数比较多或者属性之间相关性较大时,NBC模型的分类效率比不上决策树模型。而在属性相关性较小时,NBC模型的性能最为良好。

模型注意点:

1, 大家也知道,很多特征是连续数值型的,一般选择使用朴素贝叶斯高斯模型。

2, 为避免0概率事件,记得平滑,简单一点可以用『拉普拉斯平滑』。先处理处理特征,把相关特征去掉,

3, 朴素贝叶斯分类器一般可调参数比较少,需集中精力进行数据的预处理等特征工程工作。

6,Scikit-learn三大朴素贝叶斯模型

Scikit-learn里面有3种不同类型的朴素贝叶斯(:

1, 高斯分布型模型:用于classification问题,假定属性/特征是服从正态分布的,一般用在数值型特征。,

2, 多项式型模型:用于离散值模型里。比如文本分类问题里面我们提到过,我们不光看词语是否在文本中出现,也得看出现的次数。如果总词数为n,出现词数为m的话,说起来有点像掷骰子n次出现m次这个词的场景。

3, 伯努利模型:这种情况下,就如提到的bag ofwords处理方式一样,最后得到的特征只有0(没出现)和1(出现过)。

7 Scikit-learn算法实践

小编通过实现朴素贝叶斯三种模型以及主要分类算法,对比发现跟SVM,随机森林,融合算法相比,贝叶斯差距明显,但其时间消耗要远低于上述算法,以下为主要算法主要评估指标)。

8 Python代码

# --coding: utf-8 --

importtime

fromsklearn import metrics

fromsklearnnaive_bayes import GaussianNB

fromsklearnnaive_bayes import MultinomialNB

fromsklearnnaive_bayes import BernoulliNB

fromsklearnneighbors import KNeighborsClassifier

fromsklearnlinear_model import LogisticRegression

fromsklearnensemble import RandomForestClassifier

fromsklearn import tree

fromsklearnensemble import GradientBoostingClassifier

fromsklearnsvm import SVC

importnumpy as np

importurllib

# urlwith dataset

url ="-learning-databases/pima-indians-diabetes/pima-indians-diabetesdata"

#download the file

raw_data= urllibrequesturlopen(url)

#load the CSV file as a numpy matrix

dataset= nploadtxt(raw_data, delimiter=",")

#separate the data from the target attributes

X =dataset[:,0:7]

#X=preprocessingMinMaxScaler()fit_transform(x)

#print(X)

y =dataset[:,8]

print("\n调用scikit的朴素贝叶斯算法包GaussianNB ")

model= GaussianNB()

start_time= timetime()

modelfit(X,y)

print('training took %fs!' % (timetime() - start_time))

print(model)

expected= y

predicted= modelpredict(X)

print(metricsclassification_report(expected,predicted))

print(metricsconfusion_matrix(expected,predicted))

print("\n调用scikit的朴素贝叶斯算法包MultinomialNB ")

model= MultinomialNB(alpha=1)

start_time= timetime()

modelfit(X,y)

print('training took %fs!' % (timetime() - start_time))

print(model)

expected= y

predicted= modelpredict(X)

print(metricsclassification_report(expected,predicted))

print(metricsconfusion_matrix(expected,predicted))

print("\n调用scikit的朴素贝叶斯算法包BernoulliNB ")

model= BernoulliNB(alpha=1,binarize=00)

start_time= timetime()

modelfit(X,y)

print('training took %fs!' % (timetime() - start_time))

print(model)

expected= y

predicted= modelpredict(X)

print(metricsclassification_report(expected,predicted))

print(metricsconfusion_matrix(expected,predicted))

print("\n调用scikit的KNeighborsClassifier ")

model= KNeighborsClassifier()

start_time= timetime()

modelfit(X,y)

print('training took %fs!' % (timetime() - start_time))

print(model)

expected= y

predicted= modelpredict(X)

print(metricsclassification_report(expected,predicted))

print(metricsconfusion_matrix(expected,predicted))

print("\n调用scikit的LogisticRegression(penalty='l2') ")

model= LogisticRegression(penalty='l2')

start_time= timetime()

modelfit(X,y)

print('training took %fs!' % (timetime() - start_time))

print(model)

expected= y

predicted= modelpredict(X)

print(metricsclassification_report(expected,predicted))

print(metricsconfusion_matrix(expected,predicted))

print("\n调用scikit的RandomForestClassifier(n_estimators=8)  ")

model= RandomForestClassifier(n_estimators=8)

start_time= timetime()

modelfit(X,y)

print('training took %fs!' % (timetime() - start_time))

print(model)

expected= y

predicted= modelpredict(X)

print(metricsclassification_report(expected,predicted))

print(metricsconfusion_matrix(expected,predicted))

print("\n调用scikit的treeDecisionTreeClassifier() ")

model= treeDecisionTreeClassifier()

start_time= timetime()

modelfit(X,y)

print('training took %fs!' % (timetime() - start_time))

print(model)

expected= y

predicted= modelpredict(X)

print(metricsclassification_report(expected,predicted))

print(metricsconfusion_matrix(expected,predicted))

print("\n调用scikit的GradientBoostingClassifier(n_estimators=200) ")

model= GradientBoostingClassifier(n_estimators=200)

start_time= timetime()

modelfit(X,y)

print('training took %fs!' % (timetime() - start_time))

print(model)

expected= y

predicted= modelpredict(X)

print(metricsclassification_report(expected,predicted))

print(metricsconfusion_matrix(expected,predicted))

print("\n调用scikit的SVC(kernel='rbf', probability=True) ")

model= SVC(kernel='rbf', probability=True)

start_time= timetime()

modelfit(X,y)

print('training took %fs!' % (timetime() - start_time))

print(model)

expected= y

predicted= modelpredict(X)

print(metricsclassification_report(expected,predicted))

print(metricsconfusion_matrix(expected,predicted))

"""

# 预处理代码集锦

importpandas as pd

df=pdDataFrame(dataset)

print(dfhead(3))

print(dfdescribe())##描述性分析

print(dfcorr())##各特征相关性分析

##计算每行每列数据的缺失值个数

defnum_missing(x):

return sum(xisnull())

print("Missing values per column:")

print(dfapply(num_missing, axis=0)) #axis=0代表函数应用于每一列

print("\nMissing values per row:")

print(dfapply(num_missing, axis=1)head()) #axis=1代表函数应用于每一行"""

61 朴素贝叶斯模型算法原理

611 一维特征向量下的贝叶斯模型

612 二维特征向量下的贝叶斯模型

613 n维特征向量下的贝叶斯模型

614 朴素贝叶斯模型简单代码演示

62 案例实战 - 肿瘤预测模型(分类模型)

621 案例背景

622 数据读取与划分

623 模型搭建与预测

63 课程相关资源

这一章主要讲解机器学习中的朴素贝叶斯模型,包括朴素贝叶斯的算法原理和编程实现。同时将介绍一个朴素贝叶斯的经典案例:判断肿瘤为良性还是恶性来巩固所学知识点。

61 朴素贝叶斯模型算法原理

贝叶斯分类是机器学习中应用较为广泛的分类算法之一,其产生来自于贝叶斯对于逆概问题的思考,朴素贝叶斯是贝叶斯模型当中最简单的一种。

其算法核心为贝叶斯公式:

其中P(A)为事件A发生的概率,P(B)为事件B发生的概率,P(A|B)表示在事件B发生的条件下事件A发生的概率,同理P(B|A)则表示在事件A发生的条件下事件B发生的概率。

举个简单的例子,已知流感季节一个人感冒(事件A)的概率为40%(P(A)),一个人打喷嚏(事件B)的概率为80%(P(B)),一个人感冒的条件下打喷嚏的概率为100%(P(B|A)),那么已知一个人开始打喷嚏了,他是患感冒的概率为多少?这其实就是求这个人在打喷嚏的条件下患感冒的概率P(A|B),求解过程如下图所示:

611 一维特征向量下的贝叶斯模型

我们首先以一个更详细的例子来讲解一下贝叶斯公式更加偏实战的应用:如何判断一个人是否感冒了。假设已经有5个样本数据,如下表所示:

为方便演示,这里选取了一个特征变量:打喷嚏 (X1),其中数字1表示打喷嚏,0表示不打喷嚏;这里的目标变量是感冒 (Y),其中数字1表示感冒了,数字0表示未感冒。

根据上述数据,我们要利用贝叶斯公式,来预测一个人是否处于感冒的状态,比如说,一个人打喷嚏 (X1=1),那么他是否感冒了呢,也即预测他处于感冒状态的概率为多少,在数学上,我们把此概率写作P(Y|X1)。

应用贝叶斯公式有:

根据上述数据,我们可以计算在打喷嚏 (X1=1) 的条件下,患上感冒的概率为

其中P(X1=1|Y=1)为在已经感冒的条件下打喷嚏的概率,这里感冒的4个样本中打喷嚏的有3个,所以该概率为3/4;P(Y=1)则为所有样本中感冒的概率,这里5个人中有4个人感冒,所以为4/5;P(X1=1)则为所有样本中打喷嚏的概率,这里5个人中有4个人打喷嚏,所以为4/5。

同理在打喷嚏 (X1=1) 的条件下,没有患上感冒的概率为:

其中P(X1=1|Y=0)为在未感冒的条件下打喷嚏的概率,为1;P(Y=0)则为所有样本中未感冒的概率,为4/5;P(X1=1)则为所有样本中打喷嚏的概率,为4/5。

由于3/4大于1/4,所以在打喷嚏(X1=1) 的条件下患感冒的概率要高于不患感冒的概率,所以判断该人感冒了。

612 二维特征向量下的贝叶斯模型

层层递进,我们加入另外一个特征变量:头痛(X2),其中数字1表示头痛,0表示不头痛;这里的目标变量仍为感冒(Y)。

根据上述数据,我们仍利用贝叶斯公式,来预测一个人是否处于感冒的状态,比如说,一个人他打喷嚏且头痛 (X1=1, X2=1) ,那么他是否感冒了呢,也即预测他处于感冒状态的概率为多少,在数学上,我们把此概率写作P(Y|X1,X2)。

应用贝叶斯公式有:

在比较 P(Y=1|X1,X2) 与 P(Y=0|X1,X2) 时,由于分母 P(X1,X2) 的值是相同的,所以我们在实际计算中可以舍去这部分的计算,直接比较两者分子大小即可。即:

补充知识点:独立性假设

在计算该概率之前,我们首先引入朴素贝叶斯模型的独立性假设:朴素贝叶斯模型中各特征之间相互独立,即,因此上式可以写作:

在独立性假设的条件下,我们可以计算打喷嚏且头痛 (X1=1,X2=1) 的条件下感冒的概率P(Y=1|X1,X2) ,即简化为计算 P(X1|Y=1)P(X2|Y=1)P(Y=1) (P(X1|Y)P(X2|Y)P(Y))的值:

同理可以计算打喷嚏且头痛 (X1=1,X2=1) 的条件下没有患感冒的概率 P(Y=0|X1,X2), 即简化为计算P(X1|Y=0)P(X2|Y=0)P(Y=0):

由于9/20大于1/5,我们可以判断在打喷嚏但不头痛(X1=1,X2=1) 的条件下患感冒的概率要高于不患感冒的概率。

613 n维特征向量下的贝叶斯模型

我们可以在2个特征变量的基础上推广至n个特征变量 X1, X2, … , Xn,应用贝叶斯公式有:

同理因为分母相同,我们只需要关注分子

朴素贝叶斯模型假设给定目标值后特征之间相互独立,上式可以写作

其中P(X1|Y)、P(X2|Y)、P(Y)等数据都是已知的,由此可以根据上述公式计算在n个特征变量的不同取值的条件下,目标变量取某个值的概率,并且选择概率更高者对样本进行分类。

614 朴素贝叶斯模型简单代码演示

朴素贝叶斯模型(这里用的是高斯贝叶斯分类器)的引入方式如下所示:

from sklearnnaive_bayes import GaussianNB

1

1

在Jupyter Notebook编辑器中,在引入该库后,可以通过如下代码获取官方讲解内容:

GaussianNB

1

1

朴素贝叶斯模型简单代码演示如下所示:

from sklearnnaive_bayes import GaussianNB

X = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]

y = [0, 0, 0, 1, 1]

model = GaussianNB()

modelfit(X, y)

print(modelpredict([[5, 5]]))

1

2

3

4

5

6

7

8

1

2

3

4

5

6

7

8

其中X是特征变量,其共有2个特征;y是目标变量,共有两个类别:0和1;第5行引入模型;第6行通过fit()函数训练模型;最后1行通过predict()函数进行预测,预测结果如下:

[0]

1

1

62 案例实战 - 肿瘤预测模型(分类模型)

这一节将以一个医疗行业较为经典的肿瘤预测模型为例讲解如何在实战中应用朴素贝叶斯模型,我们将利用该模型来预测肿瘤为良性肿瘤还是恶性肿瘤。

1、首先,打开易企秀官网,点击时间轴功能,进入时间轴编辑页面。

2、在编辑页面中,可以添加时间轴的标题、时间点、、文字等内容。

3、点击添加按钮,可以添加新的时间轴,添加完成后可以编辑其中的内容,如果需要,可以删除时间轴。

4、编辑完成后,可以点击预览按钮,查看编辑的效果,如果满意,可以点击保存按钮,保存时间轴。

5、最后,可以将时间轴插入到需要的页面,完成时间轴的制作。

from sklearn import linear_model

建立模型

model = linear_modelLinearRegression()

modelfit(x_train,y_train)

评估模型

score = modelscore(x_test, y_test)

预测模型

result = modelpredict(x_test)

贝叶斯为了解决一个叫“逆向概率”问题写了一篇文章,尝试解答在没有太多可靠证据的情况下,怎样做出更符合数学逻辑的推测

“逆向概率”是相对“正向概率”而言

正向概率,比较容易理解,比如我们已经知道袋子里面有N 个球,不是黑球就是白球,其中M个是黑球,那么把手伸进去摸一个球,就能知道摸出黑球的概率是多少 => 这种情况往往是 上帝视角 ,即了解了事情的全貌再做判断

逆向概率,贝叶斯则从实际场景出发,提了一个问题:如果我们事先不知道袋子里面黑球和白球的比例,而是通过我们摸出来的球的颜色,能判断出袋子里面黑白球的比例么?

贝叶斯原理:

影响了接下来近200年的统计学理论

建立在主观判断的基础上:在我们不了解所有客观事实的情况下,同样可以先估计一个值

先验概率 ,通过经验来判断事情发生的概率

后验概率 ,就是发生结果之后,推测原因的概率

条件概率 ,事件A 在另外一个事件B已经发生条件下的发生概率,表示为P(A|B)

似然函数 ,把概率模型的训练过程理解为求参数估计的过程

比如,一个硬币在10次抛落中正面均朝上 => 那么这个硬币是均匀的可能性是多少?这里硬币均匀就是个参数,似然函数就是用来衡量这个模型的参数

经过推导,贝叶斯推理告诉我们后验概率是与先验概率和似然函数成正比得,即

Thinking:假设有一种病叫做“贝叶死”,它的发病率是万分之一,即10000 人中会有1个人得病。现有一种测试可以检验一个人是否得病的准确率是999%,误报率(假阳)是01%

那么,如果一个人被查出来患有“叶贝死”,实际上患有的可能性有多大?

查出患有“贝叶死”的准确率是999%,是不是实际上患“贝叶死”的概率也是999%?)

在10000个人中,还存在01%的误查的情况,也就是10个人没有患病但是被诊断成阳性。当然10000个人中,也确实存在一个患有贝叶死的人,他有999%的概率被检查出来

可以粗算下,患病的这个人实际上是这11个人里面的一员,即实际患病比例是1/11≈9%

贝叶斯原理就是求解后验概率,假设:A 表示事件 “测出为阳性”, B1 表示“患有贝叶死”, B2 表示“没有患贝叶死”

患有贝叶死的情况下,测出为阳性的概率为 P(A|B1)=999%

没有患贝叶死,但测出为阳性的概率为 P(A|B2)=01%

患有贝叶死的概率为  P(B1)=001%

没有患贝叶死的概率 P(B2)=9999%

那么我们检测出来为阳性,而且是贝叶死的概率P(B1,A)=P(B1)P(A|B1)=001%999%=000999% ≈001%

P(B1,A)代表的是联合概率,同样我们可以求得P(B2,A)=P(B2)P(A|B2)=9999%01%=009999% ≈01%

检查为阳性的情况下,患有贝叶死的概率,即P(B1|A)

检查出是阳性的条件下,但没有患有贝叶死的概率为

001%+01%均出现在了P(B1|A)和P(B2|A)的计算中作为分母,称之为论据因子,也相当于一个权值因子

我们可以总结出贝叶斯公式

从而我们可以得到通用的贝叶斯公式

一种简单但极为强大的预测建模算法

假设每个输入变量是独立的。这是一个强硬的假设,实际情况并不一定,但是这项技术对于绝大部分的复杂问题仍然非常有效

朴素贝叶斯模型由两种类型的概率组成:

每个类别的概率P(Cj)

每个属性的条件概率P(Ai|Cj)

什么是类别概率:

假设我有7个棋子,其中3个是白色的,4个是黑色的

那么棋子是白色的概率就是3/7,黑色的概率就是4/7 => 这个是类别概率

什么是条件概率:

假设我把这7个棋子放到了两个盒子里,其中盒子A里面有2个白棋,2个黑棋;盒子B里面有1个白棋,2个黑棋

那么在盒子A中抓到白棋的概率就是1/2,抓到黑棋的概率也是1/2,这个就是条件概率,也就是在某个条件(比如在盒子A中)下的概率

在朴素贝叶斯中,我们要统计的是属性的条件概率,也就是假设取出来的是白色的棋子,那么它属于盒子A的概率是2/3

Step1:先给出训练数据,以及这些数据对应的分类

Step2,计算类别概率和条件概率

Step3,使用概率模型(基于贝叶斯原理)对新数据进行预测

朴素贝叶斯分类(离散值):

如何根据身高,体重,鞋码,判断是否为男女,比如一个新的数据:身高“高”、体重“中”,鞋码“中” => 男 or 女?

求在A1、A2、A3属性下,Cj的概率

因为一共有2个类别,所以我们只需要求得P(C1|A1A2A3)和P(C2|A1A2A3)的概率即可,然后比较下哪个分类的可能性大,就是哪个分类结果

分别求下这些条件下的概率:

P(A1|C1)=1/2, P(A2|C1)=1/2, P(A3|C1)=1/4

P(A1|C2)=0, P(A2|C2)=1/2, P(A3|C2)=1/2

所以P(A1A2A3|C1)=1/16, P(A1A2A3|C2)=0

因为P(A1A2A3|C1)P(C1)>P(A1A2A3|C2)P(C2),所以应该是C1类别,即男性

身高180、体重120,鞋码41,请问该人是男是女呢

可以假设男性和女性的身高、体重、鞋码都是 正态分布 ,通过样本计算出均值和方差,也就是得到 正态分布 的密度函数。有了密度函数,就可以把值代入,算出某一点的值

比如,男性的身高是 均值 1795、 标准差 为3697的正态分布。所以男性的身高为180的概率为01069

同理可以计算得出男性体重为120的概率为0000382324,男性鞋码为41号的概率为0120304111

P(A1A2A3|C1)=P(A1|C1)P(A2|C1)P(A3|C1)=0106900003823240120304111=49169e-6

P(A1A2A3|C2)=P(A1|C2)P(A2|C2)P(A3|C2)=00000014748900153541440120306074=27244e-9

很明显这组数据分类为男的概率大于分类为女的概率

NORMDIST(x,mean,standard_dev,cumulative)

x:正态分布中,需要计算的数值;

Mean:正态分布的平均值;

Standard_dev:正态分布的标准差;

Cumulative:取值为逻辑值,即False或True,决定了函数的形式当为True时,函数结果为累积分布

当为False时,函数结果为 概率密度

NORMDIST(180,1795,3697,0)=01069

statsnormpdf(x, mu, sigma)

返回参数为 和    的正态分布密度函数在x处的值

from scipy import stats

mu = 1795

sigma = 3697

x = 180

prob = statsnormpdf(x, mu, sigma)

print(prob)

常用于文本分类,文本过滤、情感预测、推荐系统等,尤其是对于英文等语言来说,分类效果很好

准备阶段,需要确定特征属性,属性值以及label => 训练集

训练阶段,输入是特征属性和训练样本,输出是分类器,主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率

应用阶段,使用分类器对新数据进行分类

sklearn工具使用:

高斯朴素贝叶斯:特征变量是连续变量,符合高斯分布(正太分布),比如说人的身高,物体的长度

GaussianNB(priors=None) #模型创建

priors,先验概率大小,如果没有给定,模型则根据样本数据自己计算(利用极大似然法)

查看模型对象的属性:

class_prior_:每个样本的概率

class_count_:每个类别的样本数量

theta_:每个类别中每个特征的均值

sigma_:每个类别中每个特征的方差

多项式朴素贝叶斯:特征变量是离散变量,符合多项分布,在文档分类中特征变量体现在一个单词出现的次数,或者是单词的TF-IDF值等

MultinomialNB(alpha=10, fit_prior=True, class_prior=None)

alpha:先验平滑因子,默认等于1,当等于1时表示拉普拉斯平滑

fit_prior:是否去学习类的先验概率,默认是True

class_prior:各个类别的先验概率,如果没有指定,则模型会根据数据自动学习, 每个类别的先验概率相同,即类别数N分之一

模型对象的属性:

class_count_: 训练样本中各类别对应的样本数

feature_count_: 每个类别中各个特征出现的次数

伯努利朴素贝叶斯:特征变量是布尔变量,符合0/1分布,在文档分类中特征是单词是否出现

BernoulliNB(alpha=10, fit_prior=True, class_prior=None)

alpha:平滑因子,与多项式中的alpha一致

fit_prior:是否去学习类的先验概率,默认是True

class_prior:各个类别的先验概率,如果没有指定,则模型会根据数据自动学习, 每个类别的先验概率相同,即类别数N分之一

模型对象的属性:

class_count_: 训练样本中各类别对应的样本数

feature_count_: 每个类别中各个特征出现的次数

# MNIST手写数字分类(多种分类方法)

# 分割数据,将25%的数据作为测试集,其余作为训练集

train_x, test_x, train_y, test_y = train_test_split(data, digitstarget, test_size=025, random_state=33)

# 创建LR分类器

model = LogisticRegression()

modelfit(train_x, train_y)

predict_y=modelpredict(test_x)

print('LR准确率: %04lf' % accuracy_score(predict_y, test_y))

# 创建GaussianNB分类器

model = GaussianNB()

modelfit(train_x, train_y)

predict_y=modelpredict(test_x)

print('GaussianNB准确率: %04lf' % accuracy_score(predict_y, test_y))

# 创建MultinomialNB分类器

model = MultinomialNB()

modelfit(train_x, train_y)

predict_y=modelpredict(test_x)

print('MultinomialNB准确率: %04lf' % accuracy_score(predict_y, test_y))

# 创建BernoulliNB分类器

model = BernoulliNB()

modelfit(train_x, train_y)

predict_y=modelpredict(test_x)

print('BernoulliNB准确率: %04lf' % accuracy_score(predict_y, test_y))

根据训练的结果选择最接近的方案

以上就是关于python scikit-learn 有什么算法全部的内容,包括:python scikit-learn 有什么算法、朴素贝叶斯概率模型在使用前可以进行特征融合吗、易企秀时间轴怎么弄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9750616.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存