Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Методы и модели решения задачи классификации данных. Основные этапы. Учебное пособие
.pdf
Для оценки степени взаимосвязи признаков может быть полезен
также частный коэффициент корреляции, который измеряет «очищенную» связь. Код для расчета матрицы частных коэффициентов корреляции между всеми количественными признаками следующий:
install.packages("ppcor")
library(ppcor)
M <- Train[,unlist(lapply(Train, is.numeric))]
pcor(M, method ="pearson")
В результате выдаются значения частных коэффициентов корреляции и оценка их статистической значимости (p-value):
Отметим, что между признаками УОС и СВЗ частный коэффициент
корреляции статистически незначим и равен 0,027 (p-value=0,62).
Это свидетельствует о том, что при исключении влияния других признаков между признаками УОС и СВЗ нет значимой взаимосвязи.
В исследуемую БД включены также классификационный (бинарный) признак О (образование) и порядковый признак С (сертификация).
Для исследования
взаимосвязи между зависимой переменной «Класс»
и качественными признаками строятся радиальные диаграммы и рас-
2
считывается критерий χ
. Ниже приведен код для построения радиаль-
ной диаграммы распределения признака С (сертификация) в рамках
каждого класса:
par(mfrow = c(2,2))
data1<- Train$С[Train$Класс=="1"]
71

x1<-c(summary(data1))
data2<- Train$С[Train$Класс=="2"]
x2<-c(summary(data2))
data3<- Train$С[Train$Класс=="3"]
x3<-c(summary(data3))
data4<- Train$С[Train$Класс=="4"]
x4<-c(summary(data4))
piepercent1<- round(100*x1/sum(x1), 1)
piepercent2<- round(100*x2/sum(x2), 1)
piepercent3<- round(100*x3/sum(x3), 1)
piepercent4<- round(100*x4/sum(x4), 1)
pie(x1, piepercent1, radius=1, clockwise=TRUE, xlab="Класс 1",
col=c("grey","blue","green", "red"))
legend("topright", c("0","1", "2", "3"), cex = 0.8, fill
=c("grey","blue","green", "red"))
pie(x2, piepercent2, radius=1, clockwise=TRUE, xlab="Класс 2",
col=c("grey","blue","green", "red"))
pie(x3, piepercent3, radius=1, clockwise=TRUE, xlab="Класс 3",
col=c("grey","blue","green", "red"))
pie(x4, piepercent4, radius=1, clockwise=TRUE, xlab="Класс 4",
col=c("grey","blue","green", "red"))
Радиальные диаграммы распределения признаков О (образование)
и С (сертификация) по классам представлены на рис. 14 и 15. Наблюдается визуальное различие распределения исследуемых признаков
по классам: для специалистов с высоким уровнем квалификации
(третий и
четвертый класс) характерны наличие профильного образова-
ния и высокий уровень сертификации.
72

Рис. 14. Радиальные диаграммы (признак «Образование»)
Рис. 15. Радиальные диаграммы (признак «Сертификация»)
73

Для расчета критерия χ2 используются функции:
chisq.test(Train$Класс, Train$О)
chisq.test(Train$Класс, Train$С)
chisq.test(Train$О, Train$С)
В результате можно сделать вывод о статистической значимости
различий между классами по рассматриваемым признакам при уровне
значимости 0,05 (p-value<<0,05) и о статистически значимой взаимосвязи между признаками O (образование) и С (сертификация).
2.4. ПРИМЕНЕНИЕ НАИВНОГО БАЙЕСОВСКОГО
КЛАССИФИКАТОРА
Решим задачу классификации IT-специалистов компании с исполь-
зованием наивного байесовского классификатора (NB).
Функция, реализующая наивный байесовский классификатор, пред-
ставлена в пакете e1071:
install.packages("e1071")
library(e1071)
naiveBayes(formula, data, …)
74

Аргументы функции:
formula – формула, описывающая модель классификации данных
(зависимую и предикторные переменные);
data – имя фрейма данных, хранящего выборку исходных данных.
Согласно условиям применения метода Байеса предикторные переменные (признаки) должны быть статистически независимы и иметь
нормальное распределение (в случае использования гауссовской модификации классификатора). Исследование корреляционных взаимосвязей между признаками показало, что часть признаков мультиколлинеарны, поэтому включать все признаки в модель классификатора
не
имеет смысла. Опираясь на результаты предварительного анализа данных, в модель классификатора можно включить количественные признаки УОС и СВЗ и классификационный признак С (сертификация). Выбор обусловлен следующими причинами:
количественные признаки УОС и СВЗ имеют сильную корреля-
цию с зависимой переменной «Класс», коэффициент корреляции Спирмена соответственно равен 0,89 и 0,7;
количественные признаки УОС и СВЗ нормально распределены
по классам (за исключением распределения признака СВЗ в третьем
классе);
количественные признаки УОС и СВЗ имеют наименее слабые
корреляционные взаимосвязи между собой по классам среди других
признаков (коэффициент корреляции Пирсона: первый класс – 0,200; второй класс – –0,089; третий класс – 0,251; четвертый класс – 0,097);
классификационный признак С (сертификация) статистически
значимо взаимосвязан с зависимой переменной «Класс» (p-value<<0,05
для критерия χ
2
).
Модель наивного байесовского классификатора строится на обуча-
ющей выборке с помощью функции naiveBayes():
naive <- naiveBayes(Класс ~ УОС + СВЗ + С, data =Train)
naive
В результате применения функции naiveBayes() создается объект
класса naive, содержащий следующую информацию: априорная вероятность распределения объектов по классам; среднее значение и СКО для
каждого количественного признака по каждому из классов; условные
вероятности распределения для
каждого качественного признака по
каждому из классов. Для рассматриваемого примера выводится следующая информация:
75

