机器学习基础 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

使用留一验证法进行分析

由于交叉验证法每次选取的测试集是随机的,因此每次运算结果未必相同。此时可采用留一验证法进行分析。

选取第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));    #分类准确率