机器学习------决策树------泰坦尼克号生存案例

决策树是一种基本的分类方法,当然也可以用于回归,我们一般只讨论用于分类的决策树。决策树模型呈树形结构。在分类问题中,表示基于特征对实例进行分类的过程,他可以认为是if-then规则的集合。在决策树的结构中,每一个实例都被一条路径或则条规则所覆盖。通常决策树学习包括三个步骤:特征选择,决策树的生成和决策树的修剪
优点:计算复杂度不高,输出结果用于理解,对中间值的缺失不敏感,可以处理逻辑回归等不能解决的非线性的特征数据
缺点:可能产生过度匹配问题
使用数据类型:数值型和标称型
特征选择
特征选择在于选取对训练数据具有分类能力的特征。这样可以提高决策树学习的效率,如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的。经验上扔掉这样的特征对决策树学习的京都影响不大。通常特征选择的准则是信息增益,这是个数学概念。通过一个例子来了解特征选择的过程。
机器学习------决策树------泰坦尼克号生存案例_第1张图片
我们希望通过所给的训练数据学习一个贷款申请的决策树,用以对文莱的贷款申请进行分类,即当新的客户提出贷款申请是,根据申请人的特征利用决策树决定是否批准贷款申请。特征选择其实是决定用那个特征来划分特征空间。下图中分别是按照年龄,还有是否有工作来划分得到不同的子节点
在这里插入图片描述
机器学习------决策树------泰坦尼克号生存案例_第2张图片
机器学习------决策树------泰坦尼克号生存案例_第3张图片
问题是究竟选择哪个特征更好些呢?那么直观上,如果一个特征具有更好的分类能力,是的各个自己在当前的条件下有最好的分类,那么就更应该选择这个特征。信息增益就能很好的表示这一直观的准则。这样得到的一棵决策树只用了两个特征就进行了判断:
在这里插入图片描述

机器学习------决策树------泰坦尼克号生存案例_第4张图片
通过信息增益生成的决策树结构,更加明显、快速的划分类别。下面介绍scikit-learn中API的使用
信息的度量和作用(信息熵)
我们常说信息有用,那么它的作用如何客观、定量地体现出来呢?信息用途的背后是否有理论基础呢?这个问题一直没有很好的回答,直到1948年,香农在他的论文“通信的数学原理”中提到了“信息熵”的概念,才解决了信息的度量问题,并量化出信息的作用。

一条信息的信息量与其不确定性有着直接的关系,比如我们要搞清一件非常不确定的事,就需要大量的信息。相反如果对某件事了解较多,则不需要太多的信息就能把它搞清楚 。所以从这个角度看,可以认为,信息量就等于不确定的多少。那么如何量化信息量的度量呢?2022年举行世界杯,大家很关系谁是冠军。假如我错过了看比赛,赛后我问朋友 ,“谁是冠军”?他不愿意直接告诉我,让我每猜一次给他一块钱,他告诉我是否猜对了,那么我需要掏多少钱才能知道谁是冠军?我可以把球编上号,从1到32,然后提问:冠 军在1-16号吗?依次询问,只需要五次,就可以知道结果。所以谁是世界杯冠军这条消息只值五块钱。当然香农不是用钱,而是用“比特”这个概念来度量信息量。一个比特是 一位二进制数,在计算机中一个字节是8比特。

那么如果说有一天有64支球队进行决赛阶段的比赛,那么“谁是世界杯冠军”的信息量就是6比特,因为要多猜一次,有的同学就会发现,信息量的比特数和所有可能情况的对数函数log有关,(log32=5,log64=6)

另外一方面你也会发现实际上我们不需要猜五次就能才出冠军,因为像西班牙、巴西、德国、意大利这样的球队夺得冠军的可能性比南非、尼日利亚等球队大得多,因此第一次猜测时不需要把32支球队等分成两个组,而可以把少数几支最有可能的球队分成一组,把其他球队分成一组。然后才冠军球队是否在那几支热门队中。这样,也许三次就猜出结果。因此,当每支球队夺冠的可能性不等时,“谁是世界杯冠军”的信息量比5比特少。香农指出,它的准确信息量应该是:

