我有兴趣测试SVM性能,将几个人分为四组/每组.当使用MATLAB中的svmtrain LibSVM函数时,我能够根据该等式的值得到用于对这4个组中的个体进行分类的三个方程式.计划如下:
                All individuals (N)*
                      |
 Group 1 (n1) <--- equation 1 --->  (N-n1)
                                      |
                   (N-n1-n2) <--- equation 2 ---> Group 2 (n2)
                      |
Group 3 (n3) <--- equation 3 ---> Group 4(n4)
*N = n1+n2+n3+n4
有没有办法在e1071 R包中使用svm函数来获得这些方程式?
我知道交叉验证用于选择好的参数.找到它们之后,我需要在不使用-v选项的情况下重新训练整个数据.
但我面临的问题是,在使用-v选项训练后,我获得了交叉验证的准确性(例如85%).没有模型,我看不到C和gamma的值.在那种情况下,我如何重新训练?
顺便说一句,我应用10倍交叉验证.例如
optimization finished, #iter = 138
nu = 0.612233
obj = -90.291046, rho = -0.367013
nSV = 165, nBSV = 128
Total nSV = 165
Cross Validation Accuracy = 98.1273%
需要一些帮助..
为了获得最佳的C和gamma,我使用LIBSVM FAQ中提供的代码
bestcv = 0;
for log2c = -6:10,
  for log2g = -6:3,
    cmd = ['-v 5 -c ', num2str(2^log2c), ' -g ', num2str(2^log2g)];
    cv = svmtrain(TrainLabel,TrainVec, cmd);
    if (cv >= bestcv),
      bestcv = cv; bestc = 2^log2c; bestg = 2^log2g;
    end
    fprintf('(best c=%g, g=%g, rate=%g)\n',bestc, bestg, …我正在使用多维SVM分类器(SVM.NET,libSVM的包装器)来分类一组功能.
给定SVM模型,是否可以合并新的训练数据而无需重新计算所有先前的数据?我想另一种方式是:SVM是否可变?
我正在尝试使用libsvm的java绑定:
http://www.csie.ntu.edu.tw/~cjlin/libsvm/
我已经实现了一个"平凡"的例子,它可以在y中轻松地线性分离.数据定义为:
double[][] train = new double[1000][]; 
double[][] test = new double[10][];
for (int i = 0; i < train.length; i++){
    if (i+1 > (train.length/2)){        // 50% positive
        double[] vals = {1,0,i+i};
        train[i] = vals;
    } else {
        double[] vals = {0,0,i-i-i-2}; // 50% negative
        train[i] = vals;
    }           
}
第一个"特征"是类,并且训练集类似地定义.
训练模型:
private svm_model svmTrain() {
    svm_problem prob = new svm_problem();
    int dataCount = train.length;
    prob.y = new double[dataCount];
    prob.l = dataCount;
    prob.x = new svm_node[dataCount][];     
    for (int i …我正在使用libSVM.假设我的功能值采用以下格式:
                         instance1 : f11, f12, f13, f14
                         instance2 : f21, f22, f23, f24
                         instance3 : f31, f32, f33, f34
                         instance4 : f41, f42, f43, f44
                         ..............................
                         instanceN : fN1, fN2, fN3, fN4
我认为可以应用两种缩放.
缩放每个实例向量,使得每个向量具有零均值和单位方差.
    ( (f11, f12, f13, f14) - mean((f11, f12, f13, f14) ). /std((f11, f12, f13, f14) )
将上述矩阵的每个列缩放到一个范围.例如[-1,1]
根据我对RBF内核(libSVM)的实验,我发现第二个缩放(2)将结果提高了大约10%.我不明白为什么(2)给我一个改进的结果.
任何人都可以解释一下应用缩放的原因是什么,为什么第二个选项会给我带来改进的结果?
我想制作libsvm格式,所以我将数据帧设置为所需的格式,但我不知道如何转换为libsvm格式.格式如图所示.我希望所需的libsvm类型是用户项:rating.如果您知道在当前情况下该怎么做:
val ratings = sc.textFile(new File("/user/ubuntu/kang/0829/rawRatings.csv").toString).map { line =>
     val fields = line.split(",")
      (fields(0).toInt,fields(1).toInt,fields(2).toDouble)
}
val user = ratings.map{ case (user,product,rate) => (user,(product.toInt,rate.toDouble))}
val usergroup = user.groupByKey 
val data =usergroup.map{ case(x,iter) => (x,iter.map(_._1).toArray,iter.map(_._2).toArray)}
val data_DF = data.toDF("user","item","rating")

我正在使用Spark 2.0.
libsvm apache-spark apache-spark-sql apache-spark-ml apache-spark-mllib
如何读/写libsvm数据R?
该libsvm格式是这样稀疏数据
<class/target>[ <attribute number>:<attribute value>]*
(参见压缩行存储(CRS))例如,
1 10:3.4 123:0.5 34567:0.231
0.2 22:1 456:03
我相信我可以自己鞭打一些东西,但我宁愿使用现成的东西.但是,R库foreign似乎没有提供必要的功能.
我在C-SVC模式下使用libsvm,使用2阶多项式内核,我需要训练多个SVM.在训练过程中,我为一些我训练的SVM得到了一个甚至两个警告:
WARNING: using -h 0 may be faster
*
WARNING: reaching max number of iterations
optimization finished, #iter = 10000000
我找到了h参数的描述:
-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)
我试图阅读libsvm文档中的解释,但对我来说这有点太高了.任何人都可以提供一个外行的解释,或许,一些建议,如设置这将是有益的,因为......?此外,如果通过为我训练的所有SVM设置此参数,可能会对那些未明确发出此警告的SVM的准确性产生负面影响,将会很有帮助.
我不知道该怎么做其他警告.
只是为了提供更多细节:我的训练集有10个属性(特征),它们由5000个向量组成.
更新:
如果其他人获得"达到最大迭代次数",则似乎是由数值稳定性问题引起的.而且,这将产生非常慢的训练时间.多项式内核确实受益于使用交叉验证技术来确定正则化的最佳值(C参数),并且在多项式内核的情况下,对我来说它有助于保持小于8.此外,如果内核是不均匀的\ sum(\ gamma x_i s_i + coef0)^ d(对不起,SO不支持LaTeX),其中coef0!= 0,然后交叉验证可以使用网格搜索技术实现gamma和C,因为,在此例如,gamma(1/number_of_features)的默认值可能不是最佳选择.尽管如此,根据我的实验,你可能不希望gamma太大,因为它会导致数字问题(我正在尝试最大值为8).
为了进一步了解gamma和C的可能值,我们应该尝试在grid.py中进行挖掘.
我读了这篇关于scikit-learn SVC()和LinearSVC()scikit-learn 之间差异的帖子.
现在我有一个二进制分类问题的数据集(对于这样的问题,两个函数之间的一对一/一对一策略差异可以忽略.)
我想尝试在这两个函数给出相同结果的参数下.首先,当然,我们应该设置kernel='linear'为SVC()
但是,我无法从两个函数中得到相同的结果.我无法从文档中找到答案,有人可以帮我找到我想要的等效参数集吗?
更新:我从scikit-learn网站的一个例子中修改了以下代码,显然它们不一样:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
# import some data to play with
iris = datasets.load_iris()
X = iris.data[:, :2]  # we only take the first two features. We could
                      # avoid this ugly slicing by using a two-dim dataset
y = iris.target
for i in range(len(y)):
    if (y[i]==2):
        y[i] = 1
h = .02  # …