条件概率

​ 设A,B是两个事件,且P(B)>0,则在事件B发生的条件下,事件A发生的条件概率(conditional probability)为:

                 P(A|B)=P(AB)/P(B)

分析:一般说到条件概率这一概念的时候,事件A和事件B都是同一实验下的不同的结果集合,事件A和事件B一般是有交集的,若没有交集(互斥),则条件概率为0

乘法公式

​ 1.由条件概率公式得:

                   P(AB)=P(A|B)P(B)=P(B|A)P(A)    

         上式即为乘法公式;

     2.乘法公式的推广:对于任何正整数n≥2,当P(A1A2...An-1) > 0 时,有:

             P(A1A2...An-1An)=P(A1)P(A2|A1)P(A3|A1A2)...P(An|A1A2...An-1)

全概率公式

​ 1. 如果事件组B1,B2,… 满足

​ 1.B1,B2….两两互斥,即 Bi ∩ Bj = ∅ ,i≠j , i,j=1,2,…,且P(Bi)>0,i=1,2,…;

​ 2.B1∪B2∪…=Ω ,则称事件组 B1,B2,…是样本空间Ω的一个划分

​ 设 B1,B2,…是样本空间Ω的一个划分,A为任一事件,则:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7sDVrU6b-1650255545301)(数据分析.assets/70.png)]

题1:

已知:各个A∩Bi的样本数、Bi的样本数,
求A的样本数 / 总样本数Ω?

题2:

已知:各个A∩Bi的概率、Bi的概率,
求A的概率?

贝叶斯公式

​ 1.与全概率公式解决的问题相反,贝叶斯公式是建立在条件概率的基础上寻找事件发生的原因(即大事件A已经发生的条件下,分割中的小事件Bi的概率),设B1,B2,…是样本空间Ω的一个划分,则对任一事件A(P(A)>0),有

上式即为贝叶斯公式(Bayes formula),Bi 常被视为导致试验结果A发生的”原因“,P(Bi)(i=1,2,…)表示各种原因发生的可能性大小,故称先验概率;P(Bi|A)(i=1,2…)则反映当试验产生了结果A之后,再对各种原因概率的新认识,故称后验概率

已知:各个A∩Bi的样本数、Bi的样本数,
求A∩B3的样本数 / A的样本数?

例子:发报台分别以概率0.6和0.4发出信号“∪”和“—”。由于通信系统受到干扰,当发出信号“∪”时,收报台分别以概率0.8和0.2受到信号“∪”和“—”;又当发出信号“—”时,收报台分别以概率0.9和0.1收到信号“—”和“∪”。求当收报台收到信号“∪”时,发报台确系发出“∪”的概率。

解析:贝叶斯这一概念,所探讨的问题,也是事件A和事件B都是某一实验的不同的结果集合,然后把事件B这个结果集合分为n小份,每一小份也是结果集合,只不过这些小集合一定位于B集合内部,每一小份结果集合称为Bi(i∈[1,n]),Bi之间两两互斥,所有Bi并起来就是B。
本例中,实验为“发一次报,收一次报,然后记录发、收的字符”,事件A为“收到了U”,事件B为"发出了信号",事件B1为“发出了U”,事件B2为“发出了—”,显然这里B1∪B2=B,B1∩B2=∅。要想求P(B1 | A),根据条件概率公式,P(B1 | A)=P(B1 A)/P(A),只要分别计算出分子分母就行了,显然分子可以用上面的乘法公式来求,分母为已知(若分母未知,就得用全概率公式来求)。

贝叶斯公式,根本不用记忆,其实就是条件概率、乘法公式、全概率公式的组合。

物理中的熵

熵也是物理中的一个概念。简单来说,如果一个系统中的粒子在运动过程中有很多可能的位置,那么这个系统具有比较高的熵值,反之,如果系统中的粒子处于静止状态(粒子的位置相对固定),则系统具有很低的熵值。

例如,水有三种状态:固液气,具有不同的熵值。冰中的分子位置固定,是一个稳定的状态,所以冰具有最低的熵值。水中的分子相对可以进行一些移动,所以水具有中间大小的熵值。水蒸气中的分子几乎可以移动到任何地方,所以水蒸气具有最大的熵值。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sgQ1dKbl-1650255545302)(数据分析.assets/image-20220405225550994.png)]

gini

基尼根据洛伦茨曲线提出的判断分配平等程度的指标

设实际收入分配曲线和收入分配绝对平等曲线之间的面积为A,实际收入分配曲线右下方的面积为B。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gEGdZXqB-1650255545303)(数据分析.assets/image-20220405221729245.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gTiiCfAD-1650255545304)(数据分析.assets/image-20220405221702966.png)]

基尼系数在0.2以下表示绝对平均;0.2-0.3之间表示比较平均;0.3-0.4之间表示较为合理;0.4-0.5之间表示差距较大;0.5以上说明收入差距悬殊。例如:依据全国城市住户调查收入分组资料,计算出的基尼系数1978年为0.16,1988年为0.23,2000年为0.32,

决策树

