标签: libsvm

使用LibSVM计算与Mean/Stddev对的最近匹配

我是SVM的新手,我正在尝试使用Python接口来libsvm来对包含mean和stddev的样本进行分类.但是,我得到了荒谬的结果.

这个任务不适合SVM,还是我使用libsvm时出错?下面是我用来测试的简单Python脚本:

#!/usr/bin/env python
# Simple classifier test.
# Adapted from the svm_test.py file included in the standard libsvm distribution.
from collections import defaultdict
from svm import *
# Define our sparse data formatted training and testing sets.
labels = [1,2,3,4]
train = [ # key: 0=mean, 1=stddev
    {0:2.5,1:3.5},
    {0:5,1:1.2},
    {0:7,1:3.3},
    {0:10.3,1:0.3},
]
problem = svm_problem(labels, train)
test = [
    ({0:3, 1:3.11},1),
    ({0:7.3,1:3.1},3),
    ({0:7,1:3.3},3),
    ({0:9.8,1:0.5},4),
]

# Test classifiers.
kernels = [LINEAR, POLY, RBF]
kname = ['linear','polynomial','rbf']
correct …
Run Code Online (Sandbox Code Playgroud)

python artificial-intelligence machine-learning svm libsvm

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

抑制模块外部库调用的输出

使用机器学习库PyML时,我遇到了一个恼人的问题.PyML使用libsvm来训练SVM分类器.问题是libsvm将一些文本输出到标准输出.但因为那是在Python之外我不能拦截它.我尝试使用问题中描述的方法在Python中静默函数的标准输出,而不会破坏sys.stdout并恢复每个函数调用,但这些都没有帮助.

有什么方法可以做到这一点.修改PyML不是一种选择.

python libsvm pyml

6
推荐指数
2
解决办法
3418
查看次数

使用预先计算的chi2内核与libsvm(matlab)时的错误结果

我正在尝试使用libsvm,并按照示例在软件附带的heart_scale数据上训练svm.我想使用我自己预先计算的chi2内核.培训数据的分类率降至24%.我确信我正确地计算了内核,但我想我一定是做错了.代码如下.你能看到任何错误吗?非常感谢帮助.

%read in the data:
[heart_scale_label, heart_scale_inst] = libsvmread('heart_scale');
train_data = heart_scale_inst(1:150,:);
train_label = heart_scale_label(1:150,:);

%read somewhere that the kernel should not be sparse
ttrain = full(train_data)';
ttest = full(test_data)';

