Python Sklearn交叉验证产生与手动执行不同的结果

Python Sklearn交叉验证产生与手动执行不同的结果,python,scikit-learn,cross-validation,Python,Scikit Learn,Cross Validation,使用Sklearn,我正在用Python和逻辑回归进行监督学习。我还使用交叉验证来测试我的预测准确性 当我自己做交叉验证时,我想测试我是否有类似的结果。结果如下: # X is my features. (m x p) # y is labels. (m x 1) # Using cross_validation.cross_val_score() function: classifier = LogisticRegression() scores1 = cross_validation.cr

使用Sklearn,我正在用Python和逻辑回归进行监督学习。我还使用交叉验证来测试我的预测准确性

当我自己做交叉验证时,我想测试我是否有类似的结果。结果如下:

# X is my features. (m x p)
# y is labels. (m x 1)

# Using cross_validation.cross_val_score() function:
classifier = LogisticRegression()
scores1 = cross_validation.cross_val_score(classifier, X, y, cv=10)
print("Accuracy: %0.2f (+/- %0.2f)" % (scores1.mean(), scores1.std() * 2))

# Doing it "manual":
scores2 = np.array( [] )
classifier = LogisticRegression()
for i in range(10):
   X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y,
                                                    test_size=0.1, random_state=i)
   classifier.fit(X_train,y_train)
   score = classifier.score(X_test, y_test)
   scores2 = np.append(scores2, score)

print("Accuracy: %0.2f (+/- %0.2f)" % (scores2.mean(), scores2.std() * 2))

# This prints:
# Accuracy: 0.72 (+/- 0.47)
# Accuracy: 0.58 (+/- 0.52) 
我有相当大的X和y。所以我没想到结果会有很大的不同。这种差异完全是由于过程的随机性,还是我在代码中遗漏了什么

这是交叉验证的文档页。交叉验证分数()

这是交叉验证的文档页。训练测试分割()


训练测试分割
使用随机训练和测试集分割,而
交叉测试分数(cv=10)
使用分层k倍交叉验证

尝试使用cv=ShuffleSplit(测试大小=0.1)。这会给你更多类似的结果。它不会使用与您相同的随机种子设定,因此它们可能仍然会有所不同。但如果他们彼此都在外面,那就太奇怪了