
2.3 实例分析
本实例以Pima糖尿病数据的特征作为离散化的对象,考虑到特征数据的差异,对不同的特征设定不同的离散区间个数。最后观察特征离散化的结果,并将训练好的模型运用于新的特征数据。
2.3.1 数据集介绍
本实例使用Pima糖尿病人的经典分类数据集作为测试数据集,其中最后一列是患病与否的标签,前8列是一些判断病症的生理特征数据,如图2-1所示。
2.3.2 函数介绍
Chi_merge算法的程序主要由两个函数构成, 分别是训练函数和预测函数, 下面先给出这两个函数的参数说明。

图2-1 Pima糖尿病数据集
1.训练函数
Chi-Merge训练函数的输入与输出说明如下。

2.预测函数
Chi-Merge预测函数的输入与输出说明如下。

2.3.3 结果分析
本节为使用Chi-Merge算法的两个示例。例1是将每个特征离散为不同数量区间,例2是将每个特征离散为相同数量区间。
例1 不同离散区间
下面使用Pima数据,以每个特征分离作为不同的离散点为例介绍Chi-Merge算法的应用。以每一个特征离散值的个数为3、7、9、15、12、10、8、11这8个数为例,执行如下代码。

mdl仍然是一个结构体, 但此时域split_point和conlusion是元胞数组, 不是矩阵。 域varia的值为1, 表示此时每个属性的离散程度不同, 如图2-2所示。
元胞数组mdl. split_point共有8个元素, 每个元素都是一个向量, 其表示了每一个特征的分裂点, 如图2-3所示。

图2-2 Chi-Merge模型的输出

图2-3 分裂点
元胞数组mdl. conlusion也有8个元素, 元素同样也是向量, 其值是连续数据离散化后的具体取值。 同样在某一属性下, 样本值大于 mdl. split_point 中的几个值, 其离散值就取mdl. conlusion中的第几个值, 如图2-4所示。
mdl. xy_new是离散后的原数据, 第9列为标签, 如图2-5所示。

图2-4 连续数据离散化后的值

图2-5 数据离散化后的原数据
例2 相同离散区间
随机制造3个样本,代入例1中的模型,将它们离散化。使用的是带有标签的测试样本进行分析,首先执行如下代码。

即将被离散化的测试数据xy_test见图2-6 , 其中第9列是标签。

图2-6 测试数据
按照训练好的模型进行离散化后的测试数据xy_p如图2-7所示。

图2-7 离散化后的测试数据
接下来以原数据xy_test中第1列和第5列两个属性来举例说明。 首先来分析第1列, 先看表示第1列分裂点的向量mdl. split_point{1}, 如图2-8所示。
由图2-6得知xy_test第1列中2. 2647和1. 2647大于第一个数字0 , 5. 2647大于前两个数字。 再看表示第1列离散值的向量mdl. conlusion{1 ,1}, 如图2-9所示。 我们得知, 2. 2647和1. 2647对应的离散值是第一个数0. 9771 , 5. 2647对应的离散值是第2个数4. 3280。
再来分析图2-6中xy_test的第5 列, 先看分裂点的向量mdl. split_point{1 ,5}。 由图2-10可知xy_test的第5列中221. 2647大于所有的数, 1. 2647只大于第1个数0 , 接着再看表示离散值的向量mdl. conlusion{1 ,5}。

图2-8 离散分裂点序号

图2-9 第1列的离散切分点

图2-10 第5列的离散切分点序号
在图2-11中,221.2647对应第12个数255.1043,1.2647对应第一个数0.0373。

图2-11 第5列的离散值
以下代码表示输入的预测数据没有标签的情况 (注意传入预测函数的x_test是没有标签的) , 且最后一个参数是0。 执行此代码得出的xy_p就是没标签的, 如图2-12所示。


图2-12 离散化的结果