标签: libsvm

libsvm模型文件格式

根据这个FAQ,libsvm中的模型格式应该是直截了当的.事实上,当我打电话时,它就是svm-train.例如,a1a数据集的第一个SV 是

 1 3:1 11:1 14:1 19:1 39:1 42:1 55:1 64:1 67:1 73:1 75:1 76:1 80:1 83:1
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我使用easy.py脚本,我的第一个SV最终会:

 512 1:-1 2:-1 3:1 4:-1 5:-1 6:-1 7:-1 8:-1 9:-1 10:-1 11:1 13:-1 14:1 15:-1 16:-1 17:-1 18:-1 19:1 20:-1 21:-1 22:-1 23:-1 24:-1 25:-1 26:-1 27:-1 28:-1 29:-1 30:-1 31:-1 32:-1 33:-1 34:-1 35:-1 36:-1 37:-1 38:-1 39:1 40:-1 41:-1 42:1 43:-1 44:-1 45:-1 46:-1 47:-1 48:-1 49:-1 50:-1 51:-1 52:-1 53:-1 54:-1 …
Run Code Online (Sandbox Code Playgroud)

file-format machine-learning text-files libsvm

4
推荐指数
1
解决办法
5758
查看次数

如何使用libsvm计算多类预测的概率?

我正在使用libsvm,文档让我相信有一种方法可以输出输出分类准确性的可信概率.是这样吗?如果是这样,任何人都可以提供一个如何在代码中执行此操作的明确示例吗?

目前,我正在以下列方式使用Java库

    SvmModel model = Svm.svm_train(problem, parameters);
    SvmNode x[] = getAnArrayOfSvmNodesForProblem();
    double predictedValue = Svm.svm_predict(model, x);
Run Code Online (Sandbox Code Playgroud)

java machine-learning probability svm libsvm

4
推荐指数
1
解决办法
4820
查看次数

抑制libsvm中的输出(python)

我正在使用来自python的libsvm(svmutils)进行分类任务。分类器是准确的。但是,我得到这样的输出:

*
optimization finished, #iter = 75
nu = 0.000021
obj = -0.024330, rho = 0.563710
nSV = 26, nBSV = 0
Total nSV = 26
*
optimization finished, #iter = 66
nu = 0.000030
obj = -0.035536, rho = -0.500676
nSV = 21, nBSV = 0
Total nSV = 21
*
optimization finished, #iter = 78
nu = 0.000029
obj = -0.033921, rho = -0.543311
nSV = 23, nBSV = 0
Total nSV = 23
*
optimization finished, #iter …
Run Code Online (Sandbox Code Playgroud)

python classification machine-learning libsvm document-classification

4
推荐指数
1
解决办法
3008
查看次数

有没有一种有效的方法将numpy.ndarray转换成列表?

我有一个表格的数组Y(这只是一个例子,我有一个巨大的数据在这种形式).该数组是使用numpy的vstack和hstack形成的(即我不想改变我获取这个数组的方式,因为我通过一些复杂的操作获得了它):

 Y=array([[1,  1,2],
        [1,  2,0],
        [-1, 3,1],
        [-1, 2,2]])
y=[1,1,-1,-1]
Y1=list(Y)
Run Code Online (Sandbox Code Playgroud)

现在我将数据输入到libsvm函数,该库期望输入参数是字典,列表或元组形式.因此,相同的代码是:

prob=svm_problem(y, Y1)
Run Code Online (Sandbox Code Playgroud)

上面的函数抛出一个'xi应该是字典,列表或元组'的错误.我知道的另一种方法是迭代地将Y转换为列表.这样做的方式是:

