Таксономия континентов
Мы, люди, наделены концепцией классификации. Мы классифицируем все: от нашего шкафа, где все джинсы помещаются под одну стойку, а все рубашки - в другую, предназначенную только для рубашек, до приложений на наших телефонах и файлов на наших компьютерах, где у нас есть отдельные папки для каждого типа файлов. или приложения.
Теперь более «научное» определение классификации заключается в том, что это форма анализа данных, которая извлекает модели, описывающие важные классы данных или задачу прогнозирования значения категориальной переменной (класса или цели). По сути, выяснение, к какому набору предопределенных категорий будет принадлежать новое наблюдение. Очень распространенный пример этого - электронные письма, в которых мы хотим классифицировать одни электронные письма как спам, а другие как не спам. Машина может решить эту задачу, обучаясь на обучающих данных, класс которых уже известен.
Алгоритмы классификации могут использоваться только тогда, когда у нас есть дискретные метки в качестве выходных данных. Ситуация, подобная приведенному выше примеру, когда электронные письма классифицируются как спам или нет, и есть только два возможных результата, называется бинарной классификацией.
Другой тип - это многопозиционная классификация. В классификации с несколькими метками одному экземпляру может быть присвоено несколько меток. Это в основном используется для классификации аудио и видео, классификации текста, классификации тональности при анализе тональности и т. Д.
В любом случае, это были основы и необходимая информация, необходимая для продолжения работы над этой статьей.
В этой статье мы классифицируем континенты, что является меткой и будет использоваться как класс в Наборе данных о продолжительности жизни.
Это очень маленький набор данных из 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)
Предварительная обработка данных
- Первый шаг предварительной обработки данных будет включать следующее:
- импорт набора данных в 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%.