一、什么是libsvm
libsvm是一种机器学习中常见的数据保存格式,它有如下特征:
[label] [index1]:[value1] [index2]:[value2] …[label] [index1]:[value1] [index2]:[value2] …
label目标值,就是说class(属于哪一类),就是你要分类的种类,通常是一些整数。
index是有顺序的索引,通常是连续的整数。就是指特征编号,必须按照升序排列
value就是特征值,用来train的数据,通常是一堆实数组成。
即:
目标值 第一维特征编号:第一维特征值 第二维特征编号:第二维特征值 …目标值 第一维特征编号:第一维特征值 第二维特征编号:第二维特征值 ………目标值 第一维特征编号:第一维特征值 第二维特征编号:第二维特征值 …
一、libsvm文件的读取
python中使用sklearn包很容易就能读取到libsvm格式的数据
需要导入下面的包(如果没有安装sklearn的包要先自己安装):
from sklearn.datasets import load_svmlight_filedef load_data(filename):data = load_svmlight_file(filename)return datadata = load_data('yourpath/housing_scale.txt')print(type(data))#<class 'tuple'>print(type(data[0]))print(data[0][0])#<class 'scipy.sparse.csr.csr_matrix'># (0, 0)-1.0# (0, 1)-0.64# (0, 2)-0.86437# (0, 3)-1.0# (0, 4)-0.37037# (0, 5)0.155011# (0, 6)0.283213# (0, 7)-0.461594# (0, 8)-1.0# (0, 9)-0.583969# (0, 10)-0.425532# (0, 11)1.0# (0, 12)-0.82064# 发现tuple中data[0]是csr_matrix类型
load_svmlight_file(f, n_features=None, ...) --> 返回 <class 'tuple'>
由于libsvm格式存储的数据不保证每一行的每一列都有数据(即有数据缺省),所以返回的tuple的data[0]是一个稀疏矩阵.
如果我们想要numpy库去操纵该矩阵,需要调用:
X = data[0].toarray()#或者X = data[0].todense()#或者X = data[0].A