sklearn.datasets.load_svmlight_file

sklearn.datasets.load_svmlight_file(f, *, n_features=None, dtype=<class 'numpy.float64'>, multilabel=Falsezero_based='auto', query_id=Falseoffset=0, length=-1)

[源码]

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

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

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

该格式用作svmlight和libsvm命令行程序的默认格式。

解析基于文本的源可能很昂贵。当在同一数据集上重复工作时,建议将此加载程序与joblib.Memory.cache打包在一起,以存储对第一个调用的CSR结果的映射备份,并受益于针对后续调用的内存映射(memmapped)结构的近乎瞬时加载。

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

此实现是用Cython编写的,速度相当快。但是,也可以从以下位置获得更快的与API兼容的加载程序:

https://github.com/mblondel/svmlight-loader

参数 说明
f {str, file-like, int}
(到)要加载的文件的路径。 如果路径以“.gz”或“ .bz2”结尾,则将即时解压缩。如果传递整数,则假定它是文件描述符。此函数不会关闭类文件或文件描述符。类文件的对象必须以二进制模式打开。
n_features int or None
要使用的特征数量。如果为None,则将其推断出来。此参数对于加载作为较大切片数据集的子集的几个文件很有用:每个子集可能没有每个特征的示例,因此推断的形状可能在不同切片之间有所不同。 仅当将offset或length传递为非默认值时才需要n_features。
dtype numpy data type, default np.float64
要加载的数据集的数据类型。即输出numpy数组X和y的数据类型。
multilabel boolean, optional, default False
每个样本可能都有几个标签(请参见https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multilabel.html)
zero_based boolean or “auto”, optional, default “auto”
f中的列索引是从零开始(zero-based)(True)还是从一开始(one-based)(False)。 如果列索引基于1(one-based),则将其转换为基于0(zero-based)的索引,以匹配Python / NumPy约定。 如果设置为“自动”,则将应用启发式检查来从文件内容中确定。 两种文件都是“自然”出现的,但它们无法自识别。当没有offset或length传递时,使用“auto”或True始终应该是安全的。如果传递了offset或length,则“auto”模式会退回到zero_based = True,以避免在文件的不同段上启发式检查产生不一致的结果。
query_id boolean, default False
如果为True,则将为每个文件返回query_id数组。
offset integer, optional, default 0
通过向前查找来忽略偏移的第一个字节,然后丢弃随后的字节,直到下一个新的行字符为止。
length integer, optional, default -1
如果严格正向,则一旦文件中的位置达到(offset + length)字节阈值,就停止读取任何新的数据行。
返回值 说明
X scipy.sparse matrix of shape (n_samples, n_features)
y ndarray of shape (n_samples,), or, in the multilabel a list of tuples of length n_samples.
query_id array of shape (n_samples,)
每个样本的query_id。 仅在query_id设置为True时返回。

另见

load_svmlight_files

类似的函数,用于以这种格式加载多个文件,并对所有文件执行相同数量的features/columns。

示例

要使用joblib.Memory来缓存svmlight文件:

from joblib import Memory
from .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()