簡體   English   中英

解讀sklearns的GridSearchCV最佳成績

[英]Interpreting sklearns' GridSearchCV best score

我想知道GridSearchCV返回的分數與如下計算的R2指標之間的差異。 在其他情況下,我收到的網格搜索得分非常負( cross_val_score ),我很感謝您解釋它的含義。

from sklearn import datasets
from sklearn.model_selection import (cross_val_score, GridSearchCV)
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import accuracy_score, r2_score
from sklearn import tree

diabetes = datasets.load_diabetes()
X = diabetes.data[:150]
y = diabetes.target[:150]
X = pd.DataFrame(X)

parameters = {'splitter':('best','random'), 
              'max_depth':np.arange(1,10), 
              'min_samples_split':np.arange(2,10), 
              'min_samples_leaf':np.arange(1,5)}

regressor = GridSearchCV(DecisionTreeRegressor(), parameters, scoring = 'r2', cv = 5)
regressor.fit(X, y)

print('Best score: ', regressor.best_score_)
best = regressor.best_estimator_
print('R2: ', r2_score(y_pred = best.predict(X), y_true = y))

regressor.best_score_是針對最佳參數組合的未完成測試折疊的r2分數的平均值。

在您的示例中,cv = 5,因此數據將被拆分為訓練和測試折疊5次。 該模型將安裝在火車上並在測試中評分。 將這5個測試分數取平均值即可得到分數。 請參閱文檔

“ best_score_:best_estimator的平均交叉驗證分數”

對所有參數組合重復上述過程。 並將其中的最佳平均分數分配給best_score_

您可以查看我的其他答案,以全面了解GridSearchCV

找到最佳參數后,將在完整數據上訓練模型。

r2_score(y_pred = best.predict(X), y_true = y)

與模型訓練所用的數據相同,因此在大多數情況下,它會更高。

@Davide在評論中鏈接的問題回答了為什么您獲得正R2分數的原因-模型的性能優於恆定的預測。 同時,如果那里的模型表現不佳,在其他情況下您可能會得到負值。

值差異的原因是, regressor.best_score_是在您執行的5倍拆分中的特定折疊上進行評估的,而r2_score(y_pred = best.predict(X), y_true = y)評估的是同一模型( regressor.best_estimator_ ),但在完整樣本上(包括用於訓練該估計量的(5-1)倍子集)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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