[英]Why the classifier's score function return a quite different result from cross_val_score function in sklearn?
我正在使用sklearn訓練決策樹分類器。
但是發生了一件奇怪的事情。
決策樹的得分函數(0.88)返回的准確性比cross_val_score
(約0.84)高得多。
根據文檔 ,得分功能還可以計算平均准確度。
兩者都應用於測試數據集(87992個樣本)。
交叉驗證是基於子集進行計算的,如果結果略有不同,這是有意義的,但是現在差異非常大。
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score
clf_tree = DecisionTreeClassifier()
clf_tree.fit(X_train, y_train)
print('Accuracy: %f' % clf_tree.score(X_test, y_test))
print((cross_val_score(clf_tree, X_test, y_test, cv=10, scoring='accuracy')))
print(classification_report(clf_tree.predict(X_test), y_test))
輸出:
Accuracy: 0.881262
[0.84022727 0.83875 0.843164 0.84020911 0.84714172 0.83929992 0.83873167 0.8422548 0.84089101 0.84111831]
precision recall f1-score support
0 0.89 0.88 0.88 44426
1 0.88 0.89 0.88 43566
micro avg 0.88 0.88 0.88 87992
macro avg 0.88 0.88 0.88 87992
weighted avg 0.88 0.88 0.88 87992
這到底是怎么回事? 感謝您的任何建議。
您對cross_val_score的功能有cross_val_score
。
假設您有一個包含100行的數據集,並將其拆分為訓練(70%)和測試(30%),然后在代碼的以下部分中將訓練70行並使用30行進行測試:
clf_tree = DecisionTreeClassifier()
clf_tree.fit(X_train, y_train)
print('Accuracy: %f' % clf_tree.score(X_test, y_test))
另一方面,您致電
print((cross_val_score(clf_tree, X_test, y_test, cv=10, scoring='accuracy')))
在這里, cross_val_score
會獲取您的30行測試數據並將其分為10部分。 然后,它使用9個部分進行訓練,並使用1個部分來測試完全經過訓練的新分類器。 將重復該操作,直到對每個塊進行一次測試(10次)。
因此,最后,您的第一個分類器接受了70%的數據訓練,而cross_val_score
的10個分類器接受了27%的數據訓練。
通常在機器學習中,我們看到更多的數據可以獲得更好的結果。
明確點。 在您的代碼中,以下兩行將完全相同:
print((cross_val_score(clf_tree, X_test, y_test, cv=10, scoring='accuracy')))
print((cross_val_score(DecisionTreeClassifier(), X_test, y_test, cv=10, scoring='accuracy')))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.