Как выбрать наиболее важные функции? Разработка функций

#python-3.x #cluster-analysis #data-science #feature-extraction #hierarchical-clustering

#python-3.x #кластерный анализ #наука о данных #извлечение функций #иерархическая-кластеризация

Вопрос:

Я использовал функцию для определения расстояния по этой ссылке:https://sourceforge.net/projects/gower-distance-4python/files . Мои данные ( df ) таковы, что каждая строка является сделкой, а каждый из столбцов — функциями. Поскольку он содержит много категориальных данных, я затем преобразовал данные, используя расстояние Гауэра, чтобы измерить «сходство»… Я надеюсь, что это правильно (как показано ниже ..):

 D = gower_distances(df)
distArray = ssd.squareform(D)
hierarchal_cluster=scipy.cluster.hierarchy.linkage(distArray, method='ward', metric='euclidean', optimal_ordering=False)
  

Затем я наношу иерархический кластер сверху в виде дендограммы:

 plt.title('Hierarchical Clustering Dendrogram (truncated)')
plt.xlabel('sample index or (cluster size)')
plt.ylabel('distance')

dendrogram(
    hierarchal_cluster,
    truncate_mode='lastp',  # show only the last p merged clusters
    p=15,  # show only the last p merged clusters
    leaf_rotation=90.,
    leaf_font_size=12.,
    show_contracted=True  # to get a distribution impression in truncated branches
)
  

Я не могу показать это, поскольку у меня недостаточно точек привилегий, но на дендограмме я вижу отдельные цвета.
Каков основной дискриминатор, разделяющий их?
Как я могу это выяснить?
Как я могу использовать PCA для извлечения полезных функций?
Должен ли я передавать свой ‘hierarchal_cluster’ в функцию PCA?
Что-то вроде приведенного ниже ..?

 pca = PCA().fit(hierarchal_cluster.T)
plt.plot(np.arange(1,len(pca.explained_variance_ratio_) 1,1),pca.explained_variance_ratio_.cumsum())
  

Ответ №1:

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

Обычной практикой при работе со смешанными данными является разделение непрерывных и категориальных функций / переменных. Затем найдите евклидово расстояние между точками данных для непрерывных (или числовых) объектов и расстояние Хэмминга для категориальных объектов [1].

Это позволит вам найти сходство между непрерывной и категориальной функцией по отдельности. Теперь, пока вы этим занимаетесь, примените PCA к непрерывным переменным, чтобы извлечь важные функции. И примените Multiple Correspondence Analysis MCA к категориальным функциям. После этого вы можете объединить полученные соответствующие функции вместе и применить любой алгоритм кластеризации.

Итак, по сути, я предлагаю выбор / извлечение функций перед кластеризацией.

[1] Хуанг З., 1998. Расширения к алгоритму k-means для кластеризации больших наборов данных с категориальными значениями. Интеллектуальный анализ данных и обнаружение знаний, 2 (3), стр.283-304.

Ответ №2:

Цитирую документацию scipy по вопросу привязки Ward:

Методы ‘центроид’, ‘медиана’ и ‘уорд’ правильно определены, только если используется евклидова попарная метрика. Если y передается как предварительно вычисленные попарные расстояния, то пользователь обязан убедиться, что эти расстояния на самом деле евклидовы, иначе полученный результат будет неверным.

Таким образом, вы не можете использовать привязку Ward с Gower!

Комментарии:

1. В этом руководстве medium.com/@anastasia.reusova /… они передают матрицу Гауэра для иерархической кластеризации. Поскольку дендограмма в python должна содержать удвоения, как мне преобразовать мою матрицу Гауэра в форму, которую я могу использовать для иерархической кластеризации?

2. В сообщении в блоге четко указано, что это была первая попытка, а не «правильный» способ сделать что-то. Но они используют полную компоновку, которую удобно использовать с Gower. И Gower возвращает двойные значения…