Y1=[] 
for i in range(0, Y.shape[0]):
      Y1.append(list(Y[i])
Run Code Online (Sandbox Code Playgroud)

考虑到我拥有的庞大数据,上述方法运行良好但速度很慢.有没有更快的方法来实现同样的目标?

python numpy scipy libsvm python-2.7

4
推荐指数
1
解决办法
5541
查看次数

用于MATLAB的LibSVM中多类分类的概率估计解释

问题:带有标签1,2,3的3级分类.

工具:用于MATLAB的LibSVM

svmModel = svmtrain(<Trainfeatures>, <TrainclassLabels>, '-b 1 -c <someCValue> -g <someGammaValue>');
[predLabels, classAccuracy, **probEstimates**] = svmpredict(<TestFeatures>, <TestClassLabels>, '-b 1');
Run Code Online (Sandbox Code Playgroud)

在这一步之后,我得到了前十行的probEstimates,

0.9129    0.0749    0.0122
0.9059    0.0552    0.0389
0.8231    0.0183    0.1586
0.9077    0.0098    0.0825
0.9074    0.0668    0.0257
0.8685    0.0146    0.1169
0.8962    0.0664    0.0374
0.9074    0.0548    0.0377
0.9474    0.0054    0.0472
0.9178    0.0642    0.0180
Run Code Online (Sandbox Code Playgroud)

但前十个预测的标签是:

 2
 2
 2
 2
 2
 2
 2
 2
 2
 2
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 我的理解是概率估计是特定项目属于特定类的概率,给定其特征向量.但是,如果这是真的,那么这些项目应属于1类,而不是等级2是否LIBSVM改变类的顺序还是我失去了一些东西?如果我错了,有人可以解释一下概率估计的真正解释是什么?

  2. 如果我必须移动决策边界以提高第1类的精度(预测的项目数量较少,因此在决策边界中更为保守),我应该处理哪些类概率以及如何处理?

matlab classification probability libsvm

4
推荐指数
1
解决办法
2373
查看次数

LibSVM和scikit-learn的准确度不同

对于相同的数据集和参数,我得到不同的准确性LibSVMscikit-learn的SVM实现,尽管scikit-learn也使用LibSVM在内部.

我忽略了什么?

LibSVM命令行版本:

me@my-compyter:~/Libraries/libsvm-3.16$ ./svm-train -c 1 -g 0.07 heart_scale heart_scale.model
optimization finished, #iter = 134
nu = 0.433785
obj = -101.855060, rho = 0.426412
nSV = 130, nBSV = 107
Total nSV = 130
me@my-compyter:~/Libraries/libsvm-3.16$ ./svm-predict heart_scale heart_scale.model heart_scale.result
Accuracy = 86.6667% (234/270) (classification)
Run Code Online (Sandbox Code Playgroud)

Scikit-learn NuSVC版本:

In [1]: from sklearn.datasets import load_svmlight_file    
In [2]: X_train, y_train = load_svmlight_file('heart_scale')    
In [3]: from sklearn import svm    
In [4]: clf = svm.NuSVC(gamma=0.07,verbose=True)   
In …
Run Code Online (Sandbox Code Playgroud)

libsvm scikit-learn

4
推荐指数
1
解决办法
3939
查看次数

手动计算SVM的决策函数

我正在尝试使用 python 库 SKLearn 手动计算 SVC 分类器的决策函数(而不是使用内置方法)。

我已经尝试了几种方法,但是,当我缩放我的数据时,我只能让手动计算匹配。

z 是一个测试数据(已缩放),我认为其他变量不言自明(此外,如果代码中不明显,我正在使用 rbf 内核)。

以下是我尝试过的方法:

1 循环方法:

dec_func = 0
for j in range(np.shape(sup_vecs)[0]):

    norm2 = np.linalg.norm(sup_vecs[j, :] - z)**2 
    dec_func = dec_func + dual_coefs[0, j] * np.exp(-gamma*norm2)

dec_func += intercept
Run Code Online (Sandbox Code Playgroud)

2 矢量化方法

diff = sup_vecs - z
norm2 = np.sum(np.sqrt(diff*diff), 1)**2
dec_func = dual_coefs.dot(np.exp(-gamma_params*norm2)) + intercept
Run Code Online (Sandbox Code Playgroud)

但是,这些都不会返回与decision_function. 我认为这可能与重新调整我的价值观有关,或者更有可能是我一直在寻找的一些愚蠢的事情!

任何帮助,将不胜感激。

python svm libsvm svc scikit-learn

4
推荐指数
1
解决办法
4711
查看次数

sklearn:LinearSVC和OneSVM的AUC分数

SVM分类器(SVC)的一个选项probability默认为false。该文档未说明其作用。查看libsvm源代码,它似乎在进行某种交叉验证。

LinearSVC或都不存在此选项OneSVM

我需要为多个SVM模型(包括最后两个)计算AUC分数。我是否应该使用AUC分数decision_function(X)作为阈值来计算?

svm libsvm scikit-learn

4
推荐指数
1
解决办法
3033
查看次数

使用libsvm进行分类培训

我想使用libsvm进行分类.我有9个训练集,每组有144000个标记实例,每个实例具有可变数量的特征.训练一组需要大约12个小时(./svm-train与概率估计).由于我没有太多时间,我想一次运行多套.我不确定我是否可以这样做..我可以在不同的终端同时运行所有9个进程吗?

./svm-train -b 1 feat1.txt
./svm-train -b 1 feat2.txt
      .
      .
      .
./svm-train -b 1 feat9.txt
Run Code Online (Sandbox Code Playgroud)

(我使用的是fedora core 5)

machine-learning libsvm

3
推荐指数
1
解决办法
2662
查看次数

其中Weka和LibSVM .jar文件在Java代码中用于SVM分类

如果我使用Weka Explorer运行一些训练数据来反对使用线性内核的SVM测试数据,一切都很好.

但是我需要在我自己的Java中以编程方式执行此操作,并且我当前的代码如下所示:

Instances train = new Instances (...);
train.setClassIndex(train.numAttributes() - 1);
Instances test = new Instances (...) + 
ClassificationType classificationType = ClassificationTypeDAO.get(6);       
LibSVM libsvm = new LibSVM();
String options = (classificationType.getParameters());
String[] optionsArray = options.split(" ");                  
libsvm.setOptions(optionsArray);
String[] pars = libsvm.getOptions();     
Evaluation eval = new Evaluation(train);
libsvm.buildClassifier(train);       
eval.evaluateModel(libsvm, test);

System.out.println(eval.toSummaryString("\nResults\n======\n", false)); 
Run Code Online (Sandbox Code Playgroud)

但是,正在抛出异常:

eval.evaluateModel(libsvm, test);

尽管try...catch围绕此代码进行了大量尝试,但null根据下面的完整堆栈跟踪,简单地报告了异常(这确实很有用).

我不相信这个问题是由于我自己的代码,因为其他分类器已成功运行它.我正在研究这个问题的原因是环境的理论.但在哪里和什么?我正在使用Tomcat通过NetBeans 8运行我的应用程序,weka.jar并且LibSVM.jar在应用程序的.lib文件夹中有最新版本的应用程序.

但是我需要libsvm.jar从下载提供:

http://www.csie.ntu.edu.tw/~cjlin/libsvm/

如果是后一种情况,我如何解决Windows中的命名冲突,LibSVM.jar并将libsvm.jar其视为同一文件?

在过去的几个小时里,这让我很困惑.我已经尝试将两个文件LibSVM.jar和 …

java jar weka libsvm

3
推荐指数
1
解决办法
4185
查看次数