机器学习入门之决策树分类

决策树比较适合分析离散数据,如果是连续数据要先转成离散数据再做分析

一个小栗子

在这个例子中,我们通过一个人的各项属性来推断他是否会买电脑
在这里插入图片描述

在此基础上构建出的决策树
在这里插入图片描述

信息熵

信息熵越大,代表事物的不确定性越高

下面是一个计算信息熵的例子
请添加图片描述
请添加图片描述

ID3算法

决策树会选择最大化信息增益来对结点进行分类

下面是信息增益的计算,其中第一个式子就是信息熵
请添加图片描述

还是同样的例子,此时参数InfoA中的A=age,我们可以看到,14条数据中有五条age为youth,四条为middle_aged,五条为senior,所以式子分为三个部分,括号里的内容就是每条分别的信息熵,比如说age为youth中的人,有两个为no,三个为yes,我们就得出了Infoage中的第一个式子,后面两式子以此类推。
请添加图片描述
由此可见,age的信息增益最大,所以我们把age设为根节点,得到如下
请添加图片描述
连续变量的处理
请添加图片描述
其中,左侧为数据,右侧为每两个数据的平均值,现在假设我们认为大于23为青年,小于23为少年,并且经过计算,这样分类算出来的信息增益最大,我们便把本来连续型的数据变成了大于23和小于23的离散型数据。

python建立模型

import numpy as np
from sklearn.feature_extraction import DictVectorizer
from sklearn import tree
from sklearn import preprocessing
import csv#表单里都是字符,所以使用csv读取数据

#读取数据
Dtree=open("E:\\Temp\\tennis.csv","r")
reader=csv.reader(Dtree)

#获取第一行数据(表头)
headers=reader.__next__()
#print(headers)

#定义两个列表
featureList=[]#保存特征
labelList=[]#保存标签

for row in reader:
    #把label存入list(即no或者yes)
    labelList.append(row[-1])
    #创建一个空的字典
    rowDict={}
    for i in range(1,len(row)-1):
        # 建立一个数据字典
        rowDict[headers[i]]=row[i]
    #把数据字典存入list
    featureList.append(rowDict)
#print(featureList)

#机器不能分析字符,所以我们要把数据转换成01表示
vec=DictVectorizer()
x_data=vec.fit_transform(featureList).toarray()
print(str(x_data))

#打印属性名称(对应了上面01数据的每一列)
print(vec.get_feature_names_out())
#打印标签
print(str(labelList))

#把标签转化成01表示
lb=preprocessing.LabelBinarizer()
y_data=lb.fit_transform(labelList)
print(str(y_data))

#创建决策树模型
model=tree.DecisionTreeClassifier(criterion='entropy')#这个参数表示我们使用ID3算法
#输入数据建立模型
model.fit(x_data,y_data)

C4.5 算法

这个其实就是上面一种算法的改进,因为信息增益的方法倾向于首先选择因子数较多的变量,我们提出了增益率,SplitInfoA(D),并用信息增益除以增益率来改进ID3算法
请添加图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值