机器学习笔记

1、香农熵

https://www.cnblogs.com/muchen/p/6141978.html
这是决策树的一些详细讲解,带代码。
计算香农熵的代码

# ==============================================
# 输入:
#        dataSet: 数据集文件名(含路径)
# 输出:
#        shannonEnt: 输入数据集的香农熵
# ==============================================
import math
def calcShannonEnt(dataSet):
    '计算香农熵'

    # 数据集个数
    numEntries = len(dataSet)
    # 标签集合
    labelCounts = {}
    for featVec in dataSet:  # 行遍历数据集
        # 当前标签
        currentLabel = featVec[-1]
        # 加入标签集合,将属于yes的归为一类,将属于no的归为一类。
        # 所以字典中有两个key,一个yes,一个no
        if currentLabel not in labelCounts.keys():
            #这个方式直接添加yes到字典中,设yes的vaule值为0.
            labelCounts[currentLabel] = 0
        labelCounts[currentLabel] += 1
        print(labelCounts)

    # 计算当前数据集的香农熵并返回
    shannonEnt = 0.0
    for key in labelCounts:
        prob = float(labelCounts[key]) / numEntries
        shannonEnt -= prob * math.log(prob, 2)

    return shannonEnt


# ==============================================
# 输入:
#        空
# 输出:
#        dataSet: 测试数据集列表
# ==============================================
def createDataSet():
    '创建测试数据集'

    dataSet = [[1, 1, 'yes'],
               [1, 1, 'yes'],
               [1, 0, 'no'],
               [0, 1, 'no'],
               [0, 1, 'no']]

    return dataSet


def test():
    '测试'
    # 创建测试数据集
    myDat = createDataSet()
    # 求出其熵并打印
    print(calcShannonEnt(myDat))

test();

运算结果,归类的值和香农熵的结果
运算结果,归类的值和熵的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值