【发布时间】: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 的输出文件,它给出了预测的类标签。