我是 ML 新手,正在嘗試運行基于決策樹的模型
我嘗試了以下
X = df[['Quantity']]
y = df[['label']]
params = {'max_depth':[2,3,4], 'min_samples_split':[2,3,5,10]}
clf_dt = DecisionTreeClassifier()
clf = GridSearchCV(clf_dt, param_grid=params, scoring='f1')
clf.fit(X, y)
clf_dt = DecisionTreeClassifier(clf.best_params_)
并得到了這里提到的警告
FutureWarning: Pass criterion={'max_depth': 2, 'min_samples_split': 2} as keyword args. From version 1.0 (renaming of 0.25) passing these as positional arguments will result in an error
warnings.warn(f"Pass {args_msg} as keyword args. From version "
后來,我嘗試運行以下命令并出現錯誤(但我已經使用 擬合模型.fit())
from sklearn import tree
tree.plot_tree(clf_dt, filled=True, feature_names = list(X.columns), class_names=['Iris-setosa', 'Iris-versicolor', 'Iris-virginica'])
NotFittedError: This DecisionTreeClassifier instance is not fitted yet. Call
'fit' with appropriate arguments before using this estimator.
可以幫助我解決此錯誤嗎?
uj5u.com熱心網友回復:
如果您選擇best_params_,則必須使用這些引數重新擬合模型。請注意,這些應該在傳遞給模型時被解包:
clf_dt = DecisionTreeClassifier(**clf.best_params_)
clf_dt.fit(X, y)
但是,您也可以使用該best_estimator_屬性直接訪問最佳模型:
clf_dt = clf.best_estimator_
uj5u.com熱心網友回復:
所以你面臨兩個問題。
第一
參考
FutureWarning:通過標準={'max_depth': 2, 'min_samples_split': 2} 作為關鍵字引數。從版本 1.0(重命名為 0.25)將這些作為位置引數傳遞將導致錯誤
您可以dict在創建時嘗試使用類建構式params:
params = dict(max_depth=[2,3,4], min_samples_split=[2,3,5,10])
但是這個警告似乎很奇怪,而且對我來說并沒有發生。
其次
參考
NotFittedError:尚未安裝此 DecisionTreeClassifier 實體。在使用此估算器之前,使用適當的引數呼叫“fit”。
在這里您可以了解sklearn 中的強制擬合步驟。但正如您所說,您只是在第一個代碼示例中這樣做了。你的問題是使用
clf_dt = DecisionTreeClassifier(clf.best_params_)
您創建了一個新DecisionTreeClassifier類,因此在您呼叫時不適合
tree.plot_tree(clf_dt ...)
你打電話的時候
clf = GridSearchCV(clf_dt, param_grid=params, scoring='f1')
sklearn 會根據clf您的情況自動分配最佳估算器。clf_dt = DecisionTreeClassifier(clf.best_params_)所以只需使用這個變數 :)不需要以下步驟。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/422910.html
標籤:
