The above code can be used as follows
path_to_save_fi = 'your/path/'
save_importances(model,y_test.columns)
| path_to_save_fi="./test/" | |
| def _checkpath(*paths): | |
| for path in paths: | |
| path = str(path) | |
| if not os.path.exists(path): | |
| os.makedirs(path) | |
| def get_fe_lable(indices): | |
| fe_labels = [train_data.columns[index] for index in indices] | |
| return fe_labels | |
| def _imo_to_file(importances, labels, filename): | |
| importances=np.sort(importances)[::-1] | |
| zipped = list(zip(labels,importances)) | |
| df = pd.DataFrame(data=zipped,columns=['Feature Name', 'Importance Score']) | |
| df.to_csv(filename, index=False) | |
| def save_importances(model, targets): | |
| for _, estimator, in enumerate(model.estimators_): | |
| importances = estimator.feature_importances_ | |
| indices = np.argsort(importances)[::-1] | |
| fig = plt.gcf() | |
| fig.set_size_inches(16,10) | |
| plt.stem(importances[indices], use_line_collection=True) | |
| plt.ylim(0, max(importances)+0.005) | |
| title = targets[_] | |
| plt.title(f'Feature Importance Plot for prediction of {title}') | |
| plt.xlabel('Feature Name') | |
| plt.ylabel('Feature Importance Score') | |
| labels = get_fe_lable(indices) | |
| plt.xticks(range(train_data.shape[1]),labels, rotation='vertical',fontsize=12) | |
| for _,index in enumerate(indices): | |
| plt.annotate(round(importances[index],2),(_-0.05,importances[index]+0.001), fontsize=12) | |
| path = path_to_save_fi | |
| img_path = path+'images/' | |
| csv_path = path+'csv/' | |
| _checkpath(img_path, csv_path) | |
| img_name = img_path+title+".png" | |
| csv_name = csv_path+title+".csv" | |
| plt.savefig(img_name, bbox_inches='tight') | |
| plt.show() | |
| _imo_to_file(importances, labels, csv_name) |