我试图在matlab中使用libsvm来模拟二进制分类器的样本预测。我的目标变量(即我的标签)是二进制(-1 + 1)。因此,在我的测试集中有一系列我不知道标签。我为这些观察创建了一个新标签(这个标签是747)。我发现在我的predict_label_test向量中(见下面的代码),包含了这个747标签。所以这意味着我得到的预测受到包含测试集的数据标签的影响,这是我应该预测的? - 错误可能是我使用Libsvm读写函数的方式,但我找不到它 - 非常感谢!!
%%%%%%%%%%从CSV文件中获取数据并将其转换为LIBSVM
让addpath( 'C:\ libsvm1 \ MATLAB'); %表示CSV文件的位置
ALLDATA = csvread('DATACSV.csv'); %读取csv文件
labels = ALLDATA(:,1); %标签包含在第一列数据
中labels_sparse = sparse(标签); %?需要
features = ALLDATA(:,4:end); %功能从第4列开始
features_sparse = sparse(features); %要素必须在稀疏矩阵中
libsvmwrite('TTT.train',labels_sparse,features_sparse); %将文件写入libsvm格式
[label_vector,predictors_matrix] = libsvmread('C:\ libsvm1 \ matlab \ TTT.train'); %读取以Libsvm格式记录的文件
%%%%% DEFINE VECTOR AND MATRIX SIZE
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,:);
%的预测
param = [' - q -c 2 -g 3'];
bestModel = svmtrain(label_vector_test,predictors_matrix_test,param);
[predict_label_test,accuracy,prob_values] = svmpredict(label_vector_test,predictors_matrix_test,bestModel);
答案 0 :(得分:0)
当您使用训练数据进行训练时,您正在训练带有测试数据的svm模型:
bestModel = svmtrain(label_vector_test, predictors_matrix_test, param);
应该是:
bestModel = svmtrain(label_vector_train, predictors_matrix_train, param);