Уменьшение размерности — это метод, используемый в машинном обучении для уменьшения количества функций или переменных в наборе данных при сохранении как можно большего количества информации. Он часто используется для повышения производительности алгоритмов машинного обучения и упрощения визуализации и интерпретации многомерных данных. В этой статье мы рассмотрим пять популярных методов уменьшения размерности: анализ главных компонентов (PCA), линейный дискриминантный анализ (LDA), факторный анализ (FA), разложение по сингулярным значениям (SVD) и анализ независимых компонентов (ICA).
Методология
Чтобы оценить эффективность различных методов уменьшения размерности, я следовал следующему процессу:
- Сбор данных: я получил 10 наборов данных из хранилища данных UCI, 5 для классификации и 5 для регрессии.
- Предварительная обработка и EDA: я очистил и отформатировал данные для каждого набора данных, а также провел исследовательский анализ данных, чтобы понять характеристики данных.
- Разделение данных: я разделяю каждый набор данных на наборы для обучения и тестирования, используя разделение 70/30.
- Реализация ленивого прогноза: я реализовал ленивый прогноз, используя функцию
lazyClassifier
илиlazyRegressor
, в зависимости от типа набора данных. Это позволило мне получить базовый показатель производительности модели. - Настройка гиперпараметров: я использовал перекрестную проверку поиска по сетке, чтобы найти наилучшие значения параметров для каждого метода уменьшения размерности.
- Уменьшение размерности и переоценка с помощью ленивого прогнозирования. Используя лучшие значения параметров, я применил метод уменьшения размерности к каждому набору данных и повторил ленивое прогнозирование, чтобы оценить производительность метода.
Анализ главных компонентов (PCA)
PCA — это метод уменьшения линейной размерности, который проецирует данные в пространство с более низкой размерностью, находя направления максимальной дисперсии данных. Он делает это, находя собственные векторы ковариационной матрицы данных и выбирая лучшие k собственных векторов (где k - желаемое количество измерений) в качестве новой основы для данных. Результирующая проекция представляет собой линейную комбинацию исходных признаков, а веса исходных признаков в проекции задаются соответствующими собственными векторами.
Реализация на Python
Я реализовал методы уменьшения размерности, обсуждаемые в этой статье, с помощью Python. Вот пример того, как я реализовал PCA:
def best_pca_hyper_params(X, Y, n_components): pca = PCA() param_grid = { 'n_components': n_components, 'svd_solver': ['auto', 'full', 'arpack'], } grid_search = GridSearchCV(pca, param_grid, cv=5) grid_search.fit(X, Y) return grid_search.best_params_ def process_pca(X_train, y_train, n_components = [2,3,4,5,6,7], dont_show=0): best_params = best_pca_hyper_params(X_train, y_train, n_components) print("best params: ", best_params) pca = PCA(n_components=best_params["n_components"], svd_solver=best_params["svd_solver"]) X_train_pca = pca.fit_transform(X_train) plotting(pca,X_train_pca,y_train,dont_show) return best_params
Для визуализации
def visualize_variance(ax,technique): ax.plot(np.cumsum(technique.explained_variance_ratio_)) ax.set_xlabel("number of components") ax.set_ylabel("cumulative explained variance") def pca_scatter_plot(ax,X_train_pca,y_train,fig): sp = ax.scatter(X_train_pca[:, 0], X_train_pca[:, 1], c =y_train, edgecolor="none", alpha=0.5, cmap=plt.cm.get_cmap("Spectral", 10)) ax.set_xlabel("Principal component 1") ax.set_ylabel("Pricipal component 2") fig.colorbar(sp)
Как показано на приведенном выше графике, почти 80 % дисперсии покрываются первыми двумя основными компонентами. Всего столбцов 7.
Одним из основных преимуществ PCA является то, что его можно использовать с любым типом данных и эффективно обрабатывать многомерные данные. Его также можно использовать для визуализации многомерных данных в 2D или 3D, что может быть полезно для понимания структуры данных. Однако PCA имеет некоторые ограничения. Предполагается, что данные линейны и распределены по Гауссу, что не всегда так. Он также может быть чувствителен к масштабированию данных, поэтому важно масштабировать данные перед применением PCA.
Линейный дискриминантный анализ (LDA)
LDA — еще один метод уменьшения линейной размерности, аналогичный PCA. Однако LDA специально разработан для задач классификации. Он находит направления, которые максимально разделяют классы в данных, а не направления максимальной дисперсии. Как и PCA, LDA находит лучшие k собственных векторов ковариационной матрицы данных, но также принимает во внимание средние векторы различных классов.
LDA обладает многими из тех же преимуществ, что и PCA, включая возможность обработки многомерных данных и возможность визуализации данных в 2D или 3D. Это также полезно для задач классификации, так как может помочь определить наиболее отличительные признаки в данных. Однако у него также есть ограничения, аналогичные PCA, включая предположение о линейности и распределении по Гауссу, а также чувствительность к масштабированию данных. Он также может быть чувствителен к выбору количества компонентов, так как выбор слишком малого или слишком большого количества компонентов может не дать наилучших результатов.
Реализация на Python
def lda_with_best_params(X_train,X_test,y_train,best_params,manually = 0): n_components = best_params['lda__n_components'] if manually != 0: n_components = manually lda = LDA(n_components=n_components, solver=best_params['lda__solver']) X_train_lda = lda.fit_transform(X_train,y_train) X_test_lda = lda.transform(X_test) return X_train_lda,X_test_lda def process_lda(X,y ,n_components = [1, 2, 3]): param_grid = {'lda__n_components': n_components, 'lda__solver': ['svd', 'lsqr', 'eigen']} pipeline = Pipeline([('lda', LDA())]) grid_search = GridSearchCV(pipeline, param_grid, cv=5) grid_search.fit(X, y) best_params = grid_search.best_params_ print("best hyper parameters: ",best_params) return best_params
Факторный анализ (ФА)
FA — это статистический метод, используемый для выявления основных факторов или скрытых переменных в наборе данных. Предполагается, что данные могут быть смоделированы как линейная комбинация небольшого числа основных факторов плюс шум. Он оценивает факторы и веса исходных признаков в линейной комбинации, используя оценку максимального правдоподобия.
Преимущество FA состоит в том, что он может эффективно обрабатывать многомерные данные, и его можно использовать для выявления основных факторов в данных. Однако он также имеет некоторые ограничения. Предполагается, что данные линейны и распределены по Гауссу, что не всегда так. Он также может быть чувствителен к выбору количества компонентов, так как выбор слишком малого или слишком большого количества компонентов может не дать наилучших результатов. Чтобы проверить, можно ли реализовать FA или нет, можно выполнить следующий тест.
- В тесте Бартлетта p-значение равно 0. Тест был статистически значимым, что указывало на то, что наблюдаемая корреляционная матрица не является единичной матрицей.
- Тест Кайзера-Мейера-Олкина (КМО) измеряет пригодность данных для факторного анализа. Он определяет адекватность каждой наблюдаемой переменной и всей модели. KMO оценивает долю дисперсии среди всех наблюдаемых переменных. Меньшая доля больше подходит для факторного анализа. Значения КМО находятся в диапазоне от 0 до 1. Значение КМО менее 0,6 считается неадекватным.
- Метод графика осыпи рисует прямую линию для каждого фактора и его собственных значений. Число собственных значений больше единицы считается числом факторов.
Как показано на приведенном выше графике Scree, есть пять компонентов, которые находятся выше линии y = 1. Таким образом, их можно учитывать при обучении модели. Всего столбцов 16.
Разложение по сингулярным значениям (SVD)
SVD — это метод матричной факторизации, который разлагает матрицу на произведение трех матриц: левой сингулярной матрицы, диагональной матрицы и правой сингулярной матрицы. Его можно использовать для уменьшения размерности матрицы, выбирая верхние k сингулярных значений и соответствующие сингулярные векторы в качестве новой основы для матрицы.
Преимущество SVD заключается в том, что его можно использовать с любым типом данных, и он может эффективно обрабатывать многомерные данные. Его также можно использовать для выявления базовых закономерностей в данных. Однако он может быть чувствителен к выбору количества компонентов, так как выбор слишком малого или слишком большого количества компонентов может не дать наилучших результатов.
Анализ независимых компонентов (ICA)
ICA — это статистический метод, используемый для определения основных независимых компонентов в наборе данных. Предполагается, что данные можно смоделировать как линейную комбинацию небольшого числа независимых источников и шума. Он оценивает независимые источники и веса исходных признаков в линейной комбинации с использованием итеративной оптимизации.
Преимущество ICA заключается в том, что его можно использовать с любым типом данных и идентифицировать основные независимые компоненты в данных. Однако он может быть чувствителен к выбору количества компонентов, так как выбор слишком малого или слишком большого количества компонентов может не дать наилучших результатов.
Результаты эксперимента
Чтобы оценить эффективность методов уменьшения размерности, я провел эксперименты с 10 наборами данных: 5 наборами данных регрессии и 5 наборами данных классификации. Результаты приведены ниже.
Наборы регрессионных данных:
В наборах регрессионных данных PCA хорошо показал себя на трех наборах данных, в то время как SVD превзошел два других набора данных.
Наборы данных классификации:
В наборах данных классификации ICA хорошо показал себя на 1 наборе данных, PCA хорошо показал себя на 1 наборе данных со сравнительно меньшим охватом дисперсии, но с большей точностью, а LDA хорошо показал себя на 2 наборах данных, принимая во внимание только 1 компонент. На 1 наборе данных все методы работали одинаково хорошо.
Заключение
В этой статье мы рассмотрели пять популярных методов уменьшения размерности: PCA, LDA, FA, SVD и ICA. Каждый метод имеет свои преимущества и ограничения, и соответствующий метод будет зависеть от конкретных характеристик данных и поставленной задачи. При выборе метода уменьшения размерности важно учитывать допущения, сделанные методом, и потенциальное влияние этих допущений на результаты.
Я надеюсь, что этот обзор методов уменьшения размерности был полезен! Если у вас есть какие-либо вопросы или вам нужны дополнительные разъяснения по любому из методов, пожалуйста, не стесняйтесь спрашивать.