如何在svm多标签中进行文件培训和测试? 我的问题是https://www.quora.com/Can-anyone-give-me-some-pointers-for-using-SVM-for-user-recognition-using-keystroke-timing/answer/Chomba-Bupe?snid3=364610243&nsrc=1&filter=all
我的项目是动态键盘,用户与所有用户进行培训 例如,如果你有三个类A,B和C,那么你将拥有3个SVM,每个SVM都有自己的参数,即权重和偏差,3个独立的输出分别对应3个类。当训练SVM-A时,另外两个B类和C类作为负训练集而A作为正数,那么当训练SVM-B A和C是负训练集时,对于SVM-C A和B则是负数。这就是所谓的一对一培训程序。
我尝试但结果出错了
我的培训文件是.csv并包含:
65 134,+ 1
70 98,+ 1
73 69,+ 1
82 122,+ 1
82 95,+ 1
83 127,+ 1
84 7,+ 1
85 64,+ 1
65 123,-1
71 115,-1
73 154,-1
73 156,-1
77 164,-1
77 144,-1
79 112,-1
83 91,-1
我的测试文件是.csv,内容是:
65 111
68 88
70 103
73 89
82 111
82 79
83 112
84 36
85 71
我的代码是
'use strict';
var so = require('stringify-object');
var Q = require('q');
var svm = require('../lib');
var trainingFile = './archivos/training/340.txt';
var testingFile = './archivos/present/340.txt';
var clf = new svm.CSVC({
gamma: 0.25,
c: 1, // allow you to evaluate several values during training
normalize: false,
reduce: false,
kFold: 1 // disable k-fold cross-validation
});
Q.all([
svm.read(trainingFile),
svm.read(testingFile)
]).spread(function (trainingSet, testingSet) {
return clf.train(trainingSet)
.progress(function(progress){
console.log('training progress: %d%', Math.round(progress*100));
})
.then(function () {
return clf.evaluate(testingSet);
});
}).done(function (evaluationReport) {
console.log('Accuracy against the testset:\n', so(evaluationReport));
});
enter code here
答案 0 :(得分:1)
你的标签是1还是-1?如果是这样,您还需要知道这些类的测试数据。测试分类器的目的是看它能预测看不见的数据的程度。
作为一个小例子,您可以使用您的训练数据构建分类器:
x_train = [65, 134], [70,98]....... [79, 112], [83, 91]
y_train = [ 1, 1, ....-1, -1]
然后通过传入测试数据来测试分类器。假设您传递了测试数据中的前三个示例,并进行了以下预测。
[65, 111] --> 1
[68, 88] -->-1
[70,103] -->-1
然后计算出它预测的测试数据的数量,但为了做到这一点,您需要先了解测试数据的类别。如果你没有这个,也许你想尝试对你的训练数据进行交叉验证。