决策树是一个类似于人们决策过程的树结构,从根节点开始,每个分枝代表一个新的决策事件,会生成两个或多个分枝,每个叶子代表一个最终判定所属的类别

决策树生成

下面我们围绕第一步,说明如何生成决策树。有一个熵的概念,在决策树中需要用到类别熵(H©)以及特征条件熵(H(c|x)),同时在此基础上计算信息增益(G(x)),以决定决策树的生成。公式如下:

G(x) = H© - H(c|x)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5THpVkl7-1650255545305)(数据分析.assets/image-20220405224705444.png)]

特点:

  • -决策树是一种构建分类模型的非参数方法-

  • 不需要昂贵的的计算代价

  • -决策树相对容易解释

  • -决策树是学习离散值函数的典型代表

  • -决策数对于噪声的干扰具有相当好的鲁棒性

  • -冗余属性不会对决策树的准确率造成不利影响

  • -数据碎片问题:随着数的生长,可能导致叶结点记录数太少,对于叶结点代表的类,不能做出具有统计意义的判决

  • 子树可能在决策树中重复多次,使决策树过于复杂

  • -决策树无法学习特征之间的线性关系:特征构造

信息增益

算法

:ID3、C45、C50、CART…

实例

观影数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dWh2AsBp-1650255545309)(数据分析.assets/image-20220417220952149.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BTjgMITJ-1650255545310)(数据分析.assets/image-20220417221017025.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FeHGXHdp-1650255545311)(数据分析.assets/image-20220417232553133.png)]

  • 以信息增益来选择根节点
  • 剪枝来降低过拟合

[程序](D:\my_tool\OneDrive - xdd307\my_data\31数据处理\myClass\01决策树\id3\demo1.py)


from  sklearn.feature_extraction import DictVectorizer
from  sklearn import preprocessing
from sklearn import  tree
import csv


file_data=open('test.csv','rt')
reader=csv.reader(file_data)
# 表头信息
headers=next(reader)
print("[MYOUT]  headers:  "+str(headers))

feature_list=[]#特征集合
result_list=[] #电影是否被看
# ===============处理数据集合==========================
for row in reader:
    result_list.append(row[-1])
    #去掉首位两列,特征集中只保留'type ' , 'country ' , 'gross'
    feature_list.append(dict(zip(headers[1:-1],row[1:-1])))
print("[MYOUT]  result_list:  "+str(result_list))
print("[MYOUT]  feature_list:  "+str(feature_list))

vec = DictVectorizer()
# 将dict类型的list数据,转换成numpy array
dummyx = vec.fit_transform(feature_list).toarray() #扁平化处理
dummyY = preprocessing.LabelBinarizer().fit_transform(result_list)
#注意,dummgx是按首字母排序的'country 4' ,' gross 3 ', 'type 2'
print("[MYOUT]  dummyx:  "+str(dummyx))
print("[MYOUT]  dummyY:  "+str(dummyY))

clf=tree.DecisionTreeClassifier(criterion='entropy',random_state=0)
clf=clf.fit(dummyx,dummyY)
# print("[MYOUT]  clf:  "+str(clf))
print(clf)
# ================输出图形=========================
import pydotplus
dot_data=tree.export_graphviz(clf,
                              feature_names=vec.get_feature_names(),
                              filled=True,
                              rounded=True,
                              special_characters=True,
                              out_file=None
                              )
graph = pydotplus.graph_from_dot_data(dot_data)
# graph.write_pdf('film.pdf')

# ==================预测=======================
A = ([[0,0,0,1,0,1,0,1,0]])#日本(4)-低票房(2)-动画片(3))
# B = ([[0,0,1,0,0,1,0,1,0]])#法国(4)-低票房(2)-动画片(3)
# C =([[1,0,0,0,1,0,1,0,0]])#美国(4)-高票房(2)-动作片(3)#
predict_result=clf.predict(A)
print("[MYOUT]  predict_result:  "+str(predict_result))

Graphviz

Graphviz是AT&T Labs Research开发的结构化图形绘制工具,支持多种格式输出。它的输入是一个用dot语言编写的绘图脚本,通过对输入脚本的解析,分析出其中的点,边以及子图,然后根据属性进行绘制。因此可利用Graphviz可以将Sklearn生成dot格式的决策树可视化。

  • [软件位置](D:\my_tool\OneDrive - xdd307\my_tool\数据chuli\决策树\windows_10_cmake_Release_graphviz-install-3.0.0-win64.exe)
  • 添加到系统环境变量PATH

测试代码

 from sklearn.datasets import load_iris
 from sklearn import tree
 import pydotplus
  
 iris = load_iris()
 clf = tree.DecisionTreeClassifier()
 clf = clf.fit(iris.data, iris.target)
  
 dot_data = tree.export_graphviz(clf, out_file=None,
                          feature_names=iris.feature_names,
                          class_names=iris.target_names,
                          filled=True, rounded=True,
                          special_characters=True)
  
 graph = pydotplus.graph_from_dot_data(dot_data)
 graph.write_pdf('iris.pdf')

class_names=iris.target_names,
filled=True, rounded=True,
special_characters=True)

graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf(‘iris.pdf’)