在讨论sklearn实现验证前,记录一个关于模型验证的常识以便今后查阅。
在通过训练获得一个对象后,需要进行验证。此时,对于验证数据有一定的要求。之前,我的做法是从原始数据中随机抽取10000组数据进行验证,验证效果证明还可以。但是突然发现一个问题,由于应用是用于检测异常信息,而异常信息与正常信息相比,占比很低,这样验证出来的结果是不可靠的。例如,天气预报中预测降水不容易,平常人靠猜猜中的概率很低。但是如果猜不降水,也就是猜明天不下雨,那其实猜中的概率是很高的。所以对于验证数据,需要加大异常信息的比重,最终发现其实结果并没有那么完美。
验证的过程需要放入交叉验证。在模型训练的过程中,在没有把握之前尽量不碰用于验证的数据。可以采用交叉验证。其中cv是指把样本随机分成几份,scoring指评估方式以“准确率”的形式展现。
在验证分类的结果时,还可以采用混淆矩阵来帮助查看分类器。当然,由于多标签分类的特殊性,无法利用混淆矩阵。目前,在多类别分类中应用效果较好。每行每列都有准确分类和误分的数量。
对于最终的验证,sklearn也同样提供了工具帮助完成。
[[2892 17 18 0 0 0 0 0 0]
[ 5 1435 0 0 9 0 0 0 0]
[ 11 0 298 0 0 1 0 0 0]
[ 0 0 0 0 0 0 0 0 0]
[ 3 75 0 0 4750 0 0 45 0]
[ 19 0 70 0 0 769 0 0 0]
[ 1 0 0 0 0 0 0 0 0]
[ 24 0 0 1 119 0 0 255 0]
[ 5 0 0 0 1 13 0 0 161]]
from sklearn.model_selection import cross_val_score
cross_val_score(clf, x_train, ytrain, cv=5, scoring="accuracy")
from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, y_result)
from sklearn.metrics import accuracy_score
accuracy_score(y_result, y_test)