- 3. 练习:监督分类示例
- 7. 地形数据分类:坡度和颠簸度
- 13. 从散点图到决策面
- 18. GaussianNB使用示例
- 19. 有关地形数据的GaussianNB 部署
- 20. 计算 GaussianNB 准确性
- 23. 贝叶斯定理
- 24. 练习: 癌症测试
- 28. 规范化
- 30. 贝叶斯规则图
- 31. 用于分类的贝叶斯规则
- 33. 后验概率
- 35. 为什么叫做朴素贝叶斯
- 41. 迷你项目 - 准备工作
- 42. 作者身份准确率
- 98. 参考
- 99. 术语
3. 练习:监督分类示例
- 监督分类
又称训练场地法、训练分类法,是以建立统计识别函数为理论基础、依据典型样本训练方法进行分类的技术,即根据已知训练区提供的样本,通过选择特征参数,求出特征参数作为决策规则,建立判别函数以对各待分类影像进行的图像分类,是模式识别的一种方法。
- 非监督分类
指人们事先对分类过程不施加任何的先验知识,而仅凭数据(遥感影像地物的光谱特征的分布规律),即自然聚类的特性,进行“盲目”的分类。
银行数据中寻找欺诈,以及学生分组属于分监督分类。
7. 地形数据分类:坡度和颠簸度
地形数据常用来进行速度的控制。
13. 从散点图到决策面
本课就是希望通过朴素贝叶斯方法,找到这个决策面。
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
### your code goes here!
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.
Here's your output:
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. 练习: 癌症测试
示例: 得癌症的几率是0.01,另外癌症的情况下阳性的概率是0.9,如果不是癌症是阴性的概率是0.9. 某个人的测试结果是阳性,请问其为癌症的概率是多少?
- 贝叶斯规则
先验概率 * 测试得到的结论 => 后验概率
小圆圈表示癌症,大圆圈表示阳性,中间重叠部分表示阳性且癌症,所以在阳性下得癌症的几率是 0.009 / (0.009 + 0.099) = 0.0833
。
如果根据贝叶斯定理进行计算的话:
# 已知
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
30. 贝叶斯规则图
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. 迷你项目 - 准备工作
- cmd中安装
pip install scikit-learn
和pip install nltk
C:\python2.7
中打开python2.7,使用import sklearn
和import nltk
确定是否import成功- 下载
https://github.com/udacity/ud120-projects.git
,基础代码包含所有迷你项目的初始代码。 - 进入 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. 作者身份准确率
在 naive_bayes/nb_author_id.py 中创建和训练朴素贝叶斯分类器,用其为测试集进行预测。准确率是多少?
#########################################################
### 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
98. 参考
99. 术语
supervised classification
: 监督分类emulate
:模仿