Линейный дискриминантный анализ (LDA)¶
В данном примере будет рассмотрено применение линейного дискриминантного анализа (LDA) к датасету "Ирисы Фишера".Также будет проведено сравнение с методом главных компонент (PCA).
Линейный дискриминантный анализ (LDA) — это метод статистического анализа, позволяющий найти линейную комбинацию признаков для разделения наблюдений на два класса.
Pkg.add(["MultivariateStats", "RDatasets"])
Предположим, что выборки положительного и отрицательного классов имеют средние значения:
$\mu_p$ (для положительного класса),
$\mu_n$ (для отрицательного класса), а также ковариационные матрицы $C_p$ и $C_n$.
Согласно критерию Фишера для линейного дискриминанта, оптимальное направление проекции задается формулой: $$w = \alpha \cdot (C_p + C_n)^{-1} (\mu_p - \mu_n),$$ где $\alpha$ — произвольный неотрицательный коэффициент.
Установка и подключение необходимых библиотек:
using MultivariateStats, RDatasets
Загрузка данных из датасета Ирисов Фишера:
iris = dataset("datasets", "iris")
Извлечение из датасета матрицы объектов наблюдений с признаками - X
и вектора классов этих объектов - X_labels
:
X = Matrix(iris[1:2:end,1:4])'
X_labels = Vector(iris[1:2:end,5])
Сравним линейный дискриминантный анализ с методом PCA (метод главных компонент).
Обучение модели PCA:
pca = fit(PCA, X; maxoutdim=2)
Применение PCA к данным:
Ypca = predict(pca, X)
Обучение модели LDA:
lda = fit(MulticlassLDA, X, X_labels; outdim=2);
Применение LDA к данным:
Ylda = predict(lda, X)
Визуализация результатов:¶
using Plots
p = plot(layout=(1,2), size=(800,300))
for s in ["setosa", "versicolor", "virginica"]
points = Ypca[:,X_labels.==s]
scatter!(p[1], points[1,:],points[2,:], label=s)
points = Ylda[:,X_labels.==s]
scatter!(p[2], points[1,:],points[2,:], label=false, legend=:bottomleft)
end
plot!(p[1], title="PCA")
plot!(p[2], title="LDA")
Выводы:¶
PCA и LDA — методы снижения размерности с разными целями: PCA максимизирует глобальную дисперсию данных, подходит для визуализации без учета меток классов, тогда как LDA оптимизирует разделение классов, используя информацию о метках, что делает его эффективным для задач классификации. В примере с Ирисами Фишера LDA обеспечил четкое разделение классов в проекции, а PCA сохранил общую структуру данных, но с перекрытием классов. Выбор метода зависит от задачи: PCA — для исследования данных, LDA — для улучшения классификации при наличии размеченных классов.