2017-05-21 6 views
3

私はPythonでRandomForestRegressorを使用しています。機能の重要性のランク付けを示すグラフを作成したいと思います。私は複製しようとしたときに、この機能の重要性コードは、私は次のエラーが表示されhttp://www.agcross.com/2015/02/random-forests-in-python-with-scikit-learn/Pythonを使用したランダムフォレストの重要度チャート

で見つかった例から変更された

features=df.columns[[3,4,6,8,9,10]] 
importances = model.feature_importances_ 
indices = np.argsort(importances) 

plt.figure(1) 
plt.title('Feature Importances') 
plt.barh(range(len(indices)), importances[indices], color='b', align='center') 
plt.yticks(range(len(indices)), features[indices]) 
plt.xlabel('Relative Importance') 

from sklearn.ensemble import RandomForestRegressor 

MT= pd.read_csv("MT_reduced.csv") 
df = MT.reset_index(drop = False) 

columns2 = df.columns.tolist() 

# Filter the columns to remove ones we don't want. 
columns2 = [c for c in columns2 if c not in["Violent_crime_rate","Change_Property_crime_rate","State","Year"]] 

# Store the variable we'll be predicting on. 
target = "Property_crime_rate" 

# Let’s randomly split our data with 80% as the train set and 20% as the test set: 

# Generate the training set. Set random_state to be able to replicate results. 
train2 = df.sample(frac=0.8, random_state=1) 

#exclude all obs with matching index 
test2 = df.loc[~df.index.isin(train2.index)] 

print(train2.shape) #need to have same number of features only difference should be obs 
print(test2.shape) 

# Initialize the model with some parameters. 

model = RandomForestRegressor(n_estimators=100, min_samples_leaf=8, random_state=1) 

#n_estimators= number of trees in forrest 
#min_samples_leaf= min number of samples at each leaf 


# Fit the model to the data. 
model.fit(train2[columns2], train2[target]) 
# Make predictions. 
predictions_rf = model.predict(test2[columns2]) 
# Compute the error. 
mean_squared_error(predictions_rf, test2[target])#650.4928 

機能の重要性:これは私が使用したコードです私のデータのコード:

IndexError: index 6 is out of bounds for axis 1 with size 6 

また、1つのfeatuラベルがない場合、100%の重要度でグラフに表示されます。

この問題を解決するための助けがあれば、私はこのグラフを作成することができます。

答えて

7

ここでは、虹彩データセットを使用した例を示します。

>>> from sklearn.datasets import load_iris 
>>> iris = load_iris() 
>>> rnd_clf = RandomForestClassifier(n_estimators=500, n_jobs=-1, random_state=42) 
>>> rnd_clf.fit(iris["data"], iris["target"]) 
>>> for name, importance in zip(iris["feature_names"], rnd_clf.feature_importances_): 
...  print(name, "=", importance) 

sepal length (cm) = 0.112492250999 
sepal width (cm) = 0.0231192882825 
petal length (cm) = 0.441030464364 
petal width (cm) = 0.423357996355 

>>> features = iris['feature_names'] 
>>> importances = rnd_clf.feature_importances_ 
>>> indices = np.argsort(importances) 

>>> plt.title('Feature Importances') 
>>> plt.barh(range(len(indices)), importances[indices], color='b', align='center') 
>>> plt.yticks(range(len(indices)), features[indices]) 
>>> plt.xlabel('Relative Importance') 
>>> plt.show() 

Feature importances

+0

機能の重要性をプロットあなたが最大スコアは花びらの長さである知っている、Yのラベルが間違っているようだが、図に示す修正するための花びら幅 – tktktk0711

+1

です私は 'plt.yticks(range(len(indices))、features ['indices'])を変更しました。 –

関連する問題