Для оценки точности классификации на обучающей и тестовой вы-
борке строятся матрицы ошибок классификации:
y_trainNB <- predict(naive, newdata = Train)
cm_train <- table(Train$Класс, y_trainNB)
cm_train
y_testNB <- predict(naive, newdata = Test)
cm_test <- table(Test$Класс, y_testNB)
cm_test
Матрица ошибок классификации на обучающей выборке (cm_train)
имеет вид:
76

Матрица ошибок классификации на тестовой выборке (cm_test)
имеет вид:
Для расчета метрик точности на обучающей и тестовой выборке ис-
пользуется функция confusionMatrix():
confusionMatrix(cm_train, mode="everything")
confusionMatrix(cm_test, mode="everything")
Результат работы функции confusionMatrix() на обучающей выборке
следующий:
77

Результат работы функции confusionMatrix() на тестовой выборке
следующий:
Функция confusionMatrix() рассчитывает метрики точности, рассмотренные в разд. 1.6. Приводится оценка точности (Accuracy) и 95 %-й
доверительный интервал для оценки, а также оценка Kappa. Отдельно
для каждого класса рассчитываются оценки следующих метрик: Sensi-
tivity; Specificity; PPV; NPV; Precision; Recall; F-мера; Prevalence; DR;
DP; BA.
Анализ результатов позволяет сделать вывод о достаточно высокой
точности
работы наивного байесовского классификатора: точность
(Accuracy) на обучающей выборке составила 0,85; на тестовой – 0,78.
Метрики точности, рассчитанные отдельно для каждого класса, принимают значения от 0,74 до 0,99 на обучающей выборке и от 0,61 до 0,97
на тестовой выборке. Наиболее точно прогнозируется первый класс:
количество неверно классифицированных объектов на обучающей
выборке – шесть (7,1 %); на тестовой – пять
78
(13,9 %). Наихудшая точ-

ность прогнозирования соответствует третьему классу: количество неверно классифицированных объектов на обучающей выборке – 20
(23,8 %); на тестовой – шесть (28,5 %). Отметим, что точность прогнозирования на тестовой выборке примерно одинаковая для второго–четвертого класса. Процент ошибочных классификаций составил: 27,3 %
(второй класс); 28,5 % (третий класс); 27,3 % (четвертый класс).
Для расчета остальных метрик
точности, представленных в разд. 1.6,
используются функции пакета yardstick:
mcc_vec () – расчет коэффициента Мэттьюса (MCC);
kap_vec () – расчет меры Каппа Коэна (Cohen’s Kappa);
accuracy_vec – расчет точности (Accuracy);
bal_accuracy_vec () – расчет сбалансированной точности (ВА);
precision_vec () – расчет точности (Precision);
f_meas_vec () – расчет F-меры;
roc_auc_vec () – расчет меры AUC.
Аргументы функций:
data – имя фрейма данных, хранящего выборку исходных данных;
truth – вектор, содержащий фактическое значение класса;
estimate – вектор, содержащий прогнозируемое значение класса;
estimator – вариант расчета метрики точности.
Функции рассчитывают усредненные метрики точности по классам,
вариант усреднения задается в параметре estimator. При бинарной классификации параметр автоматически устанавливается в "binary", при
многоклассовой классификации: estimator ="macro" и выполняется макроусреднение мер точности по классам. В явном виде параметр можно
не задавать.
Код для расчета метрик точности на обучающей выборке
приведен
ниже:
install.packages("yardstick")
library(yardstick)
mccTrainNB <- mcc_vec(data = Train, truth = Train$Класс, estimate =
y_trainNB)
mccTrainNB
kapTrainNB <- kap_vec(data = Train, truth = Train$Класс, estimate =
y_trainNB)
79

kapTrainNB
accuracyTrainNB <- accuracy_vec(data = Train, truth = Train$Класс, estimate
= y_trainNB)
accuracyTrainNB
bal_accuracyTrainNB <- bal_accuracy_vec(data = Train, truth = Train$Класс,
estimate = y_trainNB)
bal_accuracyTrainNB
precisionTrainNB <- precision_vec(data = Train, truth = Train$Класс, estimate
= y_trainNB)
precisionTrainNB
FTrainNB <- f_meas_vec(data = Train, truth = Train$Класс, estimate =
y_trainNB)
FTrainNB
y_trainRawNB <- predict(naive, newdata = Train, type = "raw")
AUCTrainNB <- roc_auc_vec(data = Train, truth = Train$Класс, esti-
mate=y_trainRawNB)
AUCTrainNB
Код для расчета метрик точности на тестовой выборке приведен
ниже:
mccTestNB <- mcc_vec(data = Test, truth = Test$Класс, estimate = y_testNB)
mccTestNB
kapTestNB <- kap_vec(data = Test, truth = Test$Класс, estimate = y_testNB)
kapTestNB
accuracyTestNB <- accuracy_vec(data = Test, truth = Test$Класс, estimate =
y_testNB)
accuracyTestNB
bal_accuracyTestNB <- bal_accuracy_vec(data = Test, truth = Test$Класс, esti-
mate = y_testNB)
80
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
