Задача: У меня есть определенный набор данных, которые нужно классифицировать - Полезно (1)/Бесполезно (0). Я предоставил полный набор данных в качестве входных данных для целей обучения классификатора. и тест с различными наборами данных.libsvm классификация - на плохом этапе до сих пор
Для этого я пытаюсь преобразовать свои данные в формат LIBSVM. прежде чем что-либо делать, я подумал о предоставлении числового ввода одного вектора и проверить результат.
Вход:
Обучение: 1 1 2 (первый 1 указывает, полезный класс в этом векторе следуют цифровой вход) Тестирование: 1 1 2 (Я не уверен, что формат входных данных)
Выход:
(0: 0,9982708183417436) (1: 0,0017291816582564153) (Actual: 1,0 Прогноз: 0,0)
Я не имею класс 0 в обучающем наборе, но она probEstimated для класса 0.
Я не уверен, как преобразовать данные в числовой векторный ввод и получить данные из набора числовых тестовых данных в эквивалентные данные, как указано. ЛЮБАЯ ПОМОЩЬ В ЭТОМ РЕГАРДЕ ВЫСОКО ПРИЗНАНА.
Запланированные задания: 1. Загрузите все данные в таблицы Hash и получите ключи для сохранения в наборах данных с соответствующим классификатором - ПОЛЕЗНО (1). 2. Поставьте набор данных в svmTrain и получите модель. 3. Подготовьте набор тестовых данных (преобразуйте каждое слово/фразу в соответствующее числовое значение сохраненного набора тренировок, если оно найдено. Else, назначьте новое значение). 4. Поставьте тестовый набор и модель в метод EVALUATE SVM. 5. Получите результирующие векторы из класса USEFUL и перегруппируйте их с данными.
Код: используется для разных источников.общественного класса Datatosvmformat {
static double[][] train = new double[1000][3];
public static void main(String[] args) {
// TODO Auto-generated method stub
HashMap<String, Integer> dataSet = new HashMap<String, Integer>();
double[][] test = new double[10][3];
train[1][0] = 1;
train[1][1] = 1;
train[1][2] = 2;
svm_model model = svmTrain();
//Test Data Set
double[] test1 = new double[3];
test1[0] = 1;
test1[1] = 1;
test1[2] = 2;
evaluate(test1,model);
}
private static 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 = 0; i <dataCount; i++){
double[] features = train[i];
//ystem.out.println("Features "+features[i]);
prob.x[i] = new svm_node[features.length-1];
for (int j = 1; j < features.length; j++){
svm_node node = new svm_node();
node.index = j;
node.value = features[j];
prob.x[i][j-1] = node;
}
prob.y[i] = features[0];
}
svm_parameter param = new svm_parameter();
param.probability = 1;
param.gamma = 0.5;
param.nu = 0.5;
param.C = 1;
param.svm_type = svm_parameter.C_SVC;
param.kernel_type = svm_parameter.LINEAR;
param.cache_size = 20000;
param.eps = 0.001;
svm_model model = svm.svm_train(prob, param);
return model;
}
public static double evaluate(double[] features, svm_model model)
{
svm_node[] nodes = new svm_node[features.length-1];
for (int i = 1; i < features.length; i++)
{
svm_node node = new svm_node();
node.index = i;
node.value = features[i];
nodes[i-1] = node;
}
int totalClasses = 2;
int[] labels = new int[totalClasses];
svm.svm_get_labels(model,labels);
double[] prob_estimates = new double[totalClasses];
double v = svm.svm_predict_probability(model, nodes, prob_estimates);
for (int i = 0; i < totalClasses; i++){
System.out.print("(" + labels[i] + ":" + prob_estimates[i] + ")");
}
System.out.println("(Actual:" + features[0] + " Prediction:" + v + ")");
return v;
}
}
Спасибо за ответ, получили определенную ясность. Спасибо. – user1830284