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