资源简介
资源中包含完整的C4.5决策树算法Python代码和测试数据,其中有4个文件:C45.py是算法的实现代码,treePlotter.py是绘制决策树代码,PlayData.txt是样本数据,C45test.py用来构建、绘制并测试决策树,您可以运行该文件来依次进行决策树的构建、剪枝、绘制树型图,并对测试样本进行分类。
代码片段和文件信息
# -*- coding: cp936 -*-
from math import log
import operator
import os
import re
from numpy import inf
import copy
# 计算信息熵
def calcShannonEnt(dataSet labelIndex):
# type: (list) -> float
numEntries = 0 # 样本数(按权重计算)
labelCounts = {}
for featVec in dataSet: # 遍历每个样本
if featVec[labelIndex] != ‘N‘:
weight = float(featVec[-2])
numEntries += weight
currentLabel = featVec[-1] # 当前样本的类别
if currentLabel not in labelCounts.keys(): # 生成类别字典
labelCounts[currentLabel] = 0
labelCounts[currentLabel] += weight # 数据集的倒数第二个值用来标记样本权重
shannonEnt = 0.0
for key in labelCounts: # 计算信息熵
prob = float(labelCounts[key]) / numEntries
shannonEnt = shannonEnt - prob * log(prob 2)
return shannonEnt
def splitDataSet(dataSet axis value LorR=‘N‘):
“““
type: (list int string or float string) -> list
划分数据集
axis:按第几个特征划分
value:划分特征的值
LorR: N 离散属性; L 小于等于value值; R 大于value值
“““
retDataSet = []
featVec = []
if LorR == ‘N‘: # 离散属性
for featVec in dataSet:
if featVec[axis] == value:
reducedFeatVec = featVec[:axis]
reducedFeatVec.extend(featVec[axis + 1:])
retDataSet.append(reducedFeatVec)
elif LorR == ‘L‘:
for featVec in dataSet:
if featVec[axis] != ‘N‘:
if float(featVec[axis]) < value:
retDataSet.append(featVec)
elif LorR == ‘R‘:
for featVec in dataSet:
if featVec[axis] != ‘N‘:
if float(featVec[axis]) > value:
retDataSet.append(featVec)
return retDataSet
def splitDataSetWithNull(dataSet axis value LorR=‘N‘):
“““
type: (list int string or float string) -> list
划分数据集
axis:按第几个特征划分
value:划分特征的值
LorR: N 离散属性; L 小于等于value值; R 大于value值
“““
retDataSet = []
nullDataSet = []
featVec = []
totalWeightV = calcTotalWeight(dataSet axis False) # 非空样本权重
totalWeightSub = 0.0
if LorR == ‘N‘: # 离散属性
for featVec in dataSet:
if featVec[axis] == value:
reducedFeatVec = featVec[:axis]
reducedFeatVec.extend(featVec[axis + 1:])
retDataSet.append(reducedFeatVec)
elif featVec[axis] == ‘N‘:
reducedNullVec = featVec[:axis]
reducedNullVec.extend(featVec[axis + 1:])
nullDataSet.append(reducedNullVec)
elif LorR == ‘L‘:
for featVec in dataSet:
if featVec[axis] != ‘N‘:
if float(featVec[axis]) < value:
retDataSet.append(featVec)
elif featVec[axis] == ‘N‘:
nullDataSet.append(featVec)
elif LorR == ‘R‘:
for featVec in dataSet:
if featVec[axis] != ‘N‘:
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 23623 2018-12-09 22:57 C4.5决策树\C45.py
文件 1186 2018-12-09 23:31 C4.5决策树\C45test.py
文件 393 2018-12-04 22:19 C4.5决策树\PlayData.txt
文件 5610 2018-12-04 22:48 C4.5决策树\treePlotter.py
目录 0 2018-12-09 23:31 C4.5决策树
----------- --------- ---------- ----- ----
30812 5
- 上一篇:python音乐播放+滤波器
- 下一篇:spider_LOL.py
相关资源
- python音乐播放+滤波器
- 树莓派利用python、opencv、PyALPR识别车
- python 数独游戏源码
- 爬取某块区域的实时交通态势数据,
- Anaconda3-5.3.1-Windows-x86_64 (Python3.x版本
- DS_Store文件泄漏利用python脚本
- ArcGIS10.1中利用python语言批量实现遥感
- 用自己的数据制作python版本cifar10数据
- python遗传算法求函数极值.py
- Python教程.rar
- python数据挖掘分类聚类回归关联算法
- Python爬虫源码—爬取猫途鹰官方旅游
- 密度聚类(Density peaks Clustering)Pyth
- python摄像头视频显示到TK窗口
- 国际麻将AI-根据向听数计算最优操作
- 爬取瓜子二手车.py
- 人脸识别UI Pythone+pyq5+opencv 多线程模式
- pcap-1.1.win32-py2.7.exe
- Python制作的汉诺塔演示小脚本
- python django+bootstrap实现用户管理系统
- python+MySQL+bootstrap+ajax项目
- 基于Python的双路视频传输及双显示系
- python模型restful接口
- Python3—EM&GMM;
- python+numpy实现自适应阈值分割函数O
- python+numpy实现均值滤波
- python代码实现录音
- 初学者练习python编程的100个小程序
- python入门到实践 外星人入侵项目代码
- 合并BN层的python脚本
评论
共有 条评论