#algorithm #k-means #pca
#алгоритм #k-средние #pca
Вопрос:
Я пытаюсь понять алгоритмы PCA и K-Means, чтобы извлечь некоторые релевантные функции из набора функций.
Я не знаю, какая отрасль информатики изучает эти темы, кажется, в Интернете нет хороших ресурсов, просто какая-то статья, которую я плохо понимаю. Пример бумаги http://www.ifp.illinois.edu /~qitian/e_paper/icip02/icip02.pdf
У меня есть csv-файлы с пошаговыми обходами, составленные следующим образом:
- ВРЕМЯ, X, Y, Z, эти значения регистрируются акселерометром
Что я сделал
- Я преобразовал набор данных в виде таблицы в Python
- Я использовал tsfresh, библиотеку Python, для извлечения из каждого блуждания вектора функций, этих функций много, 2k функций из каждого блуждания.
- Я должен использовать PFA, анализ основных функций, чтобы выбрать соответствующие функции из набора векторных функций
Чтобы выполнить последний пункт, я должен уменьшить размерность набора объектов, проходящих с помощью PCA (PCA сделает данные отличными от исходных, потому что он изменяет данные с помощью собственных векторов и собственных значений ковариационной матрицы исходных данных). Здесь у меня есть первый вопрос:
- Как должен выглядеть ввод PCA? Строки — это количество проходов, а столбцы — объекты или наоборот, так что строки — это количество объектов, а столбцы — количество проходов pepole?
После того, как я уменьшил эти данные, я должен использовать алгоритм K-средних для уменьшенных данных «функций». Как должны выглядеть входные данные в K-средних? И каково предложение по использованию этого алгоритма? Все, что я знаю об этом алгоритме, он используется для «кластеризации» некоторых данных, поэтому в каждом кластере есть несколько «точек», основанных на некотором правиле. То, что я сделал и думаю, это:
- Если я использую в PCA ввод, который выглядит следующим образом: строки — это количество переходов, а столбцы — количество объектов, то для K-Means я должен изменить столбцы со строками, потому что таким образом каждая точка является функцией (но это не исходные данные с функциями, это просто сокращенный, поэтому я не знаю). Итак, для каждого кластера я вижу с евклидовым расстоянием, у которого меньшее расстояние от центра тяжести, и выбираю эту функцию. Итак, сколько кластеров я должен объявить? Если я объявлю, что кластеры совпадают с количеством функций, я всегда буду извлекать одинаковое количество функций. Как я могу сказать, что точка в приведенных данных соответствует этой функции в исходном наборе функций?
Я знаю, что это неправильно, что я говорю, может быть, но я пытаюсь это понять, может кто-нибудь из вас мне помочь? Если я на правильном пути? Спасибо!
Ответ №1:
Для PCA убедитесь, что вы разделяете понимание метода, используемого алгоритмом (собственные векторы и тому подобное), и результата. Результатом является линейное отображение, отображающее исходное пространство A
A'
, где, возможно, размерность (количество объектов в вашем случае) меньше исходного пространства A
.
Итак, первая функция / элемент в пространстве A'
представляет собой линейную комбинацию функций A
.
Строка / столбец зависит от реализации, но если вы используете scikit PCA, столбцы являются функциями.
Вы можете передать выходные данные PCA, A'
пространство, в K-means, и они будут группироваться на основе пространства обычно уменьшенной размерности.
Каждая точка будет частью кластера, и идея заключается в том, что если вы будете вычислять K-Means on A
, вы, вероятно, получите те же / похожие кластеры, что и with A'
. В вычислительном A'
отношении это намного дешевле. Теперь у вас есть кластеризация, на A'
и A
. Поскольку мы согласны с тем, что точки, похожие по A'
, также похожи по A
.
На количество кластеров трудно ответить, если вы ничего не знаете, выполните поиск по методу elbow. Но, скажем, вы хотите получить представление о разных типах things
, которые у вас есть, я утверждаю, что 3 ~ 8 и не слишком много, сравните 2-3 точки, ближайшие к каждому центру, и у вас есть что-то расходуемое. Количество объектов может быть больше, чем количество кластеров. например, если мы хотим узнать наиболее плотную область в некоторой области (2D), вы можете легко получить 50 кластеров, чтобы получить представление о том, где может быть 50 городов. Здесь у нас есть количество кластеров, намного превышающее размерность пространства, и это имеет смысл.
Комментарии:
1. Спасибо за ответ. Знаю ли я, какая функция более актуальна, чем другая? Я имею в виду, что если вы измените исходные данные, индекс первого объекта в исходных данных будет таким же, как и у первого индексного объекта в измененных данных? Мой код выглядит так dpaste.com/5THH44R2N , метод PFA для данных используется в строке 72. Должен ли я сделать также строку 26? Я имею в виду, как я уже говорил вам, данные в строках — это переходы, а в столбцах — объекты, поэтому таким образом я меняю строки на столбцы, так что строка (то есть точка) — это объект.
2. Также мой метод Elbow выглядит так, это не похоже на локоть, лол imgur.com/a/d7o5XCY
3. Допустим, у нас есть 5 функций в исходных данных: a, b, c, d, e. Чем в преобразованных данных PCA, уменьшенных до 3 функций x, y, z, функция x представляет собой линейную комбинацию, так что x = 2 * a 4 * b — 0,5 * d.
4. Трудно придумать способ определить релевантность функции в этом. Когда нет цели / цели. PCA чувствителен к масштабированию, поэтому будьте осторожны с выводами, которые вы делаете.
5. У меня есть матрица из X векторов, которые представляют количество переходов, каждый вектор имеет Y функций, которые являются элементами вектора. Таким образом, сокращение заключается не в том, чтобы уменьшить количество проходов X, которое у меня есть, а в том, чтобы уменьшить количество функций Y в нем? Потому что, если я напечатаю «преобразованные» данные, у меня будет такое же количество функций, но количество переходов (таким образом, каждый вектор) станет количеством компонентов, которые я выбираю