Вопрос или проблема
Итак, у меня есть набор данных с примерно 750 переменными (столбцами) и 50 000 строк записей. Я хотел бы уменьшить размерность набора данных до 25-50-100 размерностей и затем вычислить матрицу корреляции между этими размерностями. У меня есть непрерывные и дискретные столбцы. Я также хотел бы знать, какие размерности представляют какой набор отдельных переменных в оригинальном наборе данных. Должен добавить, что у меня нет выходной переменной, я просто пытаюсь найти корреляцию в данных. Есть ли способ сделать это на Python?
Да, в scikit-learn вы можете найти корреляцию между элементами, используя оценщик LedoitWolf. Для уменьшения размерности, я предполагаю, что вы будете использовать PCA, но затем вы хотите отследить уменьшенные данные к оригинальным, для этого у меня нет решения, поскольку PCA преобразует ваши данные и вычисляет направление наибольшей дисперсии. Но да, оба этих метода не требуют никаких меток.
Ответ или решение
Снижение Размерности Для Корреляции Большого Числа Переменных
Ваша задача – уменьшить размерность набора данных с 750 переменными до 25, 50 или 100 новых измерений без наличия выходных переменных. Это вполне достижимо благодаря современным методам обработки данных, доступным в Python, таких как PCA (Метод Главных Компонент) и t-SNE (t-распределенная стохастическая соседняя эмбеддинговая техника).
Шаги по Снижению Размерности
-
Подготовка Данных: Прежде чем переходить к уменьшению размерности, важно предварительно обработать данные. Это включает в себя очистку данных, обработку пропущенных значений и нормализацию. Для непрерывных переменных часто используют стандартную нормализацию (z-оценка), в то время как для категориальных переменных можно воспользоваться кодированием (например, "one-hot encoding").
-
Использование PCA: Метод Главных Компонент (PCA) позволяет выявить основные компоненты данных, которые захватывают наибольшую дисперсию. С помощью скриптов на Python с использованием библиотеки
scikit-learn
, вы можете легко реализовать PCA:from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler # Нормализуем данные scaler = StandardScaler() scaled_data = scaler.fit_transform(data) # Применяем PCA pca = PCA(n_components=50) # Уменьшаем до 50 размерностей principal_components = pca.fit_transform(scaled_data)
-
Связь Сиско-Компонентов с Исходными Переменными: После применения PCA вы можете анализировать коэффициенты нагрузки (loadings), чтобы понять, какие переменные оказывают наибольшее влияние на каждую главную компоненту:
loadings = pca.components_.T * np.sqrt(pca.explained_variance_)
Это позволит вам сопоставить главные компоненты с исходными переменными, определив, какие из них вносят наибольший вклад.
-
Корреляционная Матрица: После того как вы получите главные компоненты, можно вычислить корреляционную матрицу между ними:
import pandas as pd pc_df = pd.DataFrame(data=principal_components) correlation_matrix = pc_df.corr()
Это даст вам возможность исследовать корреляции между новыми измерениями, что может быль полезным для дальнейшего анализа.
Дополнительные Методы Снижения Размерности
Если PCA не дает желаемых результатов, можно рассмотреть и другие методы, такие как:
- t-SNE: Особенно подходящая для визуализации высокоразмерных данных, но может быть менее полезной для количественного анализа.
- UMAP: Устойчивый к шуму и может сохранить более глобальные структуры данных по сравнению с t-SNE.
Заключение
Снижение размерности является критически важным шагом в анализе данных с большим числом переменных. Используя такие инструменты, как PCA в Python, вы сможете уменьшить размерность вашего набора данных и получить корреляционную матрицу между главными компонентами. Каждый шаг в процессе требует тщательной проработки и понимания, какие переменные способствуют тому или иному результату.
Если у вас возникнут дополнительные вопросы или потребуется уточнение отдельных шагов, не стесняйтесь задавать их!