会员中心 |  会员注册  |  兼职信息发布    浏览手机版!    超值满减    人工翻译    英语IT服务 贫困儿童资助 | 留言板 | 设为首页 | 加入收藏  繁體中文
当前位置:首页 > 机翻技术 > 机器翻译 > 正文

划分数据集

发布时间: 2023-02-23 09:26:35   作者:etogether.net   来源: 网络   浏览次数:
摘要: 我们将对每个特征划分数据集的结果计算一次信息熵 ,然后判断按照哪个特征划分数据集是最好的划分方式。


分类算法除了需要测量信息熵,还需要划分数据集,度量花费数据集的熵,以便判断当前是否正确地划分了数据集。我们将对每个特征划分数据集的结果计算一次信息熵 ,然后判断按照哪个特征划分数据集是最好的划分方式。想象一个分布在二维空间的数据散点图,需要在数据之间划条线,将它们分成两部分,我们应该按照x轴还是y轴划线呢?


要划分数据集,打开文本编辑器,在trees.py文件中输入下列的代码:


程序清单1-1按照给定特征划分数据集


图1.png

程序清单1-1的代码使用了三个输入参数:待划分的数据集、划分数据集的特征、特征的返回值。需要注意的是,Python语言不用考虑内存分配问题。Python语言在函数中传递的是列表的引用,在函数内部对列表对象的修改,将会影响该列表对象的整个生存周期。为了消除这个不良影响,我们需要在函数的开始声明一个新列表对象。因为该函数代码在同一数据集上被调用多次,为了不修改原始数据集,创建一个新的列表对象。数据集这个列表中的各个元素也是列表,我们要遍历数据集中的每个元素,一旦发现符合要求的值,则将其添加到新创建的列表中。在if 语句中,程序将符合特征的数据抽取出来。后面讲述得更简单,这里我们可以这样理解这段代码:当我们按照某个特征划分数据集时,就需要将所有符合要求的元素抽取出来。代码中使用了Python语言列表类型自带的extend()和append()方法。这两个方法功能类似,但是在处理多个列表时,这两个方法的处理结果是完全不同的。


假定存在两个列表,a和b:


>>> a=[1,2,3]

>>>b=[4,5,6]

>>> a.append (b)

>>>a

[1,2, 3,[4, 5, 6]]


如果执行a.append(b),则列表得到了第四个元素,而且第四个元素也是一个列表。然而如果使用extend方法:


>>> a=[1,2,3]

>>> a.extend(b)

>>>a

[1,2,3,4,5,6]


则得到一个包含a和b所有元素的列表。


我们可以在前面的简单样本数据上测试函数splitDataSet()。首先还是要将程序清单1-1的代码增加到trees.py文件中,然后在Python命令提示符内输入下述命令:


>>> reload(trees)

<module 'trees' from 'trees.pyc'>

>>> myDat,labels=trees.createDataSet()

>>> myDat

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

>>> trees.splitDataSet (myDat,0,1)

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

>>> trees.splitDataSet (myDat,0,0)

[[1, 'no'], [1, 'no']]


接下来我们将遍历整个数据集,循环计算香农熵和splitDataset()函数,找到最好的特征划分方式。熵计算将会告诉我们如何划分数据集是最好的数据组织方式。


打开文本编辑器,在trees.py文件中输人下面的程序代码。



微信公众号

[1] [2] [下一页] 【欢迎大家踊跃评论】
我来说两句
评论列表
已有 0 条评论(查看更多评论)