文档库 最新最全的文档下载
当前位置:文档库 › 关于如何在Matlab中如何使用libsvm

关于如何在Matlab中如何使用libsvm

关于如何在Matlab中如何使用libsvm
这里给出加州住房的例子,大家转载时请尊重版权,本例已列入新书《支持向量机的工程应用》,李应红,尉询楷编著,新书已正式开编,希望大家多提意见,
获得统计参数
for ii=1:100
cal_housing_data;
start=cputime;
%!svmtrain -s 0 -t 2 -g num2str(sigma) training.dat model.dat
dos(['svmtrain -s 3 -c 500 cal_housing_train.dat model.dat'])
train_time(ii)=cputime-start
params = libsvm2mat('model.dat');
No_sv(ii)=params.total_sv
dos(['svm-predict cal_housing_train.dat model.dat validation.txt'])
load validation.txt;
train_accuracy(ii)=sqrt(validation(end-1))
start1=cputime;
dos(['svm-predict cal_housing_test.dat model.dat validation1.txt'])
load validation1.txt
test_time(ii)=cputime-start1
test_accuracy(ii)=sqrt(validation1(end-1))
clear validation validation1 start start1;
end
av_train_time=mean(train_time);
dev_train_time=std(train_time);
av_test_time=mean(test_time);
dev_test_time=std(test_time);
av_train_accuracy=mean(train_accuracy);
dev_train_accuracy=std(train_accuracy);
av_test_accuracy=mean(test_accuracy);
dev_test_accuracy=std(test_accuracy);
av_No_sv=mean(No_sv);
save test1.mat;

%%%%%%%%%%%%%%%%%%%%
子程序
function params = libsvm2mat(fname)
%LIBSVM2MAT LibSVM to MATLAB conversion
% usage:
% params = libsvm2mat(model_file_name)
% or if you have a data file you would like to load
% params = libsvm2mat(data_file_name)

fid = fopen(fname,'r');
if (fid == -1), error(sprintf('%s not found!',fname')); end
while 1,
tline = fgetl(fid);
if ~ischar(tline), break, end
I = [findstr(tline,' ') length(tline)+1];
switch tline(1(1)-1),
case 'total_sv',
params.total_sv = sscanf(tline(I(1):end),'%f');
otherwise, % assume this to be a data file, double check if its true:
if isempty(str2num(tline(1(1)-1))),
disp([tline(1(1)-1) ' ignored!']);
else
k = 0;
while 1,
k = k + 1;
if ~ischar(tline), break, end
tline(find(tline == ':')) = ' ';
values = sscanf(tline, '%f')';
% params.y(k,1) = values(1);
%params.X(k, values(2:2:end)) = values(3:2:end);
tline = fgetl(fid);
end
end
end
end
fclose(fid);
%%%%%%%%%%%%%%%%%%%%%%%%%%
数据格式的生成
function cal_housing_data
%
%This file is used to load boston original data and generate random
%validation and test data.
% Created by skyhawk,2004.7.24
%
% function califonia_data
% %
%This file is used to load boston original data and generate random
%validation and test data.
% Created by skyhawk,2004.7.24
%

load cal_housing.data;
who
dataset=cal_housing;
rand_sequence=randperm(size(dataset,1));
temp_dataset=dataset;
dataset=temp_dataset(rand_sequence, ;
%预处理
for i=1:size(dataset,2)
if max(dataset(:,i))~=min(dataset(:,i))
dataset(:,i)= (datase

t(:,i)-min(dataset(:,i)))/(max(dataset(:,i))-min(dataset(:,i)));
% dataset(:,i)=(dataset(:,i)-mean(dataset(:,i)))/(std(dataset(:,i)));
else
dataset(:,i)=0;
end
end

P1=dataset(1:8000,1:size(dataset,2)-1);
T1=dataset(1:8000,size(dataset,2));

%Obtain Random Validation Matrix

X=dataset(8001:size(dataset,1),1:size(dataset,2)-1);
Y=dataset(8001:size(dataset,1),size(dataset,2));



fid1 = fopen('cal_housing_train.dat','w');

for i=1:size(P1,1)
fprintf(fid1,'%2.8f ',T1(i,1));

for j=1:size(P1,2)
fprintf(fid1,' %d:%2.8f',j, P1(i,j)); % for SVM

end
fprintf(fid1,'\n');

end
fclose(fid1);

fid1 = fopen('cal_housing_test.dat','w');

for i=1:size(X,1)
fprintf(fid1,'%2.8f ',Y(i,1));

for j=1:size(X,2)
fprintf(fid1,' %d:%2.8f',j, X(i,j)); % for SVM

end
fprintf(fid1,'\n');

end
fclose(fid1);


%%%%%%%%%%
加州的数据网上查的到,大家可以验证

相关文档
相关文档 最新文档