load_svmlight_file 加载 svmlight 文件#
- 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)[source]#
将 svmlight/libsvm 格式的数据集加载到稀疏 CSR 矩阵中。
这种格式是一种文本格式,每行一个样本。它不存储零值特征,因此适用于稀疏数据集。
每行的第一个元素可以用来存储要预测的目标变量。
此格式用作 svmlight 和 libsvm 命令行程序的默认格式。
解析基于文本的源文件可能代价昂贵。当重复处理相同数据集时,建议使用 joblib.Memory.cache 包装此加载器,以存储 CSR 结果的内存映射备份(第一次调用),并在后续调用中受益于内存映射结构的近乎即时加载。
如果文件包含成对偏好约束(在 svmlight 格式中称为“qid”),除非将 query_id 参数设置为 True,否则这些约束将被忽略。当使用成对损失函数(如某些学习排序问题中的情况)时,可以使用这些成对偏好约束来约束样本的组合,以便仅考虑具有相同 query_id 值的样本对。
此实现是用 Cython 编写的,速度相当快。但是,一个更快的 API 兼容加载器也可在以下位置获得:mblondel/svmlight-loader
- 参数:
- fstr,path-like,file-like 或 int
(路径到)要加载的文件。如果路径以“.gz”或“.bz2”结尾,则会动态解压缩。如果传递整数,则假定为文件描述符。此函数不会关闭 file-like 或文件描述符。file-like 对象必须以二进制模式打开。
1.2 版中的更改: 现在接受类路径对象。
- n_featuresint,默认为 None
要使用的特征数量。如果为 None,则将推断出来。此参数对于加载多个作为较大切片数据集的子集的文件很有用:每个子集可能没有每个特征的示例,因此推断出的形状可能因一个切片而异。只有在传递非默认值
offset
或length
时才需要 n_features。- dtypenumpy 数据类型,默认为 np.float64
要加载的数据集的数据类型。这将是输出 numpy 数组
X
和y
的数据类型。- multilabelbool,默认为 False
样本可能每个都有多个标签(参见https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multilabel.html)。
- zero_basedbool 或“auto”,默认为“auto”
f 中的列索引是基于零的 (True) 还是基于一的 (False)。如果列索引基于一,则将其转换为基于零以匹配 Python/NumPy 约定。如果设置为“auto”,则应用启发式检查以根据文件内容确定这一点。“野外”同时存在这两种文件,但遗憾的是它们本身无法识别。当没有传递
offset
或length
时,使用“auto”或 True 应该总是安全的。如果传递offset
或length
,则“auto”模式将回退到zero_based=True
,以避免启发式检查对文件的不同段产生不一致的结果。- query_idbool,默认为 False
如果为 True,将返回每个文件的 query_id 数组。
- offsetint,默认为 0
通过向前查找忽略前 offset 个字节,然后丢弃直到下一个换行符之前的字节。
- lengthint,默认为 -1
如果严格为正数,则一旦文件中的位置达到 (offset + length) 字节阈值,就停止读取任何新的数据行。
- 返回:
- X形状为 (n_samples, n_features) 的 scipy.sparse 矩阵
数据矩阵。
- 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()