PCA для категориальных функций?
в моем понимании, я думал, что PCA может выполняться только для непрерывных функций. Но при попытке понять разницу между кодировкой onehot и кодировкой label появилась запись по следующей ссылке:
когда использовать одну горячую кодировку против LabelEncoder против DictVectorizor?
в нем говорится, что одна горячая кодировка, за которой следует PCA, является очень хорошим методом, что в основном означает, что PCA применяется для категориальных функций. Следовательно, путать, пожалуйста предложите мне то же самое.
4 ответов
Я не согласен с другим.
пока вы можете использовать PCA на двоичных данных (например, один-горячие закодированные данные), что не означает, что это хорошо, или это будет работать очень хорошо.
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]])