监督学习是从给定的训练数据集中学习出一个函数(模型参数),当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求包括输入输出,也可以说是特征和目标。
无监督学习是输入数据没有被标记,也没有确定的结果。样本数据类别未知,需要根据样本间的相似性对样本集进行分类(聚类,clustering)试图使类内差距最小化,类间差距最大化。
当决策面为直线的时候,我们称它为线性决策面
机器学习算法所做的是 获取数据->并将其转化成一个决策面(D.S)
朴素贝叶斯法(Naive Bayes)是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对给定的输入 x ,利用贝叶斯定理求出后验概率最大的输出 y 。朴素贝叶斯法是基于概率论的分类算法。
先验概率(prior probability)是指根据以往经验和分析得到的概率。
假设某公园中一个人是男性为事件 Y=ymen ,是女性则是 Y=ywomen ;其中 P(Y=ymen)与P(Y=ywomen) 可以根据例子中“该公园中男女比例通常为 2:1 ” 这一以往经验求得:P(Y=ymen)= 2 3 \frac{2}{3} 32 以及 P(Y=ywomen)= 1 3 \frac{1}{3} 31。
条件概率是指在事件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,Y=y)
其中 P(X=x,Y=y) 是联合概率,也就是两个事件共同发生的概率。而 P(Y=y)以及P(X=x) 是先验概率。
全概率公式是指:如果事件 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)} P(X=x)=i=1∑nP(Y=yi)P(X=x∣Y=yi)
后验概率是指,某事件 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=ymen∣X=x1)=P(X=x1)P(X=x1∣Y=ymen)P(Y=ymen)=∑i=men,womenP(Y=yi)P(X=x1∣Y=yi)P(X=x1∣Y=ymen)P(Y=ymen)
其中 P ( Y = y m e n ∣ X = x 1 ) P(Y=y_{men}|X=x_1) P(Y=ymen∣X=x1)为所求后验概率, P ( X = x 1 ∣ Y = y m e n ) P(X=x_1|Y=y_{men}) P(X=x1∣Y=ymen)为条件概率,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) ∑i=men,womenP(Y=yi)P(X=x1∣Y=yi) 为全概率公式。
而朴素贝叶斯算法正是利用以上信息求解后验概率,并依据后验概率的值来进行分类。
对于样本集:
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)\} D={(x1(1),x2(1),⋯,xn(1),y1),(x1(2),x2(2),⋯,xn(2),y2),⋯,(x1(m),x2(m),⋯,xn(m),ym)}
其中 m 表示有 m 个样本, n 表示有 n 个特征。 y i y_i yi,i=1,2,…,m 表示样本类别,取值为 {C1,C2,…,CK} 。
先验概率为:
P ( Y = C k ) , k = 1 , 2 , . . . , K P(Y=C_k),k=1,2,...,K P(Y=Ck),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(X=x∣Y=Ck)=P(X1=x1,X2=x2,…,Xn=xn∣Y=Ck)=j=1∏nP(Xj=xj∣Y=Ck)
则后验概率为:
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=Ck∣X=x)=∑kP(X=x∣Y=Ck)P(Y=Ck)P(X=x∣Y=Ck)P(Y=Ck)
将条件概率公式带入得:
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=Ck∣X=x)=∑k∏j=1nP(Xj=xj∣Y=Ck)P(Y=Ck)∏j=1nP(Xj=xj∣Y=Ck)P(Y=Ck)
上式为朴素贝叶斯分类的基本公式。于是,朴素贝叶斯分类器可表示为:
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)} P(Y=Ck∣X=x)=argmaxCk∑k∏j=1nP(Xj=xj∣Y=Ck)P(Y=Ck)∏j=1nP(Xj=xj∣Y=Ck)P(Y=Ck)
由于分母对所有的 C k C_k Ck 都是相同的,所以:
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)} P(Y=Ck∣X=x)=argmaxCkj=1∏nP(Xj=xj∣Y=Ck)P(Y=Ck)
a r g m a x C k argmax_{C_k} argmaxCk表示取使后面式子最大的参数 C k C_k Ck。
针对样本集我们可以利用极大似然估计计算出以下一些信息:
先验概率:
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 P(Y=Ck)=m∑i=1mI(yi=Ck),k=1,2,⋯,K
其中 ∑ i = 1 m I ( y i = C k ) \sum_{i=1}^m{I(y_i=C_k)} ∑i=1mI(yi=Ck)计算的是样本类别为 C k C_k Ck的总数。先验概率计算的是类别 C k C_k Ck在样本集中的频率。
条件概率:
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)}} P(Xj=ajl∣Y=Ck)=∑i=1mI(yi=Ck)∑i=1mI(xj(i)=ajl,yi=Ck)
其中第 j 个特征的取值可能是 { a j 1 , a j 2 , . . . , a j h a_{j1},a_{j2},...,a_{jh} aj1,aj2,...,ajh} ,共 h 个。该条件概率指的是,在样本类别为 C k C_k Ck 的子样本集中,第 j 个特征取值为 ajl 的样本的频率。
为了弥补极大似然估计中可能出现概率值为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 P(Y=Ck)=m+Kλ∑i=1mI(yi=Ck)+λ,k=1,2,⋯,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}} P(Xj=ajl∣Y=Ck)=∑i=1mI(yi=Ck)+Sjλ∑i=1mI(xj(i)=ajl,yi=Ck)+λ
其中 S j S_j Sj 为特征 X j X_j Xj 取值的个数 h 。
样本集:
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)\} D={(x1(1),x2(1),⋯,xn(1),y1),(x1(2),x2(2),⋯,xn(2),y2),⋯,(x1(m),x2(m),⋯,xn(m),ym)}
其中 y i y_i yi,i=1,2,…,m 表示样本类别,取值为 { C 1 , C 2 , . . . , C K C_1,C_2,...,C_K C1,C2,...,CK} 。
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]]))
检查你是否装有可用的 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 模块,然后下载并解压缩我们在后期将大量使用的大型数据集。下载和解压缩需要一些时间,但是你无需等到全部完成再开始第一部分。
由于sklearn版本变更修改tools/下email_preprocess.py
from sklearn import cross_validation 改成
from sklearn import model_selection
### 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