记录学习过程,每天学会一点点,早日玩转机器学习......(手动呵呵微笑)。
一.核心代码
1.数据集部分
上图为所给的海洋生物数据,则以1代表可以付出水面、有脚蹼;0代表无法浮出水面、无脚蹼;yes为属于鱼类、no为不属于鱼类
则创建数据集的代码可以表示为:
from math import log
"""
加载得到简单的鉴定鱼的数据集
"""
def createDataSet():
#根据所给的数据表构造数据集
dataSet = [[1,1,'yes'],
[1,1,'yes'],
[1,0,'no'],
[0,1,'no'],
[0,1,'no']]
labels = ['no surfacing','flippers']#两个标签:是否浮出水面、是否有蹼
return dataSet,labels
实例化测试一下结果:
myData,labels = createDataSet()
print(myData)
打印为:
2.计算香农熵的部分
前面几篇博客已经讲过香农熵的计算公式,下面用代码实现一下计算过程,其实无非就是用代码实现一下计算公式,仔细看就能看得懂,相关部分我也做了注释。记住,每一个键值都是记录当前类别在数据集中出现的次数,那一个if语句的意思就是:在遍历的过程中,如果这个键值不存在,就从这一步开始扩展它,记下来,如果存在,则把计数的参数更新一下,即做加一处理,留作下面计算概率。后面就接着计算每一个类别出现的概率,并使用这个概率去计算香农熵:
"""
计算香农熵
"""
def calShannonEnt(dataSet):
numEntries = len(dataSet)#长度
labelCounts = {}
#为所有可能类别创建字典,它的键值是最后一列的数值,如果当前键值不存在,则扩展字典并将当前键值加入字典。
#!!!每一个键值都是记录当前类别在数据集中出现的次