СПС для категориальных признаков?


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

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

Он утверждает, что одно горячее кодирование, за которым следует PCA, является очень хорошим методом, который в основном означает, что PCA применяется для категориальных признаков. Отсюда путаница, пожалуйста, предложите мне на такой же.
4 9

4 ответа:

Я не согласен с остальными.

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

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

Так что да, вы можете использовать PCA. И да, вы получаете выход. Это даже наименее квадратный результат-это не так, как если бы ППШ бы обработка выхода онлайн / оффлайн на такие данные. Это работает, но это просто гораздо менее значимо, чем вы хотели бы; и предположительно менее значимо, чем, например, частый поиск паттернов.

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

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

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

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

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

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]])