Таксономия континентов

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

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

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

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

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

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

Это очень маленький набор данных из 6 столбцов и 223 строк, по одной для каждой страны. Столбцы: Ранг, Страна, Общая жизнь, Мужская жизнь, Женская жизнь и Континент.

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

  • KNN - алгоритм ближайшего соседа K использует меры сходства, такие как функции расстояния (меры расстояния), для классификации новых точек данных после прохождения обучения.
  • SVM - Support Vector Machine - это управляемый алгоритм обучения, он создает модель, которая будет назначать новые точки той или иной категории, используя обучающий набор. Назначение может быть линейным или нелинейным в зависимости от задачи.
  • OneR - OneR - это, по сути, алгоритм одного правила, этот алгоритм генерирует одно правило для каждого предиктора в данных, а затем выбирает правило с наименьшей ошибкой в ​​качестве ответа. Несмотря на то, что это кажется очень простым алгоритмом, поскольку он генерирует только одно правило, известно, что он работает лучше, чем некоторые из более сложных алгоритмов классификации.
  • RIPPER. RIPPER - это обучающийся на основе правил, который создает набор правил, которые идентифицируют классы, сводя к минимуму количество ошибок. Ошибка определяется количеством примеров обучения, неправильно классифицированных правилами. Это прямой способ выполнения классификации на основе правил.
  • C 4.5 - C4.5 представляет собой статистический классификатор, поскольку он генерирует дерево решений. Он строит дерево решений из обучающих данных, как это делает ID3, и в каждом узле дерева C4.5 выбирает атрибут данных, который наиболее эффективно разделяет его набор выборок на подмножества, обогащенные тем или иным классом. Это своего рода косвенный метод классификации, основанной на правилах.

Давайте теперь начнем с анализа с использованием R Programming и посмотрим, какой классификатор работает лучше всего.

Во всем коде мы будем использовать следующие библиотеки / пакеты: e1071, class, caret, rJava, RWeka.

#loading libraries
library("e1071")
library(class)
library(caret)
library(rJava)
library(RWeka)

Предварительная обработка данных

  1. Первый шаг предварительной обработки данных будет включать следующее:
  • импорт набора данных в R с помощью функции read.csv ().
  • выполнение некоторого визуального описательного анализа путем просмотра набора данных и получения сводки набора данных с помощью функций summary () и str ().
  • преобразование метки класса Continent в категориальную переменную путем ее факторизации.
  • некоторые нерелевантные столбцы также будут удалены, те, которые не будут использоваться в анализе. Как и в первом столбце «Ранг».
#importing csv file in R
dataset <- read.csv(file.choose())
#displaying head(first five) elements
head(dataset) 
str(dataset)
#dimentions
dim(dataset) 
#Converting Continent to factor
dataset[c("Continent")]<- lapply(dataset[c("Continent")], factor)
#removing the first (irrelevant) coulmn
dataset <- dataset[,-1]
str(dataset)
summary(dataset)

Вывод

Наблюдение

Хотя столбец «Континент» уже имел факторный тип данных, мы все же выполнили команду, чтобы сделать его факторным. С таким представлением данных мы можем получить четкое представление о том, как они выглядят, функция head () позволяет это сделать. Сводные функции показывают нам некоторую важную описательную информацию. Самое главное, мы можем видеть, сколько стран находится на каком континенте, это поможет нам позже при проверке точности. Мы также можем наблюдать среднее значение общей продолжительности жизни мужчин и женщин, которое составляет 72,49, 70,04 и 75,02 соответственно. Также можно наблюдать медианы, квартили, микс, максимальные значения.

2. Для второй части предварительной обработки данных мы:

  • разделение набора данных на обучающий и тестовый набор в соотношении 80:20 с использованием метода выборки для генерации случайной перестановки обучающих и тестовых элементов.
  • сохранение поездов и тестовых образцов в список в выходной переменной.
  • мы можем увидеть образцы поездов и тестов, распечатав выходную переменную.
#sampling 80% training data
traindata <- sample(seq_len(nrow(dataset)), size = floor(0.80 * nrow(dataset)))
data_train <- dataset[traindata, ]
data_test <- dataset[-traindata,]
t_train <- dataset$Continent[traindata]
t_test <- dataset$Continent[-traindata]
output<-list(data_train,data_test,t_train,t_test)
#a view of the devided data(into train and test)
print(output)

KNN - алгоритм ближайшего соседа K

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

В нашем случае K выбран равным 5. Кроме того, точность использовалась для выбора оптимальной модели с использованием наибольшего значения.

#KNN
#setting seed
set.seed(12345)
knn_train_test<-output
let_train<-knn_train_test[[1]]
let_test<-knn_train_test[[2]]
#Preprocessing and training
trainX <- let_train[,names(let_train) != "Continent"]
preProcValues <- preProcess(x = trainX,method = c("center", "scale"))
print(preProcValues)
#Fit Model- Using Caret's train model to find best k
ctrl <- trainControl(method="repeatedcv",repeats = 3)
knnFit <- train(Continent~., data = let_train, method = "knn", 
                trControl = ctrl,preProcess = c("center","scale"), 
                tuneLength = 20)
