贝叶斯
条件概率
乘法定理
全概率公式
贝叶斯公式
贝叶斯分类
朴素贝叶斯分类
例题:
决策树
信息熵与信息增益
信息熵:表示信息的复杂程度,例如集合A={1,1,1,2,2}和集合B={1,2,3,4,5}相比,集合A的熵更小。
信息增益:是在划分数据集前后信息熵的差值。
决策树的过程
根节点
1、计算赖床信息熵
p(赖床)=8/12. p(不赖床)=4/12.
H(赖床)=-(p(赖床)*log2(p(赖床))+p(不赖床) *log2(p(不赖床)))=0.89
2、计算每个属性(季节、时间已过 8 点、风力情况)的信息熵
3、同样的计算方法:
H(季节)=0.56 H(是否过8点)=0.748
4、信息增益是上一步的信息熵减去选定属性的信息熵
信息增益 g(风力情况) = H(赖床) - H(风力情况) =0.89-0.801=0. 089
信息增益 g(是否过8点) =?
信息增益 g(季节) = ?
5、选取信息增益最大的那个作为根节点:季节
挑选新的节点
构建完整的树
总结
KNN(k近邻)
流程
1、计算已知类别数据集中的点与当前点之间的距离
2、按距离递增次序排序
3、选取与当前点距离最小的k个点
4、统计前k个点所在的类别出现的频率
5、返回前k个点出现频率最高的类别作为当前点的预测分类
K值的选择
在应用中,K值一般取一个比较小的数值,通常采用交叉验证法来选取最优的K值。
交叉验证法:将数据集划分为 N个大小相似的互斥子集,并且尽量保证每个子集数据分布的一致性。这样,就可以获取 N组训练 - 测试集,从而进行 N 次训练和测试。
应用
电影分类
import math
movie_data = {"宝贝当家": [45, 2, 9, "喜剧片"],
"美人鱼": [21, 17, 5, "喜剧片"],
"澳门风云3": [54, 9, 11, "喜剧片"],
"功夫熊猫3": [39, 0, 31, "喜剧片"],
"谍影重重": [5, 2, 57, "动作片"],
"叶问3": [3, 2, 65, "动作片"],
"伦敦陷落": [2, 3, 55, "动作片"],
"我的特工爷爷": [6, 4, 21, "动作片"],
"奔爱": [7, 46, 4, "爱情片"],
"夜孔雀": [9, 39, 8, "爱情片"],
"代理情人": [9, 38, 2, "爱情片"],
"新步步惊心": [8, 34, 17, "爱情片"]}
# 测试样本 唐人街探案": [23, 3, 17, "?片"]
#下面为求与数据集中所有数据的距离代码:
x = [23, 3, 17]
KNN = []
for key, v in movie_data.items():
d = math.sqrt((x[0] - v[0]) ** 2 + (x[1] - v[1]) ** 2 + (x[2] - v[2]) ** 2)
KNN.append([key, round(d, 2)])
# 输出所用电影到 唐人街探案的距离
print(KNN)
#按照距离大小进行递增排序
KNN.sort(key=lambda dis: dis[1])
#选取距离最小的k个样本,这里取k=5;
KNN=KNN[:5]
print(KNN)
#确定前k个样本所在类别出现的频率,并输出出现频率最高的类别
labels = {"喜剧片":0,"动作片":0,"爱情片":0}
for s in KNN:
label = movie_data[s[0]]
labels[label[3]] += 1
labels =sorted(labels.items(),key=lambda l: l[1],reverse=True)
print(labels,labels[0][0],sep='\n')