集团站切换校区

验证码已发送,请查收短信

复制成功
微信号:togogoi
添加微信好友, 详细了解课程
已复制成功,如果自动跳转微信失败,请前往微信添加好友
打开微信
图标

业界新闻

当前位置:首页 > >业界新闻 > >

人工智能AI培训_机器学习之决策树算法

发布时间: 2019-10-26 10:14:39

人工智能AI培训_机器学习之决策树算法​​


1.    决策树简介

通俗来说,决策树分类的思想类似于找对象。现想象一个女孩的母亲要给这个女孩介绍男朋友,于是有了下面的对话:

女儿:多大年纪了?

母亲:26

女儿:长的帅不帅?

母亲:挺帅的。

女儿:收入高不?

母亲:不算很高,中等情况。

女儿:是公务员不?

母亲:是,在税务局上班呢。

女儿:那好,我去见见。

这个女孩的决策过程就是典型的分类树决策。相当于通过年龄、长相、收入和是否公务员对将男人分为两个类别:见和不见。假设这个女孩对男人的要求是:30岁以下、长相中等以上并且是高收入者或中等以上收入的公务员,那么这个可以用下图表示女孩的决策逻辑

图片.png

上图完整表达了这个女孩决定是否见一个约会对象的策略,其中绿色节点表示判断条件,橙色节点表示决策结果,箭头表示在一个判断条件在不同情况下的决策路径,图中红色箭头表示了上面例子中女孩的决策过程。

这幅图基本可以算是一颗决策树,说它“基本可以算”是因为图中的判定条件没有量化,如收入高中低等等,还不能算是严格意义上的决策树,如果将所有条件量化,则就变成真正的决策树了。

有了上面直观的认识,我们可以正式定义决策树了:

决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

可以看到,决策树的决策过程非常直观,容易被人理解。目前决策树已经成功运用于医学、制造产业、天文学、分支生物学以及商业等诸多领域。

2.    信息

能消除不确定性的内容才能叫信息,而告诉你一个想都不用想的事实,那不叫信息。比如数据分析师的工作经常是要用数据中发现信息,有一天上班你告诉老大从数据中发现我们的用户性别有男有女。。。(这不废话吗?)这不叫信息,但是如果你告诉老大女性用户的登录频次、加购率,浏览商品数量远高于男性,且年龄段在25~30岁的女性用户消费金额最多,15-20岁最少,那么我相信你老大会眼前一亮的!!!

如何衡量信息量?1948年有一位科学家香农从引入热力学中的熵概念,得到了信息量的数据公式:

图片.png

Pk代表信息发生的可能性,发生的可能性越大,概率越大,则信息越少,通常将这种可能性叫为不确定性,越有可能则越能确定则信息越少;比如中国与西班牙踢足球,中国获胜的信息量要远大于西班牙胜利(因为这可能性实在太低~~

3.    信息熵

信息熵则是在信息的基础上,将有可能产生的信息定义为一个随机变量,那么变量的期望就是信息熵,比如上述例子中变量是赢家,有两个取值,中国或西班牙,两个都有自己的信息,再分别乘以概率再求和,就得到了这件事情的信息熵,公式如下:

图片.png

条件熵的计算:

图片.png

4.    信息增益

信息增益是决策树中ID3算法中用来进行特征选择的方法,就是用整体的信息熵减掉以按某一特征分裂后的条件熵,结果越大,说明这个特征越能消除不确定性,最极端的情况,按这个特征分裂后信息增益与信息熵一模一样,那说明这个特征就能获得唯一的结果了。

特征A对训练数据集D的信息增益g(D,A),定义为集合D的信息熵H(D)与特征A给定条件下D的信息条件熵H(D|A)之差,即公式为:

图片.png

有以下数据,求出各个属性的信息增益:

图片.png

信息增益的计算

图片.png     

图片.png

5.    信息增益率

信息增益率是在信息增益的基础上,增加了一个关于选取的特征包含的类别的惩罚项,这主要是考虑到如果纯看信息增益,会导致包含类别越多的特征的信息增益越大,极端一点,有多少个样本,这个特征就有多少个类别,那么就会导致决策树非常浅。公式为:

图片.png

图片.png

6.    基尼系数

基尼系数也是一种衡量信息不确定性的方法,与信息熵计算出来的结果差距很小,基本可以忽略,但是基尼系数要计算快得多,因为没有对数,公式为:

图片.png

与信息熵一样,当类别概率趋于平均时,基尼系数越大

图片.png

当按特征A分裂时,基尼系数的计算如下:

图片.png

这是二分类时的基尼系数图像,与信息熵形状非常接近,从数据角度看,将信息熵在Pk=1处进行泰勒一阶展开,可以得到log2Pk≈1-Pk

图片.png

图片.png

图片.png

7.    泰坦尼克号案例

7.1. 案例描述

在泰坦尼克号和titanic2数据帧描述泰坦尼克号上的个别乘客的生存状态。在泰坦尼克号的数据帧不包含从剧组信息,但它确实包含了乘客的一半的实际年龄。关于泰坦尼克号旅客的数据的主要来源是百科全书Titanica。这里使用的数据集是由各种研究人员开始的。其中包括许多研究人员创建的旅客名单,由Michael A. Findlay编辑。

我们提取的数据集中的特征是票的类别,存活,乘坐班,年龄,登陆,home.dest,房间,票,船和性别。乘坐班是指乘客班(123),是社会经济阶层的代表。

其中age数据存在缺失。

根据以下数据来预测乘客生死

图片.png

7.2. 实现代码

import pandas as pd
  
from sklearn.ensemble import RandomForestClassifier
  
from sklearn.feature_extraction   import   DictVectorizer
  
from sklearn.model_selection   import   train_test_split,   GridSearchCV
  
from sklearn.tree import DecisionTreeClassifier,   export_graphviz
  
  
#决策树
  
def   decision():
      
"""
      
决策树对泰坦尼克号进行预测生死
      
:return: None
      """
      # 
获取数据
      
titan = pd.read_csv("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt")
      
处理数据,找出特征值和目标值
      
x = titan[['pclass''age''**']]
      y = titan[
'survived']
      
print(x)
      
缺失值处理,inplace代表替换
      
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编码处理,进行处理(特征工程)特征-》类别-one_hot编码
      
dict = DictVectorizer(sparse=False)
      
#x_train.to_dict(orient="records"):将每个样本变成字典
      
x_train =   dict.fit_transform(x_train.to_dict(orient="records"))
  
      
print(dict.get_feature_names())
      x_test = dict.transform(x_test.to_dict(
orient="records"))
      
print(x_train)
      
#用决策树进行预测
      
dec = DecisionTreeClassifier()
      dec.fit(x_train, y_train)
      
# dec.predict()
      # 
预测准确率
      
print("预测的准确率:", dec.score(x_test,   y_test))
      
return None
  
 

if __name__ == "__main__":
      decision ()

 

更多的技术内容,请访问腾科公司网站 www.togogo.net

上一篇: 人工智能AI培训_机器学习之集成学习算法

下一篇: 华为认证GaussDB数据库工程师正式发布!

在线咨询 ×

您好,请问有什么可以帮您?我们将竭诚提供最优质服务!