svm train输出文件的行数少于输入文件的行数

时间:2017-03-22 12:08:35

标签: svm libsvm

我目前正在构建二进制分类模型,并为svm-train(svm_input.txt)创建了一个输入文件。此输入文件具有453行,4个编号功能和2个编号类[0,1]。 即 0 1:15.0 2:40.0 3:30.0 4:15.0 1 1:22.73 2:40.91 3:36.36 4:0.0 1 1:31.82 2:27.27 3:22.73 4:18.18 0 1:22.73 2:13.64 3:36.36 4:27.27 1 1:30.43 2:39.13 3:13.04 4:17.39 ......................

我的问题是,当我计算由svm-train(svm_train_model.txt)生成的输出模型中的行数时,这比输入文件的行少12行。这里的行数显示为450,尽管在开头显然还有9行显示生成的各种参数 即。

svm_type c_svc kernel_type rbf 伽玛1 nr_class 2 total_sv 441 rho -0.156449 标签0 1 nr_sv 228 213 SV

因此,453的原始输入总共有12行已经消失。我是svm的新手,并希望有人可以解释为什么会发生这种情况? 提前致谢

更新.........

我现在相信在生成模型时,它已删除了标签和所有参数完全相同的行。

解释...............我的输入是一组miRNA,根据它们在特定过程中的参与程度而被分类为1和0(即1 =是& 0 =否)。输入文件看起来像.......

0 1:22 2:30 3:14 4:16

1 1:26 2:15 3:17 4:25

0 1:22 2:30 3:14 4:16

因此,第一行和第三行完全相同,结果将从输出模型中删除。我的问题是输出模型为什么会这样做以及如何解决这个问题(使用相同的功能)?

虽然输入文件中的某些标签及其相应的特征值是相同的,但这些仍然是不同的miRNA。

注意:输入文件没有miRNA名称的功能(这会清楚地显示每行的差异)然而,就所使用的特征(即核苷酸百分比含量)而言,一些miRNA确实具有相同百分含量的A,U,G& C和结果被视为重复,然后从输出模型中删除,因为它显然将它们视为重复,即使它们不是(因此输出模型中的行数较少)。

输入文件的格式为:

其中:

第0列 - 标签(即1或0):1 =是& 0 =无

第1列 - 要素1 =百分比内容“A”

第2栏 - 要素2 =百分比内容“U”

第3栏 - 特征3 =百分比内容“G”

第4栏 - 特征4 =百分比内容“C”

输入文件实际上看起来像(见下面的前两行),因为它们看起来相同,但每行代表不同的miRNA):

1 1:23 2:36 3:23 4:18

1 1:23 2:36 3:23 4:18

0 1:36 2:32 3:5 4:27

1 1:14 2:41 3:36 4:9

1 1:18 2:50 3:18 4:14

0 1:36 2:23 3:23 4:18

0 1:15 2:40 3:30 4:15

在软件方面,我使用的是libsvm-3.22和python 2.7.5

1 个答案:

答案 0 :(得分:0)

正确对齐输入文件,是我的第一个观察。 libsvm的代码不会查找4个功能。我通过您提供的字符串文字来标识将要素与标签分开。我建议手动转换输入文件以创建所需的输入参数。 在python中尝试以下代码来运行 要求 - h5py,如果您的输入来自matlab。 (.mat文件) pip install h5py

import h5py
f = h5py.File('traininglabel.mat', 'r')# give label.mat file for training
variables = f.items()
labels = []
c = []
import numpy as np
for var in variables:
    data = var[1]
    lables = (data.value[0])
trainlabels= []
for i in lables:
    trainlabels.append(str(i))

finaltrain = []
trainlabels = np.array(trainlabels)
for i in range(0,len(trainlabels)):
    if trainlabels[i] == '0.0':
        trainlabels[i] = '0'
    if trainlabels[i] == '1.0':
    trainlabels[i] = '1'    
    print trainlabels[i]


f = h5py.File('training_features.mat', 'r') #give features here
variables = f.items()
lables = []

file = open('traindata.txt', 'w+')

for var in variables:
    data = var[1]

lables = data.value

for i in range(0,1000): #no of training samples in file features.mat
    file.write(str(trainlabels[i]))
    file.write(' ')
    for j in range(0,49):
        file.write(str(lables[j][i]))
        file.write(' ')
    file.write('\n')