ОТЧЕТ ПО ЛАБОРАТОНОЙ РАБОТЕ № 1




Бинарная классификация

тема

 

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

дисциплина

 

 

 

Преподаватель М.Н. Фаворская
подпись, дата

Обучающийся МПИ19-01, 191261007 А.Р. Морозова
номер группы, зачетной книжки подпись, дата

 

 

Красноярск 2019


Цель работы

Написать программный модуль, реализующий некоторый алгоритм бинарной классификации.

Теоретическая часть

Одним из существующих подходов, позволяющих реализовать алгоритм бинарной классификации является Линейный дискриминантный анализ (Linear discriminant analysis, LDA).

Этот метод представляет собой обобщение линейного дискриминанта Фишера, используемого в статистике, в сфере распознавания образов и машинного обучения для поиска линейной комбинации признаков. Такой классификатор способен описывать или разделять два и более классов объектов.

В основе дискриминантного анализа лежит предположение о том, что описания объектов каждого -го класса представляют собой реализации многомерной случайной величины, распределенной по нормальному закону со средними и ковариационной матрицей (формула 1), причем индекс указывает на размерность признакового пространства.

(1)

Для случая бинарной классификации можно рассмотреть упрощенную ситуацию, при которой дискриминантные переменные являются осями
-мерного евклидова пространства. Каждый объект является точкой этого пространства с координатами, представляющими собой фиксируемые значения каждой переменной. Если оба класса отличаются по характеристикам, то их можно представить в виде скоплений точек в разных, возможно частично пересекающихся областях рассматриваемого пространства.

Задача дискриминантного анализа заключается в проведении дополнительной оси , проходящей через облако точек так, что проекции на нее обеспечивают наилучшую разделяемость на два класса. Ее положение задается линейной дискриминантной функцией (формула 2) с весовыми коэффициентами , определяющими вклад каждой исходной переменной .

(2)

Таким образом, метод линейного дискриминантного анализа можно применить к задаче бинарной классификации.

Практическая часть

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

Для реализации бинарного классификатора был выбран объектно-ориентированный язык программирования R, широко используемый для статистического анализа, и специально разработанная для него среда программирования RStudio. Как R, так и RStudio доступны для всех операционных систем и являются свободным программным обеспечением. Язык R включает самые последние методики обработки данных и имеет длинный список функций и пакетов, постоянно пополняющийся пользователями языка.

Перед непосредственной реализацией классификатора и дальнейшей с ним работой необходимо подключить несколько библиотек.

> library(MASS)

> library(caret)

> library(ggplot2)

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

> dataset <- read.csv("Arrests.csv")

> columns <- c("year", "colour", "age", "sex", "employed", "citizen", "checks")

> dataset <- dataset[columns]

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

> dataset

year colour age sex employed citizen checks

1 2002 White 21 Male Yes Yes 3

2 1999 Black 17 Male Yes Yes 3

3 2000 White 24 Male Yes No 0

4 2001 Black 46 Male Yes Yes 1

5 1999 Black 27 Female Yes Yes 1

6 1998 Black 16 Female Yes Yes 0

7 1999 White 40 Male No Yes 0

8 1998 White 34 Female Yes Yes 1

9 2000 Black 23 Male Yes Yes 4

10 2001 White 30 Male Yes Yes 3

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

> summary(dataset)

year colour age sex employed citizen

Min.:1997 Black:1288 Min.:12.00 Female: 443 No:1115 No: 771

1st Qu.:1998 White:3938 1st Qu.:18.00 Male:4783 Yes:4111 Yes:4455

Median:2000 Median:21.00

Mean:2000 Mean:23.85

3rd Qu.:2001 3rd Qu.:27.00

Max.:2002 Max.:66.00

 

checks

Min.:0.000

1st Qu.:0.000

Median:1.000

Mean:1.636

3rd Qu.:3.000

Max.:6.000

 

> dim(dataset)

[1] 5226 7

Необходимо перемешать данные и разделить их на две части: первая нужна для обучения бинарного классификатора, а вторая – для его тестирования.

> rows <- sample(nrow(dataset))

> dataset <- dataset[rows, ]

> training.samples <- createDataPartition(dataset$sex, p=0.8, list=FALSE)

> train.data <- dataset[training.samples, ]

> test.data <- dataset[-training.samples, ]

Далее нормализуем полученные наборы данных.

> normalizing.param <- preProcess(train.data, method = c("center", "scale"))

> train.transformed <- predict(normalizing.param, train.data)

> test.transformed <- predict(normalizing.param, test.data)

Теперь приступим к обучению классификатора методом линейного дискриминантного анализа. Есть возможность задать вероятности распределения классов с помощью параметра prior.

> LDAmodel <- lda(formula=colour~., data=train.transformed, prior = c(0.3,0.7))

Однако, когда набор данных достаточно большой, то есть выборка примеров достаточно представительна – классификатор даст результат точнее при автоматическом определении вероятностей. Поэтому в нашем случае лучше использовать вариант записи функции без параметра prior.

> LDAmodel <- lda(formula=colour~., data=train.transformed)

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

> LDAmodel

Call: lda(colour ~., data = train.transformed)

 

Prior probabilities of groups:

Black White

0.2496413 0.7503587

 

Group means:

year age sexMale employedYes citizenYes checks

Black 0.011404308 0.10786267 0.9444444 0.7097701 0.7088123 0.3010544

White -0.003794167 -0.03588548 0.9053537 0.8129382 0.8983429 -0.1001596

 

Coefficients of linear discriminants:

LD1

year -0.25228771

age -0.06226372

sexMale -0.40557984

employedYes 0.47180239

citizenYes 2.31968088

checks -0.52519966

Протестируем обученный классификатор на тестовых примерах.

> predictions <- predict(LDAmodel, test.transformed)$class

В качестве оценки точности классификатора можно посмотреть так называемую матрицу ошибок (confusion matrix).

> cm = as.matrix(table(predictions, test.transformed$colour))

> cm

predictions Black White

Black 45 39

White 199 761

Также посмотрим полученное качество (accuracy) обучения классификатора при работе на тестовом наборе.

> mean(predictions==test.transformed$colour)

[1] 0.7720307

Точность (precision) и полноту (recall) классификатора оценим на основе уже имеющейся матрицы ошибок, таким же способом можно рассчитать и значение уже известного качества классификатора.

> n = sum(cm)

> diag = diag(cm)

> rowsums = apply(cm, 1, sum)

> colsums = apply(cm, 2, sum)

> accuracy = sum(diag) / n

> precision = diag / colsums

> recall = diag / rowsums

 

> accuracy

[1] 0.7720307

> precision

Black White

0.1844262 0.9512500

 

> recall

Black White

0.5357143 0.7927083

Построим график линейной дискриминантной функции (рисунок 1) для каждого класса цвета кожи.

> LDAdata <- cbind(train.transformed, predict(LDAmodel)$x)

> qplot(LD1, data=LDAdata, geom="density", color=colour, fill=colour, alpha=0.5)

Рисунок 1 – Линейные дискриминантные функции классов

Выводы

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



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2021-11-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: