make_multiplexer_dataset: 用于创建多路复用器数据的功能

一个功能,用于创建由 n 位布尔多路复用器生成的数据集,以评估监督学习算法。

from mlxtend.data import make_multiplexer_dataset

概述

make_multiplexer_dataset 函数创建一个由 n 位布尔多路复用器生成的数据集。这样的数据集代表了一个基于电多路复用器行为的简单规则生成的数据集,但对于监督学习算法来说,它提出了一个相对具有挑战性的分类问题,因为它存在特征之间的交互作用(上位性),这在许多现实世界场景中可能会遇到 [1]。

下图描绘了一个 6 位多路复用器,它由 2 个地址位和 4 个寄存器位组成。地址位转换为十进制表示后指向寄存器位中的一个位置。例如,如果地址位是“00”(十进制为 0),地址位指向寄存器位位置 0。指向的寄存器位置的值决定了类别标签。例如,如果位置的寄存器位是 0,则类别标签为 0。反之,如果位置 0 的寄存器位是 1,则类别标签为 1。

在上面的示例中,地址位“10”(十进制为 2)指向第 3 个寄存器位置(因为我们从索引 0 开始计数),该位置的位值为 1。因此,类别标签为 1。

以下是更多示例

  1. 地址位: [0, 1], 寄存器位: [1, 0, 1, 1], 类别标签: 0
  2. 地址位: [0, 1], 寄存器位: [1, 1, 1, 0], 类别标签: 1
  3. 地址位: [1, 0], 寄存器位: [1, 0, 0, 1], 类别标签: 0
  4. 地址位: [1, 1], 寄存器位: [1, 1, 1, 0], 类别标签: 0
  5. 地址位: [0, 1], 寄存器位: [0, 1, 1, 0], 类别标签: 1
  6. 地址位: [0, 1], 寄存器位: [1, 0, 0, 1], 类别标签: 0
  7. 地址位: [0, 1], 寄存器位: [0, 1, 1, 1], 类别标签: 1
  8. 地址位: [0, 1], 寄存器位: [0, 0, 0, 0], 类别标签: 0
  9. 地址位: [1, 0], 寄存器位: [1, 0, 1, 1], 类别标签: 1
  10. 地址位: [0, 1], 寄存器位: [1, 1, 1, 1], 类别标签: 1

请注意,在多路复用器函数的实现中,如果地址位设置为 2,则会得到一个 6 位多路复用器,因为两个位可以有 2^2=4 个不同的寄存器位置(2 位 + 4 位 = 6 位)。但是,如果我们选择 3 个地址位,则会覆盖 2^3=8 个位置,从而得到一个 11 位多路复用器(3 位 + 8 位 = 11 位),依此类推。

参考文献

  • [1] Urbanowicz, R. J., & Browne, W. N. (2017). Introduction to Learning Classifier Systems. Springer.

示例 1 -- 6 位多路复用器

这个简单的例子说明了如何从 6 位多路复用器创建数据集

import numpy as np
from mlxtend.data import make_multiplexer_dataset


X, y = make_multiplexer_dataset(address_bits=2, 
                                sample_size=10,
                                positive_class_ratio=0.5, 
                                shuffle=False,
                                random_seed=123)

print('Features:\n', X)
print('\nClass labels:\n', y)
Features:
 [[0 1 0 1 0 1]
 [1 0 0 0 1 1]
 [0 1 1 1 0 0]
 [0 1 1 1 0 0]
 [0 0 1 1 0 0]
 [0 1 0 0 0 0]
 [0 1 1 0 1 1]
 [1 0 1 0 0 0]
 [1 0 0 1 0 1]
 [1 0 1 0 0 1]]

Class labels:
 [1 1 1 1 1 0 0 0 0 0]

API

make_multiplexer_dataset(address_bits=2, sample_size=100, positive_class_ratio=0.5, shuffle=False, random_seed=None)

创建二元 n 位多路复用器数据集的功能。

mlxtend v0.9 中的新功能

参数

  • address_bits : int (默认值: 2)

    一个正整数,决定了多路复用器中的地址位数,这进而决定了多路复用器的 n 位容量,也因此决定了特征的数量。特征的数量由地址位数决定。例如,2 个地址位将得到一个 6 位多路复用器,因此有 6 个特征 (2 + 2^2 = 6)。如果 address_bits=3,则会得到一个 11 位多路复用器 (2 + 2^3 = 11),具有 11 个特征。

  • sample_size : int (默认值: 100)

    生成的样本总数。

  • positive_class_ratio : float (默认值: 0.5)

    sample_size 大小的数据集中,类别标签为 1 的样本所占的比例(一个介于 0 和 1 之间的浮点数)。如果 positive_class_ratio=0.5 (默认值),则类别 0 和类别 1 样本的比例完全平衡。

  • shuffle : 布尔型 (默认值: False)

    是否打乱特征和标签。如果为 False (默认值),样本将按排序顺序返回,先是 sample_size/2 个类别标签为 0 的样本,然后是 sample_size/2 个类别标签为 1 的样本。

  • random_seed : int (默认值: None)

    用于生成多路复用器样本和打乱的随机种子。

返回值

  • X, y : [n_samples, n_features], [n_class_labels]

    X 是特征矩阵,样本数量等于 sample_size。特征数量由地址位数决定。例如,2 个地址位将得到一个 6 位多路复用器,因此有 6 个特征 (2 + 2^2 = 6)。所有特征都是二元的(值为 {0, 1})。y 是一个 1 维数组,包含类别标签 {0, 1}。

示例

有关使用示例,请参阅 https://mlxtend.cn/mlxtend/user_guide/data/make_multiplexer_dataset