第七章分类模型性能评估(SVM)
- (简答题) 使用鸢尾花数据集,任取两类数据,随机取80%的数据做训练,20%做预测,采用SVM分类器分类(两类),输出预测结果,并且绘制训模型的ROC曲线,计算AUC值
我选了两个属性二分类,选三个属性的结果有点奇怪
感觉这样随机取样反倒麻烦了。。有没有大佬知道怎么能方便一点
homework7.m
clear
load fisheriris
r=100;
c=4;
tr=floor(r*0.8);
testr=r-tr;
ran=randsample(r,tr);
testData=zeros(testr,c);
trainData=zeros(tr,c);
trainc=1;
testc=1;
meas=meas(1:100,:);
y = zeros(100,1);
y(50:100)=1;
for i = 1:r
flag=0;
for j=1:tr
if(i==ran(j))
flag=1;
train_x(trainc,1:2)=meas(i,1:2);
train_y(trainc)=y(i);
trainc=trainc+1;
break;
end
end
if flag==0
test_x(testc,1:2)=meas(i,1:2);
test_y(testc)=y(i);
testc=testc+1;
end
end
svmmodel=svmtrain(train_x,train_y);
y_predict=svmclassify(svmmodel,test_x);
hold on
% plot(test_x(:,1),test_x(:,2),'bs','Markersize',12);
auc=plot_roc(y_predict,test_y);
display(auc);
% [XRF,YRF,TRF,AUCRF] = perfcurve(test_y,y_predict,1);
% plot(XRF,YRF)
plot_roc.m
function auc=plot_roc(predict,truth)
x=1.0;
y=1.0;
pos_num=sum(truth==1);
neg_num=sum(truth==0);
x_step=1.0/neg_num;
y_step=1.0/pos_num;
[predict,index]=sort(predict);
truth=truth(index);
for i=1:length(truth)
if truth(i)==1
y=y-y_step;
else
x=x-x_step;
end
X(i)=x;
Y(i)=y;
end
plot(X,Y,'-ro','LineWidth',2,'MarkerSize',3);
xlabel('虚报概率');
ylabel('击中概率');
title('ROC曲线');
auc=-trapz(X,Y);
end