各位大侠,我在matlab中安装好libsvm后测试heart_scale,出现了一下问题, load heart_scale ??? Error using ==> load Number of columns on line 2 of ASCII file D:\Program Files (x86)\MATLAB\libsvm-3.12\heart_scale must be the same as previous lines. 后来在网上看到可以用libsvmread函数加载数据,但是没有出现 heart_scale_inst 和heart_scale_label这项,二是出现下面两个 |
27 条回复
我的也出现了同样的问题,不知道什么情况哎 |
这个载入就行了 |
2014-5-14 09:11 上传
点击文件名下载附件
28.23 KB, 下载次数: 11227
564669104 发表于 2013-7-13 17:09 你的问题解决了吗,我也遇到相同的问题了 |
peace_2013 发表于 2013-12-10 16:09 谢谢你。问题已解决。 |
clhfio 发表于 2014-5-14 09:13 谢谢。。。。。。。。。。。。。。。。。。。。 |
把heart_scale文件换成下面这个就可以 |
2017-6-22 11:50 上传
点击文件名下载附件
28.23 KB, 下载次数: 87
我用的是libsvm-3.22版本,在工具箱matlab目录下是没有heart_scale文件的,而是在该文件夹的上一级文件夹,故在读取的时候需要考虑到路径的问题 [a,b]=libsvmread('..\heart_scale') 这个跟视频中不一样的地方还有这个heart_scale文件并不是matlab的.mat文件,这属于版本问题,为了让给数据能适应其他的比如java等语言,更具有通用性。 |
使用[a,b]=libsvmread('..\heart_scale'),得到结果是图片所示。请问楼主怎么解决啊
后来下载了heart_scale.mat还是错误 >> [a,b]=load('E:\2017_sds\svm\heart_scale.mat'); Error using load Too many output arguments. >> [a,b]=libsvmread('E:\2017_sds\svm\heart_scale.mat'); Wrong input format at line 1 |
matlab打开README文件,有答案。我的是libsvm3.22。每个版本不一样的 Train and test on the provided data heart_scale: matlab> [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale'); matlab> model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07'); matlab> [predict_label, accuracy, dec_values] = svmpredict(heart_scale_label, heart_scale_inst, model); % test the training data For probability estimates, you need '-b 1' for training and testing: matlab> [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale'); matlab> model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07 -b 1'); matlab> [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale'); matlab> [predict_label, accuracy, prob_estimates] = svmpredict(heart_scale_label, heart_scale_inst, model, '-b 1'); To use precomputed kernel, you must include sample serial number as the first column of the training and testing data (assume your kernel matrix is K, # of instances is n): matlab> K1 = [(1:n)', K]; % include sample serial number as first column matlab> model = svmtrain(label_vector, K1, '-t 4'); matlab> [predict_label, accuracy, dec_values] = svmpredict(label_vector, K1, model); % test the training data We give the following detailed example by splitting heart_scale into 150 training and 120 testing data. Constructing a linear kernel matrix and then using the precomputed kernel gives exactly the same testing error as using the LIBSVM built-in linear kernel. matlab> [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale'); matlab> matlab> % Split Data matlab> train_data = heart_scale_inst(1:150,; matlab> train_label = heart_scale_label(1:150,; matlab> test_data = heart_scale_inst(151:270,; matlab> test_label = heart_scale_label(151:270,; matlab> matlab> % Linear Kernel matlab> model_linear = svmtrain(train_label, train_data, '-t 0'); matlab> [predict_label_L, accuracy_L, dec_values_L] = svmpredict(test_label, test_data, model_linear); matlab> matlab> % Precomputed Kernel matlab> model_precomputed = svmtrain(train_label, [(1:150)', train_data*train_data'], '-t 4'); matlab> [predict_label_P, accuracy_P, dec_values_P] = svmpredict(test_label, [(1:120)', test_data*train_data'], model_precomputed); matlab> matlab> accuracy_L % Display the accuracy using linear kernel matlab> accuracy_P % Display the accuracy using precomputed kernel Note that for testing, you can put anything in the testing_label_vector. For more details of precomputed kernels, please read the section ``Precomputed Kernels'' in the README of the LIBSVM package. |
Powered by Discuz! X3.4
© 2001-2024