簡體   English   中英

為什么分類器的score函數與sklearn中的cross_val_score函數返回的結果完全不同?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM