使用留一验证法进行分析
由于交叉验证法每次选取的测试集是随机的,因此每次运算结果未必相同。此时可采用留一验证法进行分析。
选取第0组作为测试集,其它为训练集重新训练模型,对第0组数据进行预测并验证是否正确。
选取第1组作为测试集,其它为训练集重新训练模型,对第1组数据进行预测并验证是否正确。
...
选取第n-1组作为测试集,其它为训练集重新训练模型,对第n-1组数据进行预测并验证是否正确。
统计这n组结果的准确率
from sklearn import datasets #鸢尾花数据集被sklearn的datasets所包含,需要引用
from sklearn.cross_validation import train_test_split
from sklearn.svm import SVC
from numpy import *
def data_svc_test(data, target, index): #3个参数分别为数据、类型编号标签、被选取的编号
x_train = vstack((data[0:index],data[index+1:-1])); #除第index号之外的数据为训练集
x_test = data[index]; #第index号数据为测试集
y_train = hstack((target[0:index],target[index+1:-1])); #除第index号之外标签为训练集
y_test = target[index]; #第index号标签为测试集
SVC_0 = SVC(kernel='rbf'); #建立SVC模型
SVC_0.fit(x_train,y_train)
predict = SVC_0.predict(x_test);
return predict==y_test; #返回结果是否预测正确
iris_dataset = datasets.load_iris();
iris_data = iris_dataset.data;
iris_target = iris_dataset.target;
length = iris_target.shape[0];
right = 0; #正确项个数
for i in range(0,length): #所有数据依次作为测试集,其余数据为训练集进行训练
right += data_svc_test(iris_data, iris_target, i);
print("%f%%"%(right*100.0/length)); #分类准确率