标签: liblinear

不同svm库的不同精度在相同数据上具有相同参数

我正在使用libsvm并且我做了一个非常简单的实验,训练10k向量并且仅用22进行测试.我使用带参数成本的线性内核C=1.我的问题是多类.所以Libsvm将使用一对一的方法对我的数据进行分类.Libsvm使用SMO来查找分离超平面.

我的一个朋友做了同样的实验,但使用的SVM分类器来自统计工具箱.他还使用了来自R 的e1071软件包.再次,使用的内核是线性内核,参数成本C等于1,并且使用一对一方法对MATLAB中的数据进行分类(一对一方法由我的朋友编写)和e1071 R包.MATLAB统计工具箱和R的e1071都默认使用SMO方法查找分离超平面.

我也尝试了最新的LIBLINEAR库.同样,使用相同的配置.


以下是使用的代码:

libsvm 3.18(命令行)

./svm-scale -s train.range train.libsvm > train.scale 
./svm-scale -r train.range test.libsvm > test.scale
./svm-train -t 0 -c 1 train.scale train.model
./svm-predict test.scale train.model test.predict
Run Code Online (Sandbox Code Playgroud)

liblinear 1.94(命令行)

./svm-scale -s train.range train.libsvm > train.scale 
./svm-scale -r train.range test.libsvm > test.scale
./train train.scale train.model
./predict test.scale train.model test.predict
Run Code Online (Sandbox Code Playgroud)

[R

rm(list = ls())
cat("\014")
library(e1071)

cat("Training model\n")
Traindata = read.csv("train.csv", header=FALSE)
SVM_model = …
Run Code Online (Sandbox Code Playgroud)

matlab r svm libsvm liblinear

8
推荐指数
1
解决办法
2053
查看次数

为什么LinearSVC不能做这个简单的分类?

我正在尝试使用该LinearSVC对象进行以下简单分类scikit-learn.我尝试过同时使用0.10和0.14版本.使用代码:

from sklearn.svm import LinearSVC, SVC
from numpy import *

data = array([[ 1007.,  1076.],
              [ 1017.,  1009.],
              [ 2021.,  2029.],
              [ 2060.,  2085.]])
groups = array([1, 1, 2, 2])

svc = LinearSVC()
svc.fit(data, groups)
svc.predict(data)
Run Code Online (Sandbox Code Playgroud)

我得到输出:

array([2, 2, 2, 2])
Run Code Online (Sandbox Code Playgroud)

但是,如果我用分隔符替换分类器

svc = SVC(kernel='linear')
Run Code Online (Sandbox Code Playgroud)

然后我得到了结果

array([ 1.,  1.,  2.,  2.])
Run Code Online (Sandbox Code Playgroud)

哪个是对的.有谁知道为什么使用LinearSVC会破坏这个简单的问题?

python libsvm scikit-learn liblinear

6
推荐指数
1
解决办法
5729
查看次数

我该如何处理c ++中Liblinear的输出?

我试图liblinear在C ++中工作,但是对库的调用train(problem*, parameter*)将输出发送到终端。有时它说优化已完成,而其他时候似乎正在输出内部状态(为什么?)。此输出是什么意思,有可能抑制它或将其转移到某处的日志中吗?我boost::log在程序的其余部分中使用,并且我想控制程序显示的内容。我正在Ubuntu 12.10上运行它。

示例输出:

iter  1 act -6.742e-01 pre 1.191e-02 delta 3.443e-02 f 5.940e-02 |g| 1.730e-01 CG   1
cg reaches trust region boundary
iter  1 act -3.040e-02 pre 5.211e-03 delta 8.607e-03 f 5.940e-02 |g| 1.730e-01 CG   1
cg reaches trust region boundary
iter  1 act 5.453e-04 pre 1.442e-03 delta 6.791e-03 f 5.940e-02 |g| 1.730e-01 CG   1
cg reaches trust region boundary
iter  2 act 6.299e-04 pre 5.985e-04 delta 8.812e-03 f 5.886e-02 |g| 2.525e-01 …
Run Code Online (Sandbox Code Playgroud)

c++ liblinear

5
推荐指数
0
解决办法
1124
查看次数

什么可能导致 liblinear 达到最大迭代次数?

我将liblinear与我的程序一起使用,以通过L2R_L2LOSS_SVC_DUAL求解器执行多类分类。在当前的测试设置中,我有来自总共 9 个类的 1600 个实例,每个类有 1000 个特征。

我正在尝试通过 5 倍交叉验证确定用于训练的最佳 C 参数,但即使使用 1.0 liblinear 的小 C 也能达到最大迭代次数:

................................................................................
....................
optimization finished, #iter = 1000

WARNING: reaching max number of iterations
Using -s 2 may be faster (also see FAQ)

Objective value = -637.100923
nSV = 783
Run Code Online (Sandbox Code Playgroud)

FAQ网站提到了这两个可能的原因:

  1. 数据未缩放。
  2. 使用了一个大的 C 参数。
  3. 使用了大量具有少量特征的实例,因此求解器L2R_L2LOSS_SVC可能会更快。

没有一个适用于我的情况。因为我的特征向量是某种直方图,所以有一个自然最大值,我用它来将特征缩放到 [0,1]。

我为 liblinear 设置了参数,如下所示:

struct parameter svmParams;
svmParams.solver_type = L2R_L2LOSS_SVC_DUAL;
svmParams.eps = 0.1;
svmParams.nr_weight = 0;
svmParams.weight_label = NULL; …
Run Code Online (Sandbox Code Playgroud)

c classification machine-learning liblinear

5
推荐指数
0
解决办法
1401
查看次数

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

如何理解LIBLINEAR中的偏差参数?

我不理解LIBLINEAR的API中偏差参数的含义.为什么在培训期间由用户指定?它不应该只是从分离超平面到原点的距离,它是学习模型的参数吗?

这来自README:

struct problem
{
    int l, n;
    int *y;
    struct feature_node **x;
    double bias;
};
Run Code Online (Sandbox Code Playgroud)

如果bias> = 0,我们假设在每个数据实例的末尾添加了一个附加功能.

这个附加功能是什么?

libsvm liblinear

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

Libsvm / Lib Linear 中的实例称重

我经常将实例权重与 Libsvm 结合使用来解决分类问题。 http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/#weights_for_data_instances

有谁知道在 libsvm 中使用实例权重时实现的算法的细节吗?标准 SVM 模型学习算法为所有训练实例分配相同的权重,从而为训练实例的误差分配相同的权重。我相信 Libsvm 使用的算法会有所不同。在网上搜索时,我确实发现了一些做类似事情的论文。例如[1],但我需要与可能确定这一点的人确认。

谢谢!

[1] 杨旭雷,宋青,王悦. “用于数据分类的加权支持向量机。” 国际模式识别和人工智能杂志 21.05 (2007): 961-976。

machine-learning data-mining svm libsvm liblinear

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