Использование линейного дискриминантного анализа (LDA) для уменьшения размерности

Вступление

Линейный дискриминантный анализ (LDA) - это метод уменьшения размерности, который чаще всего используется на этапе предварительной обработки приложений машинного обучения и классификации шаблонов. Цель состоит в том, чтобы спроецировать данные в пространство меньшей размерности с хорошей разделяемостью классов, чтобы избежать переобучения («проклятие размерности»), а также снизить вычислительные затраты. Это помогает уменьшить размерность данных и в то же время пытается сохранить основные характеристики данных, специфичные для класса.

Как работает LDA?

Линейный дискриминантный анализ - это контролируемый алгоритм, который учитывает помеченные данные при выполнении метода уменьшения размерности. Этот метод используется для поиска нового пространства функций, которое максимизирует разделимость классов, используя подход, очень похожий на тот, который используется в Анализе главных компонентов (PCA).

PCA - это статистическая процедура, которая преобразует набор возможно коррелированных переменных в набор линейно некоррелированных характеристик, называемых главными компонентами. По сути, он отбрасывает наименее важные переменные, сохраняя при этом ценные, путем нахождения осей главных компонентов, по которым разброс данных высок.

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

Разброс между изменчивостью классов можно определить как

а внутриклассовое разделение может быть определено как

Правила дискриминации:

  • Максимальная вероятность: присваивает x группе, которая максимизирует плотность населения (группы).
  • Дискриминантное правило Байеса: присваивает x группе, которая максимизирует произведение априорной вероятности и плотности населения.
  • Линейное правило дискриминанта Фишера: максимизирует соотношение между между классами и внутри класса и находит линейную комбинацию предикторов для прогнозирования группы.

Применение LDA к набору данных IRIS

  1. Импорт набора данных IRIS:
library(datasets)
head(iris)
#output
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

2. Описательная статистика

summary(iris)
#output
 Sepal.Length    Sepal.Width     Petal.Length    Petal.Width           
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100   
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300   
 Median :5.800   Median :3.000   Median :4.350   Median :1.300    
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199                  
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800                  
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500

3. Исследовательский анализ данных

# Visualizing correlation between features
plot(iris)

# Density & Frequency analysis with the Histogram
# We can observe that most of the attributes exhibit normal    distribution
# Sepal length 
ggplot(data=iris, aes(x=Sepal.Length))+
  geom_histogram(color="black", aes(fill=Species)) + 
  xlab("Sepal Length (cm)") +  
  ylab("Frequency") + 
  theme(legend.position="none")+
  ggtitle("Histogram of Sepal Length")+
  geom_vline(data=iris, aes(xintercept = mean(Sepal.Length)))
Similarly other features can be plotted

# Now we will plot boxplots for the features and try to identify any # outliers present in the data. The dots in the boxplot indicate the potential outliers which maybe present in the data. Not necessarily all of them are outliers, so human verification for such points is essential.
# For Sepal Length
ggplot(iris, aes(Species, Sepal.Length, fill=Species)) + 
  geom_boxplot()+
  scale_y_continuous("Petal Length (cm)") +
  labs(title = "Iris Petal Length Box Plot", x = "Species")

# Let's plot a scatter plot to visualize the relation between features. We can see a strong relation between petal width and length as opposed to sepal measurements, implying the petal measurements play a crucial role in clustering.

# Building the LDA model of iris using Training Set.
iris.lda <- lda(TrainingSet$Species ~., data =TrainingSet)
predict.iris <- predict(iris.lda)
table(TrainingSet$Species, predict.iris$class)
# Predict the test set using the LDA model
predictLDATest <- predict(iris.lda, newdata = TestSet)
table(TestSet$Species, predictLDATest$class)
# Output
# Coefficients of linear discriminants:
                    LD1         LD2
Sepal.Length  0.8293776  0.02410215
Sepal.Width   1.5344731  2.16452123
Petal.Length -2.2012117 -0.93192121
Petal.Width  -2.8104603  2.83918785
# Confusion Matrix of training set
               setosa  versicolor virginica
  setosa         34          0         0
  versicolor      0         34         0
  virginica       0          1        31
# Confusion Matrix of test set
                setosa versicolor virginica
  setosa         16          0         0
  versicolor      0         15         1
  virginica       0          0        18
So from the results we can see that the miss classification rate is as less as 2% .

Таким образом, применяя LDA, мы могли успешно сопоставить данные с пространством более низкой размерности, не теряя при этом большей части их исходных характеристик.

использованная литература