簡體   English   中英

替代使用具有多個輸出的重復分層 K 折疊?

[英]Alternative to Using Repeated Stratified K Fold with Multiple Outputs?

我正在探索最適合我的模型的功能數量。 我知道重復分層 K 折疊需要 1 個一維數組 output,而我正在嘗試評估具有多個輸出的 output 的特征數量。 有沒有辦法將 Repeated Stratified K Fold 與多個輸出一起使用? 或者是否有替代方案來完成我需要的?

from sklearn import datasets
from numpy import mean, std
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score, RepeatedStratifiedKFold, KFold
from sklearn.feature_selection import RFE
from sklearn.tree import DecisionTreeClassifier
from sklearn.pipeline import Pipeline
from matplotlib import pyplot
def get_models():
   models = dict()
   for i in range(4,20):
      rfe = RFE(estimator = DecisionTreeClassifier(), n_features_to_select = i)
      model = DecisionTreeClassifier()
      models[str(i)] = Pipeline(steps=[('s', rfe), ('m', model)])
   return models
from sklearn.utils.multiclass import type_of_target
x = imp_data.iloc[:,:34]
y = imp_data.iloc[:,39]
model = DecisionTreeClassifier()
def evaluate_model(model,x,y):
   cv = RepeatedStratifiedKFold(n_splits=5, n_repeats=3, random_state=0)
   scores = cross_val_score(model, x, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score = 'raise')
return scores
models = get_models()
results, names = list(), list()
for name,model in models.items():
   scores = evaluate_model(model,x,y)
   results.append(scores)
   names.append(name)
   print('>%s %.3f (%.3f)' % (name, mean(scores), std(scores)))

據我所知,您可以使用 cross_validate() 作為具有多個 output 的 StratifiedKFold 的替代方案。您可以使用 StratifiedKFold 和評分指標定義交叉驗證技術作為您的偏好。 您可以查看下面的鏈接了解更多詳情!

https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_validate.html

暫無
暫無

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

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