precKernel = chi2_custom(ttrain', ttrain');
model_precomputed = svmtrain2(train_label, [(1:150)', precKernel], '-t 4');
Run Code Online (Sandbox Code Playgroud)

这是内核预先计算的方式:

function res=chi2_custom(x,y)
a=size(x);
b=size(y);
res = zeros(a(1,1), b(1,1));
for i=1:a(1,1)
    for j=1:b(1,1)
        resHelper = chi2_ireneHelper(x(i,:), y(j,:));
        res(i,j) = resHelper;
    end
end
function resHelper = chi2_ireneHelper(x,y)
a=(x-y).^2;
b=(x+y);
resHelper = sum(a./(b + eps));
Run Code Online (Sandbox Code Playgroud)

使用不同的svm实现(vlfeat),我获得了训练数据的分类率(是的,我在训练数据上测试,只是为了看看发生了什么)大约90%.所以我很确定libsvm结果是错误的.

matlab machine-learning svm libsvm

6
推荐指数
2
解决办法
3532
查看次数

libsvm c ++教程

寻找libSVM的C++接口的教程和/或示例代码.具体来说,我想对使用SIFT或SURF特征描述符提取的特征进行分类.

我试过在网站上查找并没有找到任何此类文档/示例代码.

c++ machine-learning svm libsvm

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

在R中抑制C警告消息

我从R包e1071调用一个R函数,它与libsvm(一个C程序)接口.此函数将C(printf)警告消息传递给R控制台.我知道这是因为警告消息的形式是(警告:......)而R警告消息是大写的(即警告:......).

我已经尝试了一切来摆脱R中的这些消息(下沉,抑制警告,看不见),但似乎没有任何效果.

有任何想法吗?

谢谢!

c gcc r libsvm

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

如何使用SVM找到精度,召回,准确度?

重复计算精度,召回和F分数

我有一个带文本描述和分类级别的输入文件(ielevelA和levelB).我想编写一个测量精度,召回率和准确度的SVM分类器.我看了scikitLIBSVM,但我想逐步了解更多.

任何示例代码或基本教程都会非常好.感谢您提前提出任何建议.

machine-learning svm libsvm scikit-learn

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

多处理和带指针的ctypes

我有multiProcessing.Process目标函数采用输入和输出队列的对象.

在输出队列中,他们放置了一些数据,即带有内部指针的包装ctypes结构.当然,pickle应该序列化数据的模块会破坏:

ValueError:包含指针的ctypes对象无法进行pickle

我可以以某种方式从我的子进程中获取带有指针的ctypes结构而不将它们转储到文件中吗?

代码如下

# -*- coding: utf-8 -*-
import multiprocessing as mp

from liblinear import *
from liblinearutil import *


def processTarget(inQueue, outQueue):
    while(not inQueue.empty()):
        inVal = inQueue.get()

        #training model
        y, x = [1,-1], [{1:inVal, 3:3*inVal}, {1:-1,3:-1}]
        prob  = problem(y, x)
        param = parameter('-c 4 -B 1')
        m = train(prob, param)


        outQueue.put((inVal * 2, m))
        print "done", inVal
        inQueue.task_done()

def Main():
    processes = []
    inQueue = mp.JoinableQueue()
    for i in xrange(10):
        inQueue.put(i)

    outQueue = …
Run Code Online (Sandbox Code Playgroud)

python ctypes multiprocessing libsvm

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

支持向量机与K最近邻居

我有一个数据集来分类.通过使用KNN算法,我得到90%的准确度,但通过使用SVM我只能超过70%.SVM并不比KNN好.我知道这可能是愚蠢的问题,但是,SVM的参数是什么,它将给出几乎近似的结果作为KNN算法.我在matlab R2008上使用libsvm包

matlab machine-learning libsvm

6
推荐指数
3
解决办法
8055
查看次数

scikit学习svc coef0参数范围

文档在这里.

我想知道coef0在多项式和sigmoid内核下SVC 的参数有多重要.据我了解,它是截距项,只是线性回归中的常数,用于将函数从零偏移.但据我所知,SVM(scikit使用libsvm)应该找到这个值.

什么是一个很好的通用范围来测试(有吗?).例如,通常情况下C,安全选择是10 ^ -5 ... 10 ^ 5,以指数步长上升.

但是,对于coef0,该值似乎高度依赖于数据,我不确定如何自动为每个数据集上的每个网格搜索选择好的范围.有什么指针吗?

svm libsvm svc scikit-learn

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

如何将地图转换为Spark的RDD

我有一个数据集,它是一些嵌套映射的形式,其Scala类型是:

Map[String, (LabelType,Map[Int, Double])]
Run Code Online (Sandbox Code Playgroud)

第一个String键是每个样本的唯一标识符,值是包含标签(-1或1)的元组,以及嵌套映射,它是与之关联的非零元素的稀疏表示.样品.

我想将这些数据加载到Spark(使用MUtil)并训练和测试一些机器学习算法.

使用LibSVM的稀疏编码将此数据写入文件很容易,然后将其加载到Spark中:

writeMapToLibSVMFile(data_map,"libsvm_data.txt") // Implemeneted some where else
val conf = new SparkConf().setAppName("DecisionTree").setMaster("local[4]")
val sc = new SparkContext(conf)

// Load and parse the data file.
val data = MLUtils.loadLibSVMFile(sc, "libsvm_data.txt")
// Split the data into training and test sets
val splits = data.randomSplit(Array(0.7, 0.3))
val (trainingData, testData) = (splits(0), splits(1))

// Train a DecisionTree model.
Run Code Online (Sandbox Code Playgroud)

我知道直接加载data变量应该很容易data_map,但我不知道如何.

任何帮助表示赞赏!

scala libsvm apache-spark apache-spark-mllib

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