【问题标题】:Libsvm dummy labels interferring with prediction干扰预测的 Libsvm 虚拟标签
【发布时间】:2014-04-20 22:36:27
【问题描述】:

我正在尝试在 matlab 中使用 libsvm 模拟二进制分类器的样本外预测。我的目标变量(即我的标签)是二进制的(-1 +1)。因此,在我的测试集中有一些我不知道标签的系列。我为这些观察创建了一个新标签(这个标签是 747)。我发现在我的 predict_label_test 向量(见下面的代码)中,包含了这个 747 标签。所以这意味着我得到的预测受到包含测试集的数据标签的影响,这就是我应该预测的? - 错误可能在于我使用 Libsvm 读写函数的方式,但我找不到它 - 非常感谢!!

%%%%%%%%%% 从 CSV 文件中获取数据并将其转换为 LIBSVM

addpath('C:\libsvm1\matlab'); %表示CSV文件的位置

ALLDATA = csvread('DATACSV.csv'); % 读取一个 csv 文件

标签 = ALLDATA(:, 1); % 标签包含在第一列数据中

labels_sparse = 稀疏(标签); %?需要

特征 = ALLDATA(:, 4:end); % 特征从第 4 列开始

features_sparse = 稀疏(特征); % 特征必须在稀疏矩阵中

libsvmwrite('TTT.train', labels_sparse, features_sparse); % 将文件写入 libsvm 格式

[label_vector, predictors_matrix] = libsvmread('C:\libsvm1\matlab\TTT.train'); %读取以Libsvm格式记录的文件

%%%%% 定义向量和矩阵大小

label_vector_train = label_vector (1:143,:);

predictors_matrix_train = predictors_matrix (1:143,:);

label_vector_test = label_vector (144:193,:);

predictors_matrix_test = predictors_matrix (144:193,:);

%预测

参数 = ['-q -c 2 -g 3'];

bestModel = svmtrain(label_vector_test, predictors_matrix_test, param);

[predicted_label_test, accuracy, prob_values] = svmpredict(label_vector_test, predictors_matrix_test, bestModel);

【问题讨论】:

  • 来自 Libsvm FaQ--- 但我还是不明白“:我不知道测试数据的类标签。我应该在测试文件的第一列中放什么?任何值都是好的。在这种情况下,您将使用 svm-predict 的输出文件,它给出了预测的类标签。

标签: matlab libsvm


【解决方案1】:

您正在使用测试数据训练 svm 模型,何时应该使用训练数据对其进行训练:

bestModel = svmtrain(label_vector_test, predictors_matrix_test, param);

应该是:

bestModel = svmtrain(label_vector_train, predictors_matrix_train, param);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 2019-05-07
    • 2015-02-01
    • 2018-04-04
    • 2022-09-28
    • 2017-05-12
    • 2014-05-09
    相关资源
    最近更新 更多