load_svmlight_file#

sklearn.datasets.load_svmlight_file(f, *, n_features=None, dtype=<class 'numpy.float64'>, multilabel=False, zero_based='auto', query_id=False, offset=0, length=-1)[源码]#

将 svmlight / libsvm 格式的数据集加载到稀疏 CSR 矩阵中。

这种格式是一种基于文本的格式,每行一个样本。它不存储零值特征,因此适用于稀疏数据集。

每行的第一个元素可用于存储要预测的目标变量。

svmlight 和 libsvm 命令行程序都使用此格式作为默认格式。

解析基于文本的源可能成本很高。当重复处理相同数据集时,建议使用 joblib.Memory.cache 包装此加载器,以存储首次调用 CSR 结果的内存映射备份,并从后续调用中内存映射结构的近乎瞬时加载中受益。

如果文件包含成对偏好约束(在 svmlight 格式中称为“qid”),则除非将 query_id 参数设置为 True,否则这些约束将被忽略。这些成对偏好约束可用于在使用成对损失函数时(如在某些学习排序问题中)约束样本的组合,以便仅考虑具有相同 query_id 值的对。

此实现是用 Cython 编写的,速度相当快。然而,在以下位置还提供了一个更快的 API 兼容加载器:mblondel/svmlight-loader

参数:
fstr, 路径类对象, 文件类对象 或 int

要加载的文件(的路径)。如果路径以“.gz”或“.bz2”结尾,它将即时解压缩。如果传入整数,则假定它是一个文件描述符。此函数不会关闭文件类对象或文件描述符。文件类对象必须以二进制模式打开。

版本 1.2 中已更改: 现在接受路径类对象。

n_featuresint, 默认=None

要使用的特征数量。如果为 None,则会推断。此参数对于加载多个文件很有用,这些文件是较大分片数据集的子集:每个子集可能没有每个特征的示例,因此推断的形状可能因一个分片而异。只有当 offsetlength 传递非默认值时,才需要 n_features。

dtypenumpy 数据类型, 默认=np.float64

要加载的数据集的数据类型。这将是输出 numpy 数组 Xy 的数据类型。

multilabelbool, default=False

每个样本可能具有多个标签(参见 https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multilabel.html)。

zero_basedbool 或 “auto”, 默认=”auto”

f 中的列索引是基于零 (True) 还是基于一 (False)。如果列索引是基于一的,它们将被转换为基于零的以匹配 Python/NumPy 约定。如果设置为“auto”,则应用启发式检查以从文件内容中确定这一点。这两种文件都“野外”存在,但不幸的是它们不能自识别。当不传递 offsetlength 时,使用“auto”或 True 应该始终是安全的。如果传递了 offsetlength,则“auto”模式会回退到 zero_based=True,以避免启发式检查在文件的不同段上产生不一致的结果。

query_idbool, 默认=False

如果为 True,将返回每个文件的 query_id 数组。

offsetint, 默认=0

通过向前查找忽略前 offset 个字节,然后丢弃后续字节直到下一个换行符。

lengthint, 默认=-1

如果严格为正,一旦文件中的位置达到 (offset + length) 字节阈值,就停止读取任何新的数据行。

返回:
X形状为 (n_samples, n_features) 的 scipy.sparse 矩阵

The data matrix.

y形状为 (n_samples,) 的 ndarray,或长度为 n_samples 的元组列表

目标。当 multilabel=True 时为元组列表,否则为 ndarray。

query_id形状为 (n_samples,) 的数组

每个样本的 query_id。仅当 query_id 设置为 True 时返回。

另请参阅

load_svmlight_files

用于加载此格式的多个文件的类似函数,对所有文件强制使用相同的特征/列数。

示例

使用 joblib.Memory 缓存 svmlight 文件

from joblib import Memory
from sklearn.datasets import load_svmlight_file
mem = Memory("./mycache")

@mem.cache
def get_data():
    data = load_svmlight_file("mysvmlightfile")
    return data[0], data[1]

X, y = get_data()