Уменьшение размерности — это метод, используемый в машинном обучении для уменьшения количества функций или переменных в наборе данных при сохранении как можно большего количества информации. Он часто используется для повышения производительности алгоритмов машинного обучения и упрощения визуализации и интерпретации многомерных данных. В этой статье мы рассмотрим пять популярных методов уменьшения размерности: анализ главных компонентов (PCA), линейный дискриминантный анализ (LDA), факторный анализ (FA), разложение по сингулярным значениям (SVD) и анализ независимых компонентов (ICA).

Методология

Чтобы оценить эффективность различных методов уменьшения размерности, я следовал следующему процессу:

  1. Сбор данных: я получил 10 наборов данных из хранилища данных UCI, 5 для классификации и 5 для регрессии.
  2. Предварительная обработка и EDA: я очистил и отформатировал данные для каждого набора данных, а также провел исследовательский анализ данных, чтобы понять характеристики данных.
  3. Разделение данных: я разделяю каждый набор данных на наборы для обучения и тестирования, используя разделение 70/30.
  4. Реализация ленивого прогноза: я реализовал ленивый прогноз, используя функцию lazyClassifier или lazyRegressor, в зависимости от типа набора данных. Это позволило мне получить базовый показатель производительности модели.
  5. Настройка гиперпараметров: я использовал перекрестную проверку поиска по сетке, чтобы найти наилучшие значения параметров для каждого метода уменьшения размерности.
  6. Уменьшение размерности и переоценка с помощью ленивого прогнозирования. Используя лучшие значения параметров, я применил метод уменьшения размерности к каждому набору данных и повторил ленивое прогнозирование, чтобы оценить производительность метода.

Анализ главных компонентов (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. Каждый метод имеет свои преимущества и ограничения, и соответствующий метод будет зависеть от конкретных характеристик данных и поставленной задачи. При выборе метода уменьшения размерности важно учитывать допущения, сделанные методом, и потенциальное влияние этих допущений на результаты.

Я надеюсь, что этот обзор методов уменьшения размерности был полезен! Если у вас есть какие-либо вопросы или вам нужны дополнительные разъяснения по любому из методов, пожалуйста, не стесняйтесь спрашивать.