49175


ランダムフォレスト、一つ抜き交差検証を用いて、予測モデルの作成を行っています。  
ランダムフォレストでは、feature importanceを出力できますが、一つ抜き交差検証を用いた時の、平均のfeature
importanceを出力することは可能なのでしょうか？  
可能な場合、どのようなコードを足せばよろしいでしょうか？  
現在のコードは以下の通りです。

[code]

    import numpy as np
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.model_selection import cross_val_score
    from sklearn.model_selection import LeaveOneOut
    data = np.loadtxt('****.csv', delimiter=',',skiprows=1,dtype=float)
    labels = data[:, 0:1]
    features = data[:, 1:]
    forest=RandomForestClassifier(n_estimators=100,random_state=7)
    loo=LeaveOneOut()
    scores = cross_val_score(forest, features, labels.ravel(), cv=loo)
    
    feature_name= np.loadtxt('feature_name.csv', delimiter=',', dtype=str)
    import matplotlib.pyplot as plt
    def plot_feature_importances(model):
        n_features = features.shape[1] 
        plt.barh(range(n_features), model.feature_importances_, align='center') 
        plt.yticks(np.arange(n_features), feature_name) 
        plt.xlabel('importances') 
        plt.ylabel('features') 
        plt.show()
    
[/code]


CC BY-SA 4.0
2018-10-10T14:15:59.883
49147
2018-10-11T04:29:23.967
2018-10-11T00:56:04.003
3060
30390
question
python python3 scikit-learn
ランダムフォレスト 、一つ抜き交差検証におけるfeature importanceの出力


現状 `cross_val_score()` にて行っている処理を通常のループ処理にて行い、都度 `feature_importances`
を配列に格納していくと良いのではないでしょうか

[code]

    import numpy as np
    from sklearn.ensemble import RandomForestClassifier
    #from sklearn.model_selection import cross_val_score
    from sklearn.model_selection import LeaveOneOut
    from sklearn.metrics.scorer import accuracy_score
    
    data = np.loadtxt('****.csv', delimiter=',',skiprows=1,dtype=float)
    
    labels = data[:, 0:1].ravel()
    features = data[:, 1:]
    forest = RandomForestClassifier(n_estimators=100,random_state=7)
    loo = LeaveOneOut()
    scores = np.empty([0,])
    feature_importances = np.empty([0, features.shape[1]])
    for train_idx, valid_idx in loo.split(features):
        forest.fit(features[train_idx], labels[train_idx])
        result = forest.predict(features[valid_idx])
        scores = np.append(scores, accuracy_score(result, labels[valid_idx]))
        feature_importances = np.append(feature_importances, forest.feature_importances_.reshape(1,-1), axis=0)
    feature_importances = feature_importances.mean(axis=0)
    
    feature_name= np.loadtxt('feature_name.csv', delimiter=',', dtype=str)
    
    import matplotlib.pyplot as plt
    n_features = features.shape[1]
    plt.barh(range(n_features), feature_importances, align='center')
    plt.yticks(np.arange(n_features), feature_name)
    plt.xlabel('importances')
    plt.ylabel('features')
    plt.show()
    
[/code]


CC BY-SA 4.0
2018-10-11T04:29:23.967
49175
2018-10-11T04:29:23.967
24801
49147
answer