Libsvm的数据格式label和样本特征是在一起的,如下所示:
label index1:feature1 index2:feature2 ...
label index1:feature1 index2:feature2 ...
label index1:feature1 index2:feature2 ...
举个例子:
而神经网络中label和样本特征是分开的。博主最近想将SVM分类器换成神经网络来试下效果,但是懒得重新跑提取特征的程序,就随手写了一个转换函数,直接上代码:
sample_n = 10000
feature_size = 50
def readSVM(filename):
features = np.zeros([sample_n, feature_size])
labels = np.zeros([sample_n])
i = 0
for line in open(filename, "r"): #每次读取libsvm中的一行
data = line.split(" ") #根据空格拆分这一行
labels[i] = int(float(data[0])) #第一项为样本标签
values = []
for feat in data[1:]:
index, value = feat.split(":") #将[index:value]拆分
values.append(float(value)) #将value暂存
if int(index) >= feature_size:
break
features[i,:] = values #这一行的所有value作为这个样本的标签
i = i + 1
return features, labels