Выбор модели классификации, отражающей способствующие факторы для каждого класса результатов в Python - PullRequest
1 голос
/ 28 июня 2019

Я работаю над полиномиальным набором данных ответов с несколькими категориальными предикторами.

Я решил запустить классификационный случайный лес на Python, который отлично работал.Мне удалось получить наиболее важные способствующие факторы и их частичные сюжеты.

Я не смог выяснить, какие предикторы внесли наибольший вклад в какой результат, и понял, что RF может быть не самой подходящей моделью для понимания динамики между предикторами и множественными исходами.Я надеялся, что вы могли бы предложить другие модели, которые могли бы отражать динамику между результатами и предикторами.Спасибо

1 Ответ

0 голосов
/ 29 июня 2019

Вы можете очень хорошо использовать 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)

И это то, что вы получите

contribution of each factor

Предсказанная метка для этого примера - Iris-setosa, а width была основной причиной для прогноза Iris-setosa.Аналогично, когда вы посмотрите на другие два столбца, вы также получите представление о том, почему точка данных не классифицируется как какой-либо другой класс.Если вы хотите более общее объяснение, используйте show_weights, как показано ниже

show_weights(clf, feature_names = X.columns.values)

enter image description here

eli5 не только работает с RF, но и всей группойдля других моделей, пожалуйста, обратитесь к документации eli5 для получения более подробной информации.

Надеюсь, это поможет!

...