Udacity机器学习入门笔记1-朴素贝叶斯

Udacity机器学习入门笔记1-朴素贝叶斯

1.监督学习与非监督学习的区别

监督学习是从给定的训练数据集中学习出一个函数(模型参数),当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求包括输入输出,也可以说是特征和目标。
无监督学习是输入数据没有被标记,也没有确定的结果。样本数据类别未知,需要根据样本间的相似性对样本集进行分类(聚类,clustering)试图使类内差距最小化,类间差距最大化。

2.决策面

当决策面为直线的时候,我们称它为线性决策面
机器学习算法所做的是 获取数据->并将其转化成一个决策面(D.S)

3.朴素贝叶斯

朴素贝叶斯法(Naive Bayes)是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对给定的输入 x ,利用贝叶斯定理求出后验概率最大的输出 y 。朴素贝叶斯法是基于概率论的分类算法。

3.1 先验概率

先验概率(prior probability)是指根据以往经验和分析得到的概率。
假设某公园中一个人是男性为事件 Y=ymen ,是女性则是 Y=ywomen ;其中 P(Y=ymen)与P(Y=ywomen) 可以根据例子中“该公园中男女比例通常为 2:1 ” 这一以往经验求得:P(Y=ymen)= 2 3 \frac{2}{3} 以及 P(Y=ywomen)= 1 3 \frac{1}{3}

3.2 条件概率

条件概率是指在事件Y=y已经发生的条件下,事件X=x发生的概率。条件概率可表示为P(X=x| Y=y)。而条件概率计算公司为:
P ( X = x Y = y ) = P ( X = x , Y = y ) P ( Y = y ) P(X=x|Y=y) = \frac{P(X=x,Y=y)}{P(Y=y)}
其中 P(X=x,Y=y) 是联合概率,也就是两个事件共同发生的概率。而 P(Y=y)以及P(X=x) 是先验概率。

3.3 全概率公式

全概率公式是指:如果事件 Y=y1,Y=y2,…,Y=yn 可构成一个完备事件组,即它们两两互不相容,其和为全集。则对于事件 X=x 有:
P ( X = x ) = i = 1 n P ( Y = y i ) P ( X = x Y = y i ) P(X=x) = \sum_{i=1}^n{P(Y=y_i)P(X=x|Y=y_i)}

3.4后验概率

后验概率是指,某事件 X=x 已经发生,那么该事件是因为事件 Y=y 的而发生的概率。
后验概率的计算要以先验概率为基础。后验概率可以根据通过贝叶斯公式,用先验概率和似然函数计算出来。
贝叶斯公式如下:
P ( Y = y m e n X = x 1 ) = P ( X = x 1 Y = y m e n ) P ( Y = y m e n ) P ( X = x 1 ) = P ( X = x 1 Y = y m e n ) P ( Y = y m e n ) i = m e n , w o m e n P ( Y = y i ) P ( X = x 1 Y = y i ) P(Y=y_{men}|X=x_1) = \frac{P(X=x_1|Y=y_{men})P(Y=y_{men})}{P(X=x_1)}=\frac{P(X=x_1|Y=y_{men})P(Y=y_{men})}{\sum_{i={men,women}}P(Y=y_i)P(X=x_1|Y=y_i)}
其中 P ( Y = y m e n X = x 1 ) P(Y=y_{men}|X=x_1) 为所求后验概率 P ( X = x 1 Y = y m e n ) P(X=x_1|Y=y_{men}) 条件概率,P(Y=ymen) 为先验概率,P(X=x1)= i = m e n , w o m e n P ( Y = y i ) P ( X = x 1 Y = y i ) \sum_{i={men,women}}P(Y=y_i)P(X=x_1|Y=y_i) 全概率公式
朴素贝叶斯算法正是利用以上信息求解后验概率,并依据后验概率的值来进行分类。

3.5朴素贝叶斯的推导

