«Все модели ошибочны, но некоторые из них полезны», — Гёрдж Э.П. Коробка

Холаа, народ! Прямо сейчас я хочу рассказать о классификации с помощью KNN. Но сначала я расскажу вам о KNN.

K ближайших соседей (KNN) — это простой алгоритм, который хранит все доступные наблюдения и классифицирует новые наблюдения на основе меры сходства (например, функции расстояния). KNN использовался в статистической оценке и распознавании образов уже в начале 1970-х годов как непараметрический метод. В общем, большое значение K является более точным, поскольку оно уменьшает общий шум, но это не гарантирует. Перекрестная проверка — это еще один способ ретроспективно определить хорошее значение K с использованием независимого набора данных для проверки значения K. (Источник: https://www.saedsayad.com/k_nearest_neighbors.htm)

KNN может потребоваться много памяти или места для хранения всех данных, но он выполняет расчет (или обучение) только тогда, когда требуется прогноз, как раз вовремя. Вы также можете обновлять и контролировать свои обучающие экземпляры с течением времени, чтобы прогнозы оставались точными. (Источник: https://helloacm.com/a-short-introduction-to-k-nearest-neighbors-algorithm/)

Данные, которые я использовал, взяты из Kaggle (опять же). Просто нажмите на ссылку ниже, чтобы получить данные!



Случай, который я дополню данными с помощью классификации, следующий:
Если в столбце «Удовлетворенность работой» указать число 1 = «Очень неудовлетворен», 2 = «Неудовлетворен», 3 = «Удовлетворен» и 4 = «Очень удовлетворен». , затем классифицируйте удовлетворенность работой Джони, которая имеет следующие данные: Возраст = 35, Внимание = Нет, Деловые поездки = Редкие поездки, Дневная ставка = 1373, Отдел = Продажи, Расстояние = 8, Образование = 2, Область образования = Медицина, количество сотрудников = 1, окружающая среда = 4, пол = мужчины, почасовая ставка = 50, вовлеченность в работу = 3, уровень работы = 2, должность = научный сотрудник, семейное положение = холост, месячный доход = 3000 и месячная ставка = 5000 .

Прежде всего введите данные. Формат данных — .csv, поэтому мы должны использовать соответствующий скрипт для ввода данных CSV в R. Ниже приведен снимок исходных данных после загрузки набора данных в фрейм данных.

Не забудьте загрузить нужные нам пакеты!

library(dplyr)
library(class)
library(dbscan)

Мы можем увидеть весь объект, используя следующий скрипт. Называть данные — ваше дело, здесь я использую «классификаси».

objects(klasifikasi)

Снимок ниже — это результат работы объектов. Есть 33 объекта: Истощение, Деловые поездки, Дневная ставка, Отдел, Расстояние от дома, Образование, Область образования, Количество сотрудников, Количество сотрудников, Удовлетворенность окружающей средой, Пол, Почасовая ставка, Возраст, Участие в работе, Уровень работы, Должность, Работа Удовлетворенность, семейное положение, ежемесячный доход, месячная ставка, количество компаний, которые работали, с течением времени, повышение заработной платы в процентах, рейтинг производительности, удовлетворенность отношениями, уровень опционов на акции, время обучения в прошлом году, баланс трудовой жизни, годы в компании, годы в текущей роли, Количество лет, прошедших с момента последнего повышения, и количество лет работы в Curr Manager.

Следующим шагом мы хотим узнать, есть ли в данных NA? Мы можем использовать сценарий ниже.

row.has.na<-apply(klasifikasi,1,function(x){any(is.na(x))})
sum(row.has.na)

Да, у нас ноль!!

Основываясь на приведенном выше выводе, мы знаем, что в данных нет NA.

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

klasifikasi%>%
  select( JobSatisfaction,
          ï..Age,
          Attrition,
          BusinessTravel,
          DailyRate,
          Department,
          DistanceFromHome,
          Education,
          EducationField,
          EmployeeCount,
          EnvironmentSatisfaction,
          Gender,
          HourlyRate,
          JobInvolvement,
          JobLevel,
          JobRole,
          MaritalStatus,
          MonthlyIncome,
          MonthlyRate)%>%
  data.frame()->newclass

Да, датафрейм уже есть!

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

#remove the NA from new dataframe
filterkerja<-data.frame(newclass[!row.has.na,])
View(filterkerja)
sapply(filterkerja, class)

На снимке ниже результат. Класс состоит из целого числа и фактора.

Следующим шагом мы должны преобразовать переменные в factor.

JobSatisfication= factor(filterkerja$JobSatisfaction)
Education=factor(filterkerja$Education)
EnvironmentSatisfaction=factor(filterkerja$EnvironmentSatisfaction)
JobInvolvement=factor(filterkerja$JobInvolvement)
JobLevel=factor(filterkerja$JobLevel)

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

faktor<-data.frame(age=filterkerja$ï..Age,
                   att=filterkerja$Attrition,
                   travel=filterkerja$BusinessTravel,
                   daily=filterkerja$DailyRate,
                   depart=filterkerja$Department,
                   distance=filterkerja$DistanceFromHome,
                   edu=Education,
                   edufield=filterkerja$EducationField,
                   count=filterkerja$EmployeeCount,
                   envir=EnvironmentSatisfaction,
                   gender=filterkerja$Gender,
                   hour= filterkerja$HourlyRate,
                   jobin=JobInvolvement,
                   joblev=JobLevel,
                   jobrol= filterkerja$JobRole,
                   status=filterkerja$MaritalStatus,
                   monthlyin=filterkerja$MonthlyIncome,
                   monthlyrate=filterkerja$MonthlyRate)
#faktorcbind
faktor1<-cbind(faktor$age,faktor$att,faktor$travel,faktor$daily,
               faktor$depart,faktor$distance,faktor$edu,
               faktor$edufield,faktor$count,faktor$envir,
               faktor$gender,faktor$hour,faktor$jobin,faktor$joblev,
               faktor$jobrol,faktor$status,faktor$monthlyin,
               faktor$monthlyrate)

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

target<-(JobSatisfication)
target
#No=1
#Travel rarely= 3
#sales= 3
#medical = 4
#male= 2
#Research scientist= 7
#single= 3
####JONI####
joni<-cbind(35,1,3,1373,3,8,2,4,
 1,4,2,50,3,2,7,3,3000,5000)

Почти финиш! Еще раз шаг, да!

Последним шагом является нахождение лучшего К для классификации удовлетворенности работой Джони, я сравнил с К=1, К=4, К=11, К=17 и К=29.

hasil1<-knn(faktor1,joni,target,k=1,prob = TRUE);hasil1
hasil2<-knn(faktor1,joni,target,k=4,prob = TRUE);hasil2
hasil3<-knn(faktor1,joni,target,k=11,prob = TRUE);hasil3
hasil4<-knn(faktor1,joni,target,k=17,prob = TRUE);hasil4
hasil5<-knn(faktor1,joni,target,k=100,prob = TRUE);hasil5

Основываясь на результате, k с наибольшей вероятностью равно 13. Итак, я решил использовать это K.

Вывод: Джони классифицируется как удовлетворенность работой = 3. Это означает, что Джони удовлетворен своей работой.

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

Спасибо за чтение. Надеюсь, ты повеселишься.

Не стесняйтесь исправлять меня!