一、什么是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_file

def load_data(filename):
    data = load_svmlight_file(filename)
    return data

data = 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

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