print(knnFit)
plot(knnFit)
#Make predictions
knnPredict <- predict(knnFit,newdata = let_test )
knnPredict
#Confusion Matrix
confusionMatrix(knnPredict, let_test$Continent )
#Accuracy
knnoutput<-mean(knnPredict== let_test$Continent)
knnoutput

Вывод

Наблюдение

  • Прежде всего, мы наблюдаем, что лучшее значение K было выбрано равным 5, исходя из максимальной точности (путем повторной перекрестной проверки).
  • График также показывает наивысшее значение точности 0,562 при K = 5, и очень близкую конкуренцию дает K = 17 при точности 0,559.
  • Точность KNN составляет 44%.

SVM - машины опорных векторов

Функция классификации SVM будет развернута с помощью метода настройки и с использованием пакета e1071. Классификация соответствия svm будет настроена путем выбора ядра как линейного и стоимости как 1 из метода настройки.

#SVM 
#setting seed
set.seed(12345)
train_test<- output
let_train<-train_test[[1]]
let_test<-train_test[[2]]
#Fit model
svmfit <- svm(Continent ~., data = let_train, kernel = "linear", scale = FALSE)
svmfit
svm
#Tune to check best performance
tuned <- tune(svm, Continent ~., data = let_train, kernel = "linear", ranges = list(cost=c(0.001,0.01,.1,1,10,100)))
summary(tuned)
#Make predictions
p <- predict(svmfit, let_test, type="class")
length(let_test$Continent)
table(p, let_test$Continent)
#Analyse results
#Confusion matrix
confusionMatrix(p, let_test$Continent )
#Accuracy
#print(mean(p== let_test$Continent))
svmoutput<-mean(p== let_test$Continent)
svmoutput

Вывод

Наблюдение

  • Мы наблюдали точность 55% с SVM

OneR - алгоритм одного правила

#OneR
#setting seed
set.seed(12345)
oner_train_test<- output
let_train<-oner_train_test[[1]]
let_test<-oner_train_test[[2]]
#Fitting model
model <- OneR(Continent~.,let_train)
model
#prediction
pred <- predict(model, let_test)
pred
table(pred,let_test$Continent)
summary(model)
#confusion matrix 
confusionMatrix(pred, let_test$Continent)
#Accuracy
acc<-mean(pred==let_test$Continent)
acc

Вывод

Наблюдение

  • Мы наблюдаем моделирование 178 экземпляров, сопоставленных с использованием обучающих данных.
  • При прогнозировании с использованием тестовых данных существует только 38 правильно классифицированных случаев, в то время как 140 - ошибочно классифицированные, потому что Африка была принята в качестве единственного правила.
  • Таким образом, точность алгоритма OneR составляет всего 20%.

RIPPER - повторяющееся инкрементное сокращение для получения алгоритма уменьшения ошибок

Функция классификации Ripper будет развернута с помощью метода JRip в пакете RWeka.

#RIPPER Algorithm
#setting seed
set.seed(12345)
ripper_train_test<- output
let_train<-ripper_train_test[[1]]
let_test<-ripper_train_test[[2]]
#fitting model using Weka control function of JRip
model1 <- JRip(Continent~., data=let_train) 
model1
#prediction
pred1 <- predict(model1, let_test)
pred1
table(pred1, let_test$Continent)
summary(model1)
#confusion matrix
confusionMatrix(pred1, let_test$Continent)
#Accuracy
acc<-mean(pred1==let_test$Continent)
acc

Вывод

Наблюдение

  • При прогнозировании с использованием тестовых данных 95 экземпляров классифицируются правильно, а 83 - ошибочно.
  • Матрица путаницы ясно показывает, какой континент к чему был отнесен.
  • Точность 48% можно наблюдать с помощью алгоритма RIPPER.

C 4.5 Алгоритм

Функция классификации C4.5 была развернута с помощью метода J48 в пакете RWeka.

#C.45 Algorithm
#setting seed
set.seed(12345)
c45_train_test<- output
let_train<-c45_train_test[[1]]
let_test<-c45_train_test[[2]]
# fit model-Using Weka Control function of J48
fit <- J48(Continent~., data=let_train)
# summarize the fit
summary(fit)
# make predictions
c45predictions <- predict(fit, let_test)
# summarize accuracy
tb<-table(c45predictions, let_test$Continent)
#Confusion Matrix
confusionMatrix(c45predictions, let_test$Continent )
#Accuracy
#print(mean(c45predictions== let_test$Continent))
c45output<-mean(c45predictions== let_test$Continent)
c45output

Вывод

Наблюдение

  • Обобщая подборку, мы видим, что 138 экземпляров классифицированы правильно, а 40 - ошибочно.
  • Полученная точность составляет 48% с использованием алгоритма C4.5.
  • Точность очень похожа на алгоритм RIPPER.

Вывод

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

Значения точности - по классификаторам

  • КНН - 44%
  • SVM - 55%
  • OneR - 20%
  • Рыхлитель - 48%
  • C4.5 — 48%

Очевидно, что SVM с большим отрывом превзошел все остальные методы классификации. RIPPER и C4.5 были самыми близкими, оба показали точность 48%, что довольно впечатляюще. Алгоритм OneR показал худшие результаты с точностью всего 20%.