

Pythonで、層化5分割交差検証の各分割ごとにランダムフォレストの重要度評価を行うコードを書きたいです。

５種類の分割データでランダムフォレストの重要度を求め、特徴重要度を降順で示した図を5つ出したいのですが、1つの図しか出ません。  
そもそもデータを正しく層化5分割し、そのデータでランダムフォレストの学習を行うコードとなっていますでしょうか？

どなたかご教授くださいますよう、お願いします。

[code]

    K = 5
    kf = StratifiedKFold(n_splits=K, shuffle=True, random_state=42)
    
    for fold, (train_indices, test_indices) in enumerate(kf.split(X,y)):
        X_train, X_test = X[train_indices], X[test_indices]
        y_train, y_test = y[train_indices], y[test_indices]
    
    
    # ランダムフォレストのモデル構築
        model = RandomForestClassifier(n_estimators=100,
                                       n_jobs=-1,random_state=42,max_samples=None)
        model.fit(X_train, y_train)
    
    #特徴量の重要度
        feature = model.feature_importances_
    #特徴量の名前
        label = df.columns[1:]
    #特徴量の重要度順(降順)
        indices = np.argsort(feature)[::1]
    
    # プロット
        x = range(len(feature))
        y = feature[indices]
        y_label = label[indices]
        plt.figure(figsize=(30,42))
        plt.barh(x, y, align = 'center')
        plt.yticks(x, y_label)
        plt.xlabel("importance_num")
        plt.ylabel("label")
        plt.rcParams["font.size"] = 9
        plt.show()
    
    #特徴量の名前
        label = df.columns[1:]
    
    #特徴量の重要度順（降順）
        indices = np.argsort(feature)[::-1]
        for i in range(len(feature)):
            print(str(i + 1) + "   " + str(label[indices[i]]) + "   " + str(feature[indices[i]]))
    
[/code]


CC BY-SA 4.0
2021-09-10T10:59:52.217
82405
2022-03-30T07:22:52.343
2021-09-10T11:19:11.633
15185
48146
question
python 機械学習
Pythonで、層化k分割交差検証の各分割ごとにランダムフォレストの重要度評価を行うコード


変数yをプロットのときに上書きしてしまっていることによる問題だと考えられます。yをy_に置き換えるなどしてください。

[code]

    # プロット
        x_ = range(len(feature))
        y_ = feature[indices]
        y_label = label[indices]
        plt.figure(figsize=(30,42))
        plt.barh(x_, y_, align = 'center')
        plt.yticks(x_, y_label)
        plt.xlabel("importance_num")
        plt.ylabel("label")
        plt.rcParams["font.size"] = 9
        plt.show()
    
[/code]

なお、交差検証は本来スコアを比較するものです。feature
importancesを比較することの意味は、「あるデータの組で訓練したらたまたまそれが重要な特徴として学習された」程度のものと考えられます。過学習しているかもしれないのでスコアと併せて見た方が良いでしょう。


CC BY-SA 4.0
2022-03-30T07:22:52.343
88099
2022-03-30T07:22:52.343
52014
82405
answer