2019-01-03

2019-01-03  本文已影响0人  无邪酱酱

题目:十折交叉验证SVM算法,计算精确度、召回率、特异性

代码:

import numpy as np

import scipy.io as sio

from sklearn.model_selection import

train_test_split# 分割数据模块

from sklearn import svm

#导入数据集

data=sio.loadmat('C:/Users/Desktop/data/AD')#导入数据的路径

X=data['PET']#数据

y=data['gnd']#标签

#X.shape, y.shape

#分割数据

X_train, X_test, y_train, y_test =train_test_split(X, y, test_size=0.1, random_state=0)

#print(X_train.shape, y_train.shape)

#print(X_test.shape, y_test.shape)

#建立模型,训练模型

#clf = svm.SVC(kernel='linear',C=1).fit(X_train, y_train)

#clf.score(X_test, y_test)     

from sklearn.model_selection import

cross_val_score## K折交叉验证模块

from sklearn.model_selection importcross_val_predict

clf = svm.SVC(kernel='linear', C=1)

scores = cross_val_score(clf, X, y, cv=10)#cv=10,十折

print('十折的交叉验证得分:',scores)

print('平均得分:',scores.mean())

predicted = cross_val_predict(clf,X, y,cv=10)

'''

#scores1与scores的结果相同,都可以用来计算精准度。

print('标准差:',scores.std())

print("Accuracy: %0.2f (+/-%0.2f)" % (scores.mean(), scores.std() * 2))

#print('predicted:',predicted)#预测的值

scores1 = cross_val_score(clf, X, y, cv=10,scoring='accuracy')

print(scores1.mean())

'''

#计算特征

a,b,p1,t1,t2=0,0,0,0,0

for i in range(102):

   if y[i]==1&predicted[i]==1:a=a+1

   if y[i]==2&predicted[i]==2:b=b+1

   if predicted[i]==1:p1=p1+1

   if y[i]==1:t1=t1+1

   if y[i]==2:t2=t2+1

print('真阳性a:{},真阴性b:{},所有预测为阳性数量p1:{},所有实际为阳性数量t1:{},t2:{}'.format(a,b,p1,t1,t2))

print('精确度:',a/p1)

print('召回率:',a/t1)#灵敏度

print('特异性:',b/t2)

结果:

十折的交叉验证得分: [0.91666667  0.90909091  0.9 0.8  0.9  1. 0.9 0.8  0.9        0.9 ]

平均得分:0.8925757575757576

真阳性a:45,真阴性b:46,所有预测为阳性数量p1:50,所有实际为阳性数量t1:51,t2:51

精确度:0.9

召回率:0.8823529411764706

特异性:0.9019607843137255

链接:https://pan.baidu.com/s/1J-X1w9WQSSMWMn9mYw1PvA

提取码:hxoe

上一篇下一篇

猜你喜欢

热点阅读