对于样本集:
D = { ( x 1 ( 1 ) , x 2 ( 1 ) ,   , x n ( 1 ) , y 1 ) , ( x 1 ( 2 ) , x 2 ( 2 ) ,   , x n ( 2 ) , y 2 ) ,   , ( x 1 ( m ) , x 2 ( m ) ,   , x n ( m ) , y m ) } D=\{(x_1^{(1)},x_2^{(1)},\cdots,x_n^{(1)},y_1),(x_1^{(2)},x_2^{(2)},\cdots,x_n^{(2)},y_2),\cdots,(x_1^{(m)},x_2^{(m)},\cdots,x_n^{(m)},y_m)\}
其中 m 表示有 m 个样本, n 表示有 n 个特征。 y i y_i ,i=1,2,…,m 表示样本类别,取值为 {C1,C2,…,CK} 。
先验概率为:
P ( Y = C k ) , k = 1 , 2 , . . . , K P(Y=C_k),k=1,2,...,K
条件概率为(依据条件独立假设):
P ( X = x Y = C k ) = P ( X 1 = x 1 , X 2 = x 2 , , X n = x n Y = C k ) = j = 1 n P ( X j = x j Y = C k ) P(X=x|Y=C_k)=P(X_1=x_1,X_2=x_2,\ldots,X_n=x_n|Y=C_k)=\prod _{j=1}^nP(X_j=x_j|Y=C_k)
后验概率为:
P ( Y = C k X = x ) = P ( X = x Y = C k ) P ( Y = C k ) k P ( X = x Y = C k ) P ( Y = C k ) P(Y=C_k|X=x) = \frac{P(X=x|Y=C_k)P(Y=C_k)}{\sum_kP(X=x|Y=C_k)P(Y=C_k)}
条件概率公式带入得:
P ( Y = C k X = x ) = j = 1 n P ( X j = x j Y = C k ) P ( Y = C k ) k j = 1 n P ( X j = x j Y = C k ) P ( Y = C k ) P(Y=C_k|X=x) = \frac{\prod _{j=1}^nP(X_j=x_j|Y=C_k)P(Y=C_k)}{\sum_k\prod _{j=1}^nP(X_j=x_j|Y=C_k)P(Y=C_k)}
上式为朴素贝叶斯分类的基本公式。于是,朴素贝叶斯分类器可表示为:
P ( Y = C k X = x ) = a r g m a x C k j = 1 n P ( X j = x j Y = C k ) P ( Y = C k ) k j = 1 n P ( X j = x j Y = C k ) P ( Y = C k ) P(Y=C_k|X=x) =argmax_{C_k} \frac{\prod _{j=1}^nP(X_j=x_j|Y=C_k)P(Y=C_k)}{\sum_k\prod _{j=1}^nP(X_j=x_j|Y=C_k)P(Y=C_k)}
由于分母对所有的 C k C_k 都是相同的,所以:
P ( Y = C k X = x ) = a r g m a x C k j = 1 n P ( X j = x j Y = C k ) P ( Y = C k ) P(Y=C_k|X=x) =argmax_{C_k} {\prod _{j=1}^nP(X_j=x_j|Y=C_k)P(Y=C_k)}
a r g m a x C k argmax_{C_k} 表示取使后面式子最大的参数 C k C_k

3.6参数估计

3.6.1 极大似然估计

针对样本集我们可以利用极大似然估计计算出以下一些信息:
先验概率:
P ( Y = C k ) = i = 1 m I ( y i = C k ) m , k = 1 , 2 ,   , K P(Y=C_k) = \frac{\sum_{i=1}^m{I(y_i=C_k)}}{m},k=1,2,\cdots,K
其中 i = 1 m I ( y i = C k ) \sum_{i=1}^m{I(y_i=C_k)} 计算的是样本类别为 C k C_k 的总数。先验概率计算的是类别 C k C_k 在样本集中的频率。
条件概率:
P ( X j = a j l Y = C k ) = i = 1 m I ( x j ( i ) = a j l , y i = C k ) i = 1 m I ( y i = C k ) P(X_j=a_{jl}|Y=C_k) = \frac{\sum_{i=1}^m{I(x_j^{(i)}=a_{jl},y_i=C_k)}}{\sum_{i=1}^m{I(y_i=C_k)}}
其中第 j 个特征的取值可能是 { a j 1 , a j 2 , . . . , a j h a_{j1},a_{j2},...,a_{jh} } ,共 h 个。该条件概率指的是,在样本类别为 C k C_k 的子样本集中,第 j 个特征取值为 ajl 的样本的频率。

3.6.2 贝叶斯估计

