目录

sklearn中生成完整标签数据集半监督数据集,多标签数据集的模拟方法

sklearn中生成完整标签数据集、半监督数据集,多标签数据集的模拟方法

sklearn.datasetsscikit-learn 库中的一个模块,它提供了许多用于生成样本数据集和加载真实世界数据集的工具。以下是一些常用的函数和它们的用法:

生成有监督数据集

  1. make_classification(n_samples=100, n_features=20, ..., random_state=None)

    • 生成一个模拟的二分类数据集。
    • n_samples
      样本数量。
    • n_features
      特征数量。
    • n_informative
      有用的特征数量。
    • n_redundant
      冗余的特征数量(与其他特征线性相关)。
    • n_repeated
      重复的特征数量(与另一个特征完全相同)。
    • n_classes
      类别数量。
    • random_state
      控制随机数生成器的种子。
  2. make_regression(n_samples=100, n_features=1, ..., random_state=None)

    • 生成一个模拟的回归数据集。
    • n_samples
      样本数量。
    • n_features
      特征数量。
    • n_informative
      有用的特征数量。
    • n_targets
      目标变量的数量。
    • noise
      噪声的大小。
    • random_state
      控制随机数生成器的种子。
  3. make_blobs(n_samples=100, centers=3, ..., random_state=None)

    • 生成由子集组成的数据集,每个子集位于低维、孤立的区域。
    • n_samples
      样本数量。
    • centers
      中心点的数量。
    • cluster_std
      簇内的标准差。
    • random_state
      控制随机数生成器的种子。

加载真实世界数据集

  1. load_iris()

    • 加载鸢尾花数据集。
    • 返回数据和目标,以及特征名称和目标名称。
  2. load_diabetes()

    • 加载糖尿病数据集。
    • 返回数据和目标,以及特征名称和描述。
  3. fetch_california_housing()

    • 加载加州住房数据集。
    • 返回数据和目标,以及特征名称和描述。

完整标签数据集示例代码

from sklearn.datasets import make_classification, load_iris

# 生成一个二分类数据集
X, y = make_classification(n_samples=100, n_features=20, n_informative=2, n_redundant=10, random_state=42)

# 加载鸢尾花数据集
iris = load_iris()
X_iris, y_iris = iris.data, iris.target
feature_names = iris.feature_names
target_names = iris.target_names

print(X_iris.shape, y_iris.shape)
print(feature_names)
print(target_names)

生成半监督数据集

使用现实数据集生成半监督数据集(也称为弱标签数据集或不完全标注数据集)通常涉及以下步骤:

  1. 选择一个完整的标签数据集 :首先,你需要有一个已经标注好的完整数据集。
  2. 随机移除一部分标签 :从完整数据集中随机选择一部分样本,并移除它们的标签,从而创建部分标签数据集。
  3. 根据需要调整标签 :在某些情况下,你可能需要根据特定的模式或规则来移除标签,而不是完全随机。
  4. 验证数据集 :确保生成的部分标签数据集符合你的研究或应用需求。

以下是一个使用Python和 scikit-learn 库从完整标签数据集中生成半监督数据集的示例:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.utils import shuffle

# 加载一个完整的标签数据集,例如鸢尾花数据集
iris = load_iris()
X, y = iris.data, iris.target

# 确定要保留的有标签样本,例如保留70%的标签
retain_ratio = 0.7
num_retain = int(X.shape[0] * retain_ratio)

# 随机打乱数据集
X, y = shuffle(X, y)

# 保留部分标签
X_labeled, y_labeled = X[:num_retain], y[:num_retain]
X_unlabeled = X[num_retain:]

# 现在 X_labeled 和 y_labeled 是有标签的数据,X_unlabeled 是无标签的数据

在这个示例中,我们首先加载了鸢尾花数据集,然后随机打乱了数据。接着,我们根据保留比例计算出需要保留的样本数量,并从打乱后的数据集中分割出有标签和无标签的部分。最后,我们得到了一个半监督标签数据集,其中一部分样本有标签,另一部分样本没有标签。

请注意,这种方法生成的部分标签数据集可能不适用于所有类型的研究或应用。在实际应用中,你可能需要根据具体情况调整标签移除的策略。

多标签数据集生成方法

要生成多标签数据集,可以使用 scikit-learn 库中的 make_multilabel_classification 函数。这个函数可以生成多标签数据的随机样本,其中每个样本有两个特征的计数,这两个特征在两个类别中的每一个中分布不同。

以下是使用 make_multilabel_classification 函数生成多标签数据集的基本示例:

from sklearn.datasets import make_multilabel_classification

# 生成多标签数据集
X, Y = make_multilabel_classification(
    n_samples=100,  # 样本数量
    n_features=20,  # 特征数量
    n_classes=5,    # 类别数量
    n_labels=2,     # 每个样本的平均标签数量
    random_state=42 # 随机种子
)

# 查看生成的数据集形状
print("特征矩阵 X 的形状:", X.shape)
print("标签矩阵 Y 的形状:", Y.shape)

在这个示例中, n_samples 参数控制生成的样本数量, n_features 参数控制每个样本的特征数量, n_classes 参数控制类别的数量, n_labels 参数控制每个样本的平均标签数量,而 random_state 参数确保每次生成的数据集是相同的。

用现实数据集制作多标签数据集(部分标签数据集)方法见