我使用了两种方法,使用相同的SKlearn决策树,一种方法使用验证集,另一种方法使用K-Fold。但是我不确定我是否真的通过使用KFold来实现任何目标。从技术上讲,交叉验证确实显示准确度提高了5%,但我不确定这是否只是这个特定数据的偏差,从而扭曲了结果。
对于我实施的KFold,我首先使用以下方法将训练集分割成段:
f = KFold(n_splits=8)
f.get_n_splits(data)
然后使用
从中获取数据帧y_train, y_test = y.iloc[train_index], y.iloc[test_index]
在一个循环中,正如许多关于如何做到的在线教程中所见证的那样。然而,这是棘手的部分。我看到的教程有一个.train()函数,我不认为这个决策树分类器。相反,我只是这样做:
tree = tree.DecisionTreeClassifier()
tree.fit(X_train, y_train)
predictions = tree.predict(X_test)
达到的准确度分数为:
Accuracy score: 0.79496591505
Accuracy score: 0.806502359727
Accuracy score: 0.800734137389
... and so on
但是我不确定我是否真的通过这样做来使我的分类器更好,因为分数上下变化。这不仅仅是将9个独立的结果比较在一起吗? K-fold的目的不是为了训练分类器更好吗?
我已经阅读了类似的问题,并发现K-fold旨在提供一种比较“独立实例”的方法,但我想确保是这种情况,而不是我的代码在某种程度上存在缺陷。
答案 0 :(得分:1)
K-fold的目的不是为了训练分类器更好吗?
K-fold的目的是防止分类器过度拟合训练数据。因此,在每个折叠上,您保留一个单独的测试集,分类器没有看到并验证其准确性。您可以对预测进行平均,以了解分类器的效果。
这不仅仅是将9个独立的结果进行比较吗?
是的,您比较不同的分数,看看分类器的表现最佳
答案 1 :(得分:1)