Ну, я не могу решить вашу проблему, так как у меня нет образцов данных. Тем не менее, я могу пояснить пример в документации для вас, чтобы вы могли начать с представления о том, что происходит.
train – это "контрольные" данные, для которых уже известна классификация. Он будет использоваться для формирования структуры knn, что позволит вам делать прогнозы на будущее.
cl — правильные ответы для обучающего набора данных.
Здесь встроенный набор данных iris используется для имитации «известных данных». Набор данных поезда берется таким образом, чтобы было равное количество каждого вида (s - Setosa, c - Versicolor, v - Virginica).
train <- rbind(iris3[1:25,,1], iris3[1:25,,2], iris3[1:25,,3])
cl <- factor(c(rep("s",25), rep("c",25), rep("v",25)))
- тест — это набор данных, который вы пытаетесь классифицировать. Учитывая существующую (обученную) структуру knn, тестовые наблюдения анализируются построчно и генерируется прогноз.
Тот же набор данных используется для построения тестовых данных. Конечно, мы знаем здесь истинную классификацию, но делаем вид, что не знаем. Истинная классификация такая же, как и раньше; он не может быть использован knn: для knn эта информация недоступна. Мы храним эти данные, чтобы оценить наши прогнозы.
test <- rbind(iris3[26:50,,1], iris3[26:50,,2], iris3[26:50,,3])
cl.test <- cl
Наконец, мы готовы продолжить. Вот вектор прогнозов для тестового набора данных. Если prob=TRUE, мы дополнительно видим, насколько «уверен» алгоритм в каждом случае:
pr.test <- knn(train, test, cl, k = 3, prob=TRUE)
[1] s s s s s s s s s s s s s s s s s s s s s s s s s c c v c c c c c v c c c c c c c c c c
[45] c c c c c c v c c v v v v v c v v v v c v v v v v v v v v v v
attr(,"prob")
[1] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[9] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[17] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[25] 1.0000000 1.0000000 1.0000000 0.6666667 1.0000000 1.0000000 1.0000000 1.0000000
[33] 1.0000000 0.6666667 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[41] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[49] 1.0000000 1.0000000 1.0000000 0.6666667 0.7500000 1.0000000 1.0000000 1.0000000
[57] 1.0000000 1.0000000 0.5000000 1.0000000 1.0000000 1.0000000 1.0000000 0.6666667
[65] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 0.6666667
[73] 1.0000000 1.0000000 0.6666667
Levels: c s v
Теперь мы можем оценить, насколько верна наша модель.
sum(pr.test==cl.test)/length(cl.test)
Что составляет 70 из 75, или 93% правильно.
Обратитесь к статистической литературе за более подробной информацией о том, как работает knn. Для вашей проблемы рассмотрите метод перекрестной проверки для настройки модели.
person
tonytonov
schedule
18.12.2013