Введение
Я пытаюсь подтвердить, что мое понимание того, как работает иерархическая агломерационная кластеризация в python, действительно правильно.Итак, для панды DataFrame, где у меня MxN (M = строки и N = столбцы), где M - это измеряемая характеристика, а N - пациент.
В моем случае у меня есть 83 признаков (m1, m2, ..., m83) и 6 пациентов (n1, n2, .., n6) .Таким образом, для каждого пациента я измеряю 83 функции, и меня интересует, какие из функций перепредставлены и недопредставлены для каждого пациента в отдельности, а также для группировки пациентов на основе представления этих функций.Итак, я делаю это, выполняя иерархическую агломерационную кластеризацию, выводя тепловую карту со связанной дендрограммой с использованием пакета Seaborn.
Итак, большинство примеров обычно включают в себя матрицу MxN, где N = 2 и M может быть любого размера.,В этом случае это будет представлено в графе в виде двух наших столбцов, являющихся нашими координатами x, y в двумерном графе.Добавление дополнительного пациента / столбца будет означать добавление дополнительного параметра z в мою систему координат, что приведет к 3-мерному графику с координатами x, y, z для каждого пациента / столбца для всех измеренных функций М.
Пример Panda DataFrame.
Предварительный просмотр только первых и последних 3 строк и столбцов.
(Pdb) feature_df
Patient1 Patient2 Patient3 Patient4 Patient5 Patient6
Feature1 4.686681 1.718879 0.772530 2.085830 2.755356 2.549348
Feature2 1.605639 1.098595 0.000000 0.084507 19.267667 4.056351
Feature3 0.000000 0.063615 0.010603 0.000000 0.005301 0.037109
... ... ... ... ... ... ...
Feature81 0.213393 0.000000 0.000000 0.000000 0.106696 0.000000
Feature82 2.628437 2.813818 0.933526 2.416573 0.695179 2.078915
Feature83 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
[83 rows x 6 columns]
Код
Я выполняю преобразование log2 всех необработанных значений (необработанное значение является значением счетчика для каждой функции, то есть частоты) для всех необработанных значений, которые были 0 (после преобразования log2 становятся -infно заменены на 0) замаскированы в тепловой карте, но, очевидно, включены в кластерный анализ.
feature_df = pd.DataFrame(features, columns=sample_list, index=gene_expression_list)
feature_df.applymap(np.log2).replace(float('-inf'),0)
mask = feature_df.isin(values=[0])
sns.clustermap(feature_df, metric="euclidean", method="ward",
mask=mask, cmap="Blues")
plt.show()

Вопрос
- Правильно ли мое понимание выше?
- Если да, то для наборов данных с> 3 измерениями (3 пациента) какие методы расстояния считаются эффективными, так как я предполагаю, чтоЕвклидово расстояние расстояние не будетбыть наиболее представительным?
- Наконец, если мое понимание верно, я вижу, как можно создать дендрограмму, чтобы сгруппировать объекты / строки, но я не вижу, как создается дендрограмма, чтобы сгруппировать пациентов / столбцы в различныегруппы.
Любые советы, предложения или мысли приветствуются.