k-ближайший сосед: частота ошибок увеличивается с увеличением K - PullRequest
0 голосов
/ 05 мая 2019

enter image description here Я делаю анализ 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')
...