栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

一个小栗子

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

在此基础上构建出的决策树

信息熵

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

下面是一个计算信息熵的例子

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算法

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934805.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号