机器学习10种经典算法的Python实现( 三 )

5、朴素贝叶斯
在预示变量间相互独立的前提下,根据 贝叶斯定理 可以得到朴素贝叶斯这个分类方法 。用更简单的话来说,一个朴素贝叶斯分类器假设一个分类的特性与该分类的其它特性不相关 。举个例子,如果一个水果又圆又红,并且直径大约是 3 英寸,那么这个水果可能会是苹果 。即便这些特性互相依赖,或者依赖于别的特性的存在,朴素贝叶斯分类器还是会假设这些特性分别独立地暗示这个水果是个苹果 。
朴素贝叶斯模型易于建造,且对于大型数据集非常有用 。虽然简单,但是朴素贝叶斯的表现却超越了非常复杂的分类方法 。
贝叶斯定理提供了一种从P(c)、P(x)和P(x|c) 计算后验概率 P(c|x) 的方法 。请看以下等式:

机器学习10种经典算法的Python实现

文章插图
 
在这里,
  • P ( c|x ) 是已知预示变量(属性)的前提下,类(目标)的后验概率
  • P ( c ) 是类的先验概率
  • P ( x|c ) 是可能性,即已知类的前提下,预示变量的概率
  • P ( x ) 是预示变量的先验概率
例子:让我们用一个例子来理解这个概念 。在下面,我有一个天气的训练集和对应的目标变量“Play” 。现在,我们需要根据天气情况,将会“玩”和“不玩”的参与者进行分类 。让我们执行以下步骤 。
步骤1:把数据集转换成频率表 。
步骤2:利用类似“当Overcast可能性为0.29时,玩耍的可能性为0.64”这样的概率,创造 Likelihood 表格 。
机器学习10种经典算法的Python实现

文章插图
 
步骤3:现在,使用朴素贝叶斯等式来计算每一类的后验概率 。后验概率最大的类就是预测的结果 。
问题:如果天气晴朗,参与者就能玩耍 。这个陈述正确吗?
我们可以使用讨论过的方法解决这个问题 。于是 P(会玩 | 晴朗)= P(晴朗 | 会玩)* P(会玩)/ P (晴朗)
我们有 P (晴朗 |会玩)= 3/9 = 0.33,P(晴朗) = 5/14 = 0.36, P(会玩)= 9/14 = 0.64
现在,P(会玩 | 晴朗)= 0.33 * 0.64 / 0.36 = 0.60,有更大的概率 。
朴素贝叶斯使用了一个相似的方法,通过不同属性来预测不同类别的概率 。这个算法通常被用于文本分类,以及涉及到多个类的问题 。
Python代码
#Import Libraryfrom sklearn.naive_bayes import GaussianNB#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset# Create SVM classification object model = GaussianNB() # there is other distribution for multinomial classes like Bernoulli Naive Bayes, Refer link# Train the model using the training sets and check scoremodel.fit(X, y)#Predict Outputpredicted= model.predict(x_test)6、KNN(K – 最近邻算法)
该算法可用于分类问题和回归问题 。然而,在业界内,K – 最近邻算法更常用于分类问题 。K – 最近邻算法是一个简单的算法 。它储存所有的案例,通过周围k个案例中的大多数情况划分新的案例 。根据一个距离函数,新案例会被分配到它的 K 个近邻中最普遍的类别中去 。
这些距离函数可以是欧式距离、曼哈顿距离、明式距离或者是汉明距离 。前三个距离函数用于连续函数,第四个函数(汉明函数)则被用于分类变量 。如果 K=1,新案例就直接被分到离其最近的案例所属的类别中 。有时候,使用 KNN 建模时,选择 K 的取值是一个挑战 。
更多信息:K – 最近邻算法入门(简化版)
机器学习10种经典算法的Python实现

文章插图
 
我们可以很容易地在现实生活中应用到 KNN 。如果想要了解一个完全陌生的人,你也许想要去找他的好朋友们或者他的圈子来获得他的信息 。
在选择使用 KNN 之前,你需要考虑的事情:
  • KNN 的计算成本很高 。
  • 变量应该先标准化(normalized),不然会被更高范围的变量偏倚 。
  • 在使用KNN之前,要在野值去除和噪音去除等前期处理多花功夫 。
Python代码
#Import Libraryfrom sklearn.neighbors import KNeighborsClassifier#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset# Create KNeighbors classifier object model KNeighborsClassifier(n_neighbors=6) # default value for n_neighbors is 5# Train the model using the training sets and check scoremodel.fit(X, y)#Predict Outputpredicted= model.predict(x_test)7、K 均值算法
K – 均值算法是一种非监督式学习算法,它能解决聚类问题 。使用 K – 均值算法来将一个数据归入一定数量的集群(假设有 k 个集群)的过程是简单的 。一个集群内的数据点是均匀齐次的,并且异于别的集群 。


推荐阅读