Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методы и модели решения задачи классификации данных. Основные этапы. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Для оценки степени взаимосвязи признаков может быть полезен также частный коэффициент корреляции, который измеряет «очищен­ную» связь. Код для расчета матрицы частных коэффициентов корреля­ции между всеми количественными признаками следующий:
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]