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

server/2025/3/15 13:34:04/

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()

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

完整标签数据集示例代码

python">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_namesprint(X_iris.shape, y_iris.shape)
print(feature_names)
print(target_names)

生成半监督数据集

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

  1. 选择一个完整的标签数据集:首先,你需要有一个已经标注好的完整数据集。

  2. 随机移除一部分标签:从完整数据集中随机选择一部分样本,并移除它们的标签,从而创建部分标签数据集。

  3. 根据需要调整标签:在某些情况下,你可能需要根据特定的模式或规则来移除标签,而不是完全随机。

  4. 验证数据集:确保生成的部分标签数据集符合你的研究或应用需求。

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

python">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 函数生成多标签数据集的基本示例:

python">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 参数确保每次生成的数据集是相同的。

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


http://www.ppmy.cn/server/175170.html

相关文章

【大模型学习】第十九章 什么是迁移学习

目录 1. 迁移学习的起源背景 1.1 传统机器学习的问题 1.2 迁移学习的提出背景 2. 什么是迁移学习 2.1 迁移学习的定义 2.2 生活实例解释 3. 技术要点与原理 3.1 迁移学习方法分类 3.1.1 基于特征的迁移学习(Feature-based Transfer) 案例说明 代码示例 3.1.2 基于…

程序化广告行业(15/89):TD、流量供应方与流量方服务解析

程序化广告行业(15/89):TD、流量供应方与流量方服务解析 大家好!一直以来,我都对程序化广告行业充满兴趣,在深入学习的过程中积累了不少知识。今天就想把这些知识分享出来,和大家一起学习进步&…

HEC-HMS水文模型技术应用

HEC-HMS是美国陆军工程兵团水文工程中心开发的一款水文模型。HMS能够模拟各种类型的降雨事件对流域水文,河道水动力以及水利设施的影响,在世界范围内得到了广泛的应用。它有着完善的前后处理软件,能有效减轻建模的负担;能够与HEC开…

mysql select distinct 和 group by 哪个效率高

在有索引的情况下,SELECT DISTINCT和GROUP BY的效率相同;在没有索引的情况下,SELECT DISTINCT的效率高于GROUP BY‌。这是因为SELECT DISTINCT和GROUP BY都会进行分组操作,但GROUP BY可能会进行排序,触发filesort&…

使用PHP进行自动化测试:工具与策略的全面分析

使用PHP进行自动化测试:工具与策略的全面分析 引言 随着软件开发的复杂性不断增加,自动化测试已成为确保软件质量的关键环节。PHP作为一种广泛使用的服务器端脚本语言,拥有丰富的生态系统和工具支持,使其成为自动化测试的理想选…

【C++】类和对象

类的基本思想是数据抽象( d a t a a b s t r a c t i o n data\ abstraction data abstraction)和封装( e n c a p s u l a t i o n encapsulation encapsulation)。数据抽象是一种依赖于接口( i n t e r f a c e inte…

Day 64 卡玛笔记

这是基于代码随想录的每日打卡 参加科学大会(第六期模拟笔试) 题目描述 ​ 小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。 ​ 小明的起点是第一个车站,终点是最后一个车站。然…

JavaScript中的对象合并与更新:使用扩展运算符和对象字面量简写

JavaScript中的对象合并与更新:使用扩展运算符和对象字面量简写 在现代JavaScript开发中,处理对象的合并与更新是一项常见的任务。无论是构建用户界面、管理应用状态还是进行数据操作,我们经常需要基于现有对象创建新的对象,并对…