«Все модели ошибочны, но некоторые из них полезны», — Гёрдж Э.П. Коробка
Холаа, народ! Прямо сейчас я хочу рассказать о классификации с помощью 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. Это означает, что Джони удовлетворен своей работой.
Да, это чудо данных. Нам просто нужны другие данные, чтобы найти классификацию кого-то или чего-то. Хотел бы я в следующий раз найти классификацию «должно быть» на основе ближайшего соседа.
Спасибо за чтение. Надеюсь, ты повеселишься.
Не стесняйтесь исправлять меня!