PCA Для категориальных функций?

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

Когда использовать одно горячее кодирование против LabelEncoder vs DictVectorizor?

В нем говорится, что одна горячая кодировка, за которой следует PCA, является очень хорошим методом, что в основном означает, что PCA применяется для категориальных функций. Поэтому смутитесь, пожалуйста, предложите мне то же самое.

Ответ 1

Я не согласен с другими.

В то время как вы можете использовать PCA для двоичных данных (например, однострочные закодированные данные), что не означает, что это хорошо, или это будет работать очень хорошо.

PCA предназначен для непрерывных переменных. Он пытается минимизировать отклонение (= квадратичные отклонения). Понятие квадратов отклонений ломается, когда у вас есть двоичные переменные.

Итак, вы можете использовать PCA. И да, вы получаете результат. Он даже представляет собой наименее квадратный выход - это не так, как если бы СПС нарушал бы такие данные. Он работает, но он намного менее значим, чем вы хотели бы; и, предположительно, менее значимым, чем, например, частые разработки шаблонов.

Ответ 2

В принципе, PCA находит и устраняет менее информативную (дублирующую) информацию о наборе функций и уменьшает размер пространства объектов. Другими словами, представьте себе N-мерное гиперпространство, PCA находит такие функции M (M < N), что данные больше всего изменяются. Таким образом, данные могут быть представлены как M -мерные векторы признаков. Математически это некоторый вид вычисления собственных значений и собственных векторов пространственного объекта.

Таким образом, не важно, являются ли функции непрерывными или нет.

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

Ответ 3

MCA - это известный способ уменьшения размеров категориальных данных. В R существует много пакетов для использования MCA и даже для микширования с PCA в смешанных контекстах. В python существует также библиотека mca. MCA применяют аналогичную математику, что PCA, как говорил французский статистик, "анализ данных - это поиск правильной матрицы для диагонализации"

http://gastonsanchez.com/visually-enforced/how-to/2012/10/13/MCA-in-R/

Ответ 4

PCA - это метод уменьшения размерности, который может применяться любым набором функций. Вот пример использования данных OneHotEncoded (т.е. Категориальных):

from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder()
X = enc.fit_transform([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]).toarray()

print(X)

> array([[ 1.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  1.],
       [ 0.,  1.,  0.,  1.,  0.,  1.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  0.,  1.,  0.,  1.,  0.,  0.],
       [ 0.,  1.,  1.,  0.,  0.,  0.,  0.,  1.,  0.]])


from sklearn.decomposition import PCA
pca = PCA(n_components=3)
X_pca = pca.fit_transform(X)

print(X_pca)

> array([[-0.70710678,  0.79056942,  0.70710678],
       [ 1.14412281, -0.79056942,  0.43701602],
       [-1.14412281, -0.79056942, -0.43701602],
       [ 0.70710678,  0.79056942, -0.70710678]])

Ответ 5

Недавняя публикация показывает большие и значимые результаты при вычислении PCA на категориальных переменных, рассматриваемых как симплексные вершины.

Ковариация и PCA для категориальных переменных, Хиротака Ниитсума и Такаши Окада, 2018.