• 监督分类

• 非监督分类

# 18. 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)
GaussianNB(priors=None)

# 预测结果
>>> print(clf.predict([[-0.8, -1]]))
[1]

# 19. 有关地形数据的GaussianNB 部署

def classify(features_train, labels_train):
### import the sklearn module for GaussianNB
### create classifier
### fit the classifier on the training features and labels
### return the fit classifier

from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
clf.fit(features_train,labels_train)
return clf

# 20. 计算 GaussianNB 准确性

def NBAccuracy(features_train, labels_train, features_test, labels_test):
""" compute the accuracy of your Naive Bayes classifier """
### import the sklearn module for GaussianNB
from sklearn.naive_bayes import GaussianNB

### create classifier
clf = GaussianNB()

### fit the classifier on the training features and labels
clf.fit(features_train,labels_train)

### use the trained classifier to predict labels for the test features
pred = clf.predict(features_test)

### calculate and return the accuracy on the test data
### this is slightly different than the example,
### where we just print the accuracy
### you might need to import an sklearn module

from sklearn.metrics import accuracy_score

accuracy = accuracy_score(labels_test, pred)
return accuracy

Good job! Your output matches our solution.
0.884

# 23. 贝叶斯定理

 贝叶斯定理之所以有用，是因为我们在生活中经常遇到这种情况：我们可以很容易直接得出P(B A)，P(A B)则很难直接得出，但我们更关心P(A B)，贝叶斯定理就为我们打通从P(B A)获得P(A B)的道路。 (P(A B)表示事件B已经发生的前提下，事件A发生的概率，叫做事件B发生下事件A的条件概率)

# 24. 练习: 癌症测试

• 贝叶斯规则

# 已知
P(C) = 0.01
P(P|C) = 0.9
P(N|not C) = 0.9

# 贝叶斯定理
P(P|C) = P(C|P)*P(P) / P(C)

# 要计算P(C|P)，需要先求解P(P)，即阳性的概率，其计算依据下图的公式
P(P) = P(C)*P(P|C) + P(not C)*P(P|not C) = 0.01*0.9 + 0.99*(1-0.9) = 0.09 + 0.099 = 0.108

# 将已知概率和求解出来的概率代入，得到阳性下癌症的概率
0.9 = P(C|P) * 0.108 /0.01

P(C|P) = 0.009/0.108 = 0.0833

# 28. 规范化

• 0.009 / 0.108 = 0.0833
• 0.099 / 0.108 = 0.9167

# 31. 用于分类的贝叶斯规则

CHRIS = 0.1 * 0.1 * 0.5 = 0.005
SARA = 0.3 * 0.3 * 0.5 = 0.03

# 33. 后验概率

P(CHRIS | "LIFE DEAL") = P("LIFE DEAL" | CHRIS)*P(CHRIS) / P("LIFE DEAL")

= P("LIFE DEAL" | CHRIS)*P(CHRIS) / P("LIFE DEAL" | CHRIS)*P(CHRIS) + P("LIFE DEAL" | SARA)*P(SARA)

= 0.08*0.5 / (0.08*0.5 + 0.06*0.5)

= 0.04 / 0.07 =  0.57

P(CHRIS |"LOVE DEAL") = P("LOVE DEAL" | CHRIS)*P(CHRIS) / P("LOVE DEAL")

= P("LOVE DEAL" | CHRIS)*P(CHRIS) / P("LOVE DEAL" | CHRIS)*P(CHRIS) + P("LOVE DEAL" | SARA)*P(SARA)

= 0.08*0.5 / (0.08*0.5 + 0.1*0.5)

= 0.04 / 0.09 =  0.44

# 35. 为什么叫做朴素贝叶斯

Label A和Lable B中，有每个词出现的频率，给定一段文字，计算各个单词出现的概率，比较大小。 在这个概率的计算中，没有考虑单词的顺序，所以叫做朴素贝叶斯。

# 41. 迷你项目 - 准备工作

1. cmd中安装 pip install scikit-learnpip install nltk
2. C:\python2.7中打开python2.7,使用import sklearnimport nltk确定是否import成功
3. 下载https://github.com/udacity/ud120-projects.git，基础代码包含所有迷你项目的初始代码。
4. 进入 tools/ 目录，运行 startup.py。（cmd中操作，需要将python2.7设定为默认python环境，如果要将python环境还原为python3,在环境变量的Path中将python2.7的路径删除），运行比较耗时。
E:\udacity\32-ML\ud120-projects-master\tools>python startup.py

checking for nltk
checking for numpy
checking for scipy
checking for sklearn
...

# 42. 作者身份准确率

#########################################################
### your code goes here ###
from sklearn.naive_bayes import GaussianNB

# 创建分类器
clf = GaussianNB()

t0 = time()
# 训练分类器
clf.fit(features_train,labels_train)
print "fit training time:", round(time()-t0, 3), "s"

t0 = time()
# 使用分类器预测
pred = clf.predict(features_test)
print "predict training time:", round(time()-t0, 3), "s"

from sklearn.metrics import accuracy_score

# 计算精度
accuracy = accuracy_score(labels_test, pred)

print accuracy

#########################################################
• 得到结果为:
no. of Chris training emails: 7936
no. of Sara training emails: 7884
fit training time: 1.151 s
predict training time: 0.157 s
0.973265073948

# 99. 术语

• supervised classification: 监督分类
• emulate:模仿