没有合适的资源?快使用搜索试试~ 我知道了~
首页python实现决策树C4.5算法详解(在ID3基础上改进)
一、概论 C4.5主要是在ID3的基础上改进,ID3选择(属性)树节点是选择信息增益值最大的属性作为节点。而C4.5引入了新概念“信息增益率”,C4.5是选择信息增益率最大的属性作为树节点。 二、信息增益 以上公式是求信息增益率(ID3的知识点) 三、信息增益率 信息增益率是在求出信息增益值在除以。 例如下面公式为求属性为“outlook”的值: 四、C4.5的完整代码 from numpy import * from scipy import * from math import log import operator #计算给定数据的香浓熵: def calcShannonEnt(
资源详情
资源评论
资源推荐

python实现决策树实现决策树C4.5算法详解算法详解(在在ID3基础上改进基础上改进)
一、概论一、概论
C4.5主要是在ID3的基础上改进,ID3选择(属性)树节点是选择信息增益值最大的属性作为节点。而C4.5引入了新概念“信息
增益率”,C4.5是选择信息增益率最大的属性作为树节点。
二、信息增益二、信息增益
以上公式是求信息增益率(ID3的知识点)
三、信息增益率三、信息增益率
信息增益率是在求出信息增益值在除以 。
例如下面公式为求属性为“outlook”的 值:
四、四、C4.5的完整代码的完整代码
from numpy import *
from scipy import *
from math import log
import operator
#计算给定数据的香浓熵:
def calcShannonEnt(dataSet):
numEntries = len(dataSet)
labelCounts = {} #类别字典(类别的名称为键,该类别的个数为值)
for featVec in dataSet:
currentLabel = featVec[-1] if currentLabel not in labelCounts.keys(): #还没添加到字典里的类型
labelCounts[currentLabel] = 0;
labelCounts[currentLabel] += 1;
shannonEnt = 0.0
for key in labelCounts: #求出每种类型的熵
prob = float(labelCounts[key])/numEntries #每种类型个数占所有的比值
shannonEnt -= prob * log(prob, 2)
return shannonEnt; #返回熵
#按照给定的特征划分数据集
def splitDataSet(dataSet, axis, value):
retDataSet = [] for featVec in dataSet: #按dataSet矩阵中的第axis列的值等于value的分数据集
if featVec[axis] == value: #值等于value的,每一行为新的列表(去除第axis个数据)
reducedFeatVec = featVec[:axis] reducedFeatVec.extend(featVec[axis+1:])
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0