Я делаю анализ KNN для набора данных FIFA 2019 по Kaggle (https://www.kaggle.com/karangadiya/fifa19) Этот набор данных имеет 18159 строк после исключения значений N / A.
Я пытаюсь предсказать, является ли игрок «атакующим», основываясь на различных характеристиках, таких как выносливость, мощность удара, финиш, общий (их рейтинг) и т. Д.
Мы считаем игрока атакующим, если его позиции либоLS, ST, RS, RF, LF или CF.
Я запутался, почему частота ошибок увеличивается с увеличением числа K (я составил график для 10 ближайших соседей). Я думал, что обычно этос другой стороны, когда вы рассматриваете больше соседей, частота ошибок имеет тенденцию к снижению?
Кто-нибудь считает, что с этим подходом что-то не так, или может объяснить, почему он считает, что частота ошибок увеличивается?
Новое в машинном обучении, ценится любое понимание
sampledata<-data
sampledata$indicator = "No"
for(i in 1:NROW(sampledata)){
if (sampledata$Position[i] == "ST" | sampledata$Position[i] == "LS" | sampledata$Position[i] == "RS"| sampledata$Position[i] == "RF" | sampledata$Position[i] == "LF" | sampledata$Position[i] == "CF"){
sampledata$indicator[i] = "Yes"
}
}
print(head(sampledata))
sampledata = sampledata[,c("Overall","Finishing","Positioning","ShotPower","Balance","Stamina","Strength","indicator")]
sampledata <- na.omit(sampledata) #eliminate any na values
any(is.na(sampledata))
sampledata$Overall <- as.numeric(sampledata$Overall)
sampledata$Finishing <- as.numeric(sampledata$Finishing)
sampledata$Positioning <- as.numeric(sampledata$Positioning)
sampledata$ShotPower <- as.numeric(sampledata$ShotPower)
sampledata$Balance <- as.numeric(sampledata$Balance)
sampledata$Stamina <- as.numeric(sampledata$Stamina)
sampledata$Strength <- as.numeric(sampledata$Strength)
sampledata$indicator <- as.numeric(as.factor((sampledata$indicator)))
library(caTools)
sample = sample.split(sampledata, SplitRatio = .80) #take random sample of 80% of rows to make training data
test_knn <- sampledata[-sample,]
test_attacker <- sampledata$indicator[-sample]
train_knn <- sampledata[sample,]
train_attacker <- sampledata$indicator[sample]
#Choose a K value
library(class)
predicted.attacker <- NULL
error.rate <- NULL
for (i in 1:10){
set.seed(101)
predicted.attacker <- knn(train_knn,test_knn,train_attacker,k=i)
error.rate[i] <- mean(test_attacker != predicted.attacker)
}
print(error.rate)
#visualize K elbow method
library(ggplot2)
k.values <- 1:10
error.df <- data.frame(error.rate,k.values)
print(error.df) #shows error rate for each k value
ggplot(error.df,aes(k.values,error.rate)) + geom_point() +
geom_line(lty='dotted',color='red')