简单交叉验证
-
随机按一定比例划分:67% : 33%
K折交叉验证
-
数据集等分为k组,每组都作一次验证集,得到k个模型,k个结果取平均 ,k一般取3,5,10
留一交叉验证
-
N个数据,每个样本都做验证集,其余N-1个为训练集,得到N个模型,N个模型结果取平均
-
优点:准确率高,随机影响小
-
缺点:计算量大
-
适用于数据量小的情况:比如N<50
黄金准则
-
不知道如何分离数据集时,选择K折交叉验证,不知道K取多少,选择K = 10
代码实践
- cross_val_score函数中的 cv 参数用于设置折数
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.cross_validation import cross_val_score
def ():
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=4)
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
scores = cross_val_score(knn, X, y, cv=5, scoring='accuracy')
print(scores)
print(scores.mean()) # 0.9733333333333334
if __name__ == '__main__':
cv_train()