H = -(p1logp1 + p2logp2 + … + p32log32)

其中,p1…p32为这三支球队夺冠的概率。H的专业术语称之为信息熵,单位为比特,当这32支球队夺冠的几率相同时,对应的信息熵等于5比特,这个可以通过计算得出。有一个特性就是,5比特是公式的最大值。那么信息熵(经验熵)的具体定义可以为如下:

H\left(X\right){=}\sum_{x\in{X}}P\left(x\right)logP\left(x\right)H(X)=∑​x∈X​​ P(x)logP(x)

案例
在这里插入图片描述
机器学习------决策树------泰坦尼克号生存案例_第5张图片
在这里插入图片描述
机器学习------决策树------泰坦尼克号生存案例_第6张图片
机器学习------决策树------泰坦尼克号生存案例_第7张图片

机器学习------决策树------泰坦尼克号生存案例_第8张图片

机器学习------决策树------泰坦尼克号生存案例_第9张图片

信息熵:用来描述系统信息量的不确定度。不确定性越大,则信息熵越大,反之,信息熵越小

信息增益:

信息增益的作用可以理解是从哪开始建立树根

自古以来,信息和消除不确定性是相联系的。所以决策树的过程其实是在寻找某一个特征对整个分类结果的不确定减少的过程。那么这样就有一个概念叫做信息增益(information gain)。

那么信息增益表示得知特征X的信息而是的类Y的信息的不确定性减少的程度,所以我们对于选择特征进行分类的时候,当然选择信息增益较大的特征,这样具有较强的分类能力。特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即公式为:

g\left({D,A}\right){=}H\left(D\right) {-} H\left(D|A\right)g(D,A)=H(D)−H(D∣A)

根据信息增益的准则的特征选择方法是:对于训练数据集D,计算其每个特征的信息增益,并比较它们的阿笑,选择信息增益最大的特征

信息增益的计算

在这里插入图片描述
特征A对训练数据集D的信息增益g(D,A),定义为集合D的信息熵H(D)与特征A给定条件下D的信息条件熵H(D|A)之差,即公式为:
在这里插入图片描述
注:信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度
机器学习------决策树------泰坦尼克号生存案例_第10张图片
机器学习------决策树------泰坦尼克号生存案例_第11张图片
机器学习------决策树------泰坦尼克号生存案例_第12张图片
机器学习------决策树------泰坦尼克号生存案例_第13张图片
泰坦尼克号生存预测案例

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.tree import DecisionTreeClassifier,export_graphviz
import pydotplus
titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')

#选取一些特征作为我们划分的依据
x = titanic[['pclass', 'age', 'sex']]
y = titanic['survived']
# print(x)
#缺失值处理
x['age'].fillna(x['age'].mean(), inplace=True)
#分割数据集到训练集合测试集
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25)
#进行处理(特征工程)特征-》类别-》one_hot编码
dict=DictVectorizer(sparse=False)
x_train = dict.fit_transform(x_train.to_dict(orient="records"))
print(dict.get_feature_names())
x_test = dict.fit_transform(x_test.to_dict(orient="records"))
# print(x_train)
#用决策树进行预测
dec=DecisionTreeClassifier()
dec.fit(x_train,y_train)
print("预测的准确率:",dec.score(x_test,y_test))
#导出决策树的结构
# export_graphviz(dec,out_file='./tree1.pdf',feature_names=['年龄', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', '女性', 'sex=male'])

dot_data = export_graphviz(dec, out_file=None)
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf("tree2.pdf")

生成的树状图形
机器学习------决策树------泰坦尼克号生存案例_第14张图片
放大的图形
机器学习------决策树------泰坦尼克号生存案例_第15张图片

你可能感兴趣的:(python,机器学习,决策树)