python实现ID3

python实现ID3

具体的决策树原理在此就不再赘述,可自行百度或者看我之前写的:https://blog.youkuaiyun.com/weixin_38273255/article/details/88752468
在这里主要列出我使用的代码,和一些学习时候的心得。

心得

代码在网上其实都有一大片一大片的,但是自己觉得不太符合自己想要的要求,所以就找了网上的代码,并做了一些修改。很多地方肯定会有毛病,还望见谅。
我想要的是能够对连续型数据做处理,但是ID3是对离散型数据做处理,网上的示例代码也是如此,之前在学习原理的时候看到说可以对连续数据做离散处理:

  • 对连续数据排序
  • 将排好的序列等分(让每个区间落入的数据量基本一致)
  • 重新对区间赋值
  • 离散化完成

可能这个也存在问题,但是就这么实现了。

代码
  1. 导入数据
  2. 对数据离散化
  3. 创建决策树
  4. 绘制决策树图像
  5. 输入测试集测试

下下面就列出我的代码,代码主要是对iris数据集做出了处理,其他数据集可自行修改。
main.py

# -*- coding: utf-8 -*-
import creat as ct
import draw as dr
import yanzheng as yz
from sklearn import datasets
import numpy as np 
import lisanhua as lsh
import random

#加载iris数据集
iris = datasets.load_iris()
all_data = iris.data[:,:]
all_target = iris.target[:]
labels = iris.feature_names[:]

#常量定义
n = 150#数据集总数
m = int(n*2/3)#创建用的数据量
q = 4#数据维度
l = 7#离散化个数

#对数据离散化
a = []
all_data,a = lsh.lsh(all_data,l)

#将target和数据合并
all_data = all_data.tolist()
all_target = all_target.tolist()
for i in range(len(all_target)):
	all_data[i].append(all_target[i])

#将数据打乱
random.shuffle(all_data)

#创建决策树数据集
cj_data = all_data[:m]

#创建决策树
myTree=ct.createTree(cj_data,labels)

#创建验证数据集
all_data = np.array(all_data)#转化为numpy
yz_target = np.array(all_data[m:n,q:q+1])
yz_data = np.array(all_data[m:n,:q])
yz_labels = np.array(iris.feature_names[:])

#验证决策树正确率
yz_shu = yz.yanzheng(myTree,yz_data,yz_labels,yz_target)
yz_bfb = float(yz_shu)/(n-m)

#结果反馈
print(myTree
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值