为了弥补极大似然估计中可能出现概率值为0的情况(也就是某个事件出现的次数为0)。于是使用贝叶斯估计,如下:
先验概率
P ( Y = C k ) = i = 1 m I ( y i = C k ) + λ m + K λ , k = 1 , 2 ,   , K P(Y=C_k) = \frac{\sum_{i=1}^m{I(y_i=C_k)+\lambda}}{m+K\lambda},k=1,2,\cdots,K
其中 K 为类别的个数。
条件概率:
P ( X j = a j l Y = C k ) = i = 1 m I ( x j ( i ) = a j l , y i = C k ) + λ i = 1 m I ( y i = C k ) + S j λ P(X_j=a_{jl}|Y=C_k) = \frac{\sum_{i=1}^m{I(x_j^{(i)}=a_{jl},y_i=C_k)+\lambda}}{\sum_{i=1}^m{I(y_i=C_k)+S_j\lambda}}
其中 S j S_j 为特征 X j X_j 取值的个数 h 。

3.7 朴素贝叶斯算法过程

样本集:
D = { ( x 1 ( 1 ) , x 2 ( 1 ) ,   , x n ( 1 ) , y 1 ) , ( x 1 ( 2 ) , x 2 ( 2 ) ,   , x n ( 2 ) , y 2 ) ,   , ( x 1 ( m ) , x 2 ( m ) ,   , x n ( m ) , y m ) } D=\{(x_1^{(1)},x_2^{(1)},\cdots,x_n^{(1)},y_1),(x_1^{(2)},x_2^{(2)},\cdots,x_n^{(2)},y_2),\cdots,(x_1^{(m)},x_2^{(m)},\cdots,x_n^{(m)},y_m)\}
其中 y i y_i ,i=1,2,…,m 表示样本类别,取值为 { C 1 , C 2 , . . . , C K C_1,C_2,...,C_K } 。

  1. 计算先验概率:求出样本类别的个数 K 。对于每一个样本 Y= C k C_k ,计算出 P(Y= C k C_k ) 。其为类别 C k C_k 在总样本集中的频率。
  2. 计算条件概率:将样本集划分成 K 个子样本集,分别对属于 C k C_k 的子样本集进行计算,计算出其中特征 X j = a j l Xj=a_{jl} 的概率: P ( X j = a j l Y = C k ) P(Xj=a_{jl}|Y=C_k) 。其为该子集中特征取值为 a j l a_{jl} 的样本数与该子集样本数的比值。
  3. 针对待预测样本 x t e s t x^{test} ,计算其对于每个类别 C k C_k 后验概率 P ( Y = C k X = x t e s t ) = j = 1 n P ( X j = x j t e s t Y = C k ) P ( Y = C k ) P(Y=C_k|X=x^{test}) = {\prod _{j=1}^nP(X_j=x_j^{test}|Y=C_k)P(Y=C_k)} 。概率值最大的类别即为待预测样本的预测类别

4.Sklearn

4.1 naive_bayes GaussianNB 例子

import numpy as np
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
Y = np.array([1, 1, 1, 2, 2, 2])
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
clf.fit(X, Y)

print(clf.predict([[-0.8, -1]]))

clf_pf = GaussianNB()
clf_pf.partial_fit(X, Y, np.unique(Y))

print(clf_pf.predict([[-0.8, -1]]))

5.迷你project

5.1准备

检查你是否装有可用的 python,版本最好是 2.6 或 2.7(这是我们使用的版本 - 其他版本应该也可以,但我们不敢保证)。
我们会使用 pip 来安装一些包。首先,从此处获取并安装 pip
使用 pip 安装一系列 Python 包:
转到终端行界面(请勿打开 Python,只打开命令提示符)
安装 sklearn: pip install scikit-learn
此处包含 sklearn 安装说明,可供参考
安装自然语言工具包:pip install nltk
获取机器学习简介源代码。你将需要 git 来复制资源库:git clone https://github.com/udacity/ud120-projects.git
你只需操作一次,基础代码包含所有迷你项目的初始代码。进入 tools/ 目录,运行 startup.py。该程序首先检查 python 模块,然后下载并解压缩我们在后期将大量使用的大型数据集。下载和解压缩需要一些时间,但是你无需等到全部完成再开始第一部分。

5.2修改email_preprocess.py

由于sklearn版本变更修改tools/下email_preprocess.py

from sklearn import cross_validation 改成
from sklearn import model_selection

5.2代码实现

### your code goes here ###
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
t0 = time()
clf.fit(features_train,labels_train)
print "training time:", round(time()-t0,3),"s"
t0 = time()
pred =clf.predict(features_test)
print "predict time:", round(time()-t0,3),"s"

from sklearn.metrics import accuracy_score
accuracy = accuracy_score(labels_test,pred)
print accuracy

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/muyilove/article/details/89100333
今日推荐