Как найти набор влиятельных функций в кластерах? - PullRequest
0 голосов
/ 03 июля 2018

У меня есть 4 кластера, и мне нужно найти набор наиболее влиятельных функций в каждом кластере, чтобы я мог получить представление о характеристиках кластера и, таким образом, понять поведение этих кластеров. Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Элементарный метод решения этой проблемы заключается в нахождении описательной статистики для особенностей центроидов кластера.

Фрагмент, чтобы найти наиболее влиятельные переменные:

var_influence=cc.describe() #cc contains the cluster centroids 
# The descriptive statistics of the cluster centroids are saved in a Dataframe var_influence. Sorting by standard deviation will give the variables with high standard deviation.
var_influence.sort_values(axis=1, by='std', ascending=False).iloc[:,:10] 

Таким образом, быстрее и лучше находить влияющие переменные по сравнению с блочной графикой (что трудно визуализировать при увеличении возможностей). Поскольку все переменные нормализованы, их очень легко сравнивать по функциям.

Можно также использовать подход max-min, это позволит нам видеть переменные с максимальной пропускной способностью. Поскольку все переменные нормализованы, max-min - хороший способ проверить приведенный выше результат. Код для того же самого ниже

pd.Series(var_influence.loc['max']-var_influence.loc['min']).sort_values(ascending=False)[:10]

Мультиклассовая классификация

Более серьезным подходом к поиску влияющих признаков является Многоклассовая классификация : метки кластера используются в качестве целевой переменной для обучения модели мультиклассовой классификации на данных. Полученные коэффициенты модели могут быть использованы для определения важности признаков.

0 голосов
/ 03 июля 2018

Подход, который я использую, состоит в том, чтобы обучить классификатор для прогнозирования каждой метки кластера (1, если соответствующий кластер, 0 в противном случае), а затем использовать атрибуты модели, чтобы определить самые различающие переменные для кластера. Я делал это с RandomForest и атрибутом feature_importances_ в sickit learn, и у меня всегда были очень хорошие результаты.

Затем я использую диаграммы / графики плотности для представления распределений этих переменных на кластер.

Вы также можете использовать более традиционные подходы, например сравнивать средние значения по кластерам для каждой переменной и использовать статистические тесты, такие как ANOVA, для получения более надежных результатов.

Редактировать: Вот пример на Python:

for cl in data.cluster.unique():


    custom_target = data.cluster.copy()
    custom_target.loc[custom_target != cl] = -1
    custom_target.loc[custom_target == cl] = 1

    clf = RandomForestClassifier(100 , random_state = 10)
    clf.fit(data.values[: , 1:-4], custom_target)

    imps , features = zip(*sorted(zip(clf.feature_importances_, cols) , reverse = True))
    # store the results as you like
...