Я довольно новичок в программировании, и эту проблему может быть довольно легко решить, но я застрял на ней некоторое время, и я думаю, что мой подход просто ошибочен. Как видно из названия, я пытался реализовать поиск по сетке в моем прогнозе RandomForest, чтобы найти наилучшие возможные параметры для моей модели, а затем увидеть наиболее важные характеристики модели с наилучшими параметрами. Пакеты, которые я использовал:
import nltk
from nltk.corpus import stopwords
import pandas as pd
import string
import re
import pickle
import os
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import KFold, cross_val_score
from sklearn.metrics import precision_recall_fscore_support as score
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
После некоторой очистки данных и предварительной обработки я создал такой gridsearch, где x_features - это DataFrame с функциями tfidfvectorized моих данных:
param = {'n_estimators':[10, 50, 150], 'max_depth':[10, 30, 50, None], 'min_impurity_decrease':[0, 0.01, 0.05, 0.1], 'class_weight':["balanced", None]}
gs = GridSearchCV(rf, param, cv=5, n_jobs=-1)
gs_fit = gs.fit(x_features, mydata['label'])
optimal_param = pd.DataFrame(gs_fit.cv_results_).sort_values('mean_test_score', ascending = False)[0:5]
optimal_param1 = gs_fit.best_params_
Моя идея заключалась в том, что, возможно, я мог бы упростить для себя и скопировать в optim_param1 в мой RandomForestClassifier (), и разместить его на моих тренировочных данных более или менее следующим образом:
rf = RandomForestClassifier(optimal_param2)
rf_model= rf.fit(x_train, y_train)
, но optim_param2 это диктат. Поэтому я подумал, что преобразование его в строку и избавление от слишком больших знаков (sub: for =, delete {, delete}) заставит его работать. Это явно не удалось, так как числа для n_estimators, max_depth et c. были еще строки, и он ожидал целых чисел. В конце концов я хотел получить вывод о наиболее важных функциях, более или менее подобных этому:
top25_features = sorted(zip(rf_model.feature_importances_, x_train.columns),reverse=True)[0:25]
Я понимаю, что gs уже является полной моделью RF, но в ней нет атрибут feature_importances_, который я искал. Я был бы очень благодарен за любые идеи о том, как заставить это работать.