Вы можете очень хорошо использовать RF и по-прежнему видеть, как каждая функция внесла положительный / отрицательный вклад в прогнозирование с помощью пакета eli5
.Я объяснил, как использовать пакет для того же, взяв набор данных iris.
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from eli5 import show_prediction, show_weights
df = pd.read_csv("./Data/iris.csv")
df.head()
Sepal Petal Width Height Class
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa
x = df.drop("Class", axis=1)
Y = df["Class"]
clf = RandomForestClassifier(n_estimators=100, max_depth=2,
random_state=0)
clf.fit(x,Y)
Теперь давайте сделаем трюк, используя eli5
.Давайте предположим, что я хочу получить вклад каждого фактора для точки данных x.loc[1]
show_prediction(clf, x.loc[1], show_feature_values=True)
И это то, что вы получите
Предсказанная метка для этого примера - Iris-setosa
, а width
была основной причиной для прогноза Iris-setosa
.Аналогично, когда вы посмотрите на другие два столбца, вы также получите представление о том, почему точка данных не классифицируется как какой-либо другой класс.Если вы хотите более общее объяснение, используйте show_weights
, как показано ниже
show_weights(clf, feature_names = X.columns.values)
eli5
не только работает с RF, но и всей группойдля других моделей, пожалуйста, обратитесь к документации eli5 для получения более подробной информации.
Надеюсь, это поможет!