使用决策树预测隐形眼镜类型
说明:
将数据集文件 ‘lenses.txt’ 放在当前文件夹
from math import log
import operator
熵的定义
"""
这部分是在用代码计算香农熵公式,即用代码写公式并计算结果
"""
def calcShannonEnt(dataSet):
#数据集行数
numEntries = len(dataSet)
#创建空字典记录yes or no的次数
labelCounts = {
}
#开始用循环语句统计标签频数,该思路和KNN算法是一样的
#the the number of unique elements and their occurance
for featVec in dataSet:
currentLabel = featVec[-1]
if currentLabel not in labelCounts.keys():
labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1
#初始值是0,然后根据公式,用循环语句开始计算
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:
if featVec[axis] == value:
#去掉axis特征
reducedFeatVec = featVec[:axis]
reducedFeatVec.extend(featVec[axis+1:])
retDataSet.append(reducedFeatVec)
return retDataSet