问题描述:
模型:from sklearn.svm import SVC
训练方法:用GridSearchCV和5折交叉验证,选择最佳参数后,在测试集上测试。
问题:当训练集数据不变,仅变换训练集数据的顺序时,测试结果会不一样。
原因:
不是SVM对训练数据的输入顺序敏感,问题在参数选择上。
5折交叉验证——将训练集数据随机划分为5份,拿其中一份验证,四份训练。
当训练集的数据顺序变化,验证和训练数据的划分会不一样。
由于随机划分的数据可能不均衡,不同划分结果最适合的模型参数会不一样,所以用GridSearchCV和5折交叉验证对不同的数据顺序返回不一样的最佳参数。
不一样的参数,自然会得到不一样的模型,在测试集上的结果也就不一样了。
打乱训练集顺序:
如果train_set是numpy.array,切记要使用——numpy.random.shuffle(train_set) ,能将数据按行打乱。
另一种打乱方法——random.shuffle(train_set),不适用2维array的打乱(详细解释的链接)。