gpt4 book ai didi

r - 使用 R 中的简单数据集在 KNN 中选择 K 值

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:07:43 24 4
gpt4 key购买 nike

我知道这在很多情况下都已在网上得到解答,但由于这非常依赖于数据集,我想知道是否有一种简单的方法可以使用相对简单的数据集在 KNN 算法中找到最佳 K 值。

我的响应变量是一个行为类(E 列:事件),我的预测变量是事件传感器的三个轴(B 到 D 列)。这是一个 sample我的数据是什么样子的。

在下面找到我为运行 knn 分析而编写的代码。 datanet 对象看起来就像我上传的示例图像。我使用前 150 行作为训练,其余 [151 到 240] 行作为测试。

在这种情况下,我使用了 10 的 K 值,但是在针对不同的 K 值运行脚本后,我显然得到了不同的输出,所以想知道选择 K 值的最佳方法是什么最适合我的数据集。特别是,我需要帮助在 R 中对此进行编码。

library(data.table)

#From the file "Collar_#.txt", just select the columns ACTIVITY_X, ACTIVITY_Y, ACTIVITY_Z and Event
dataraw<-fread("Collar_41361.txt", select = c("ACTIVITY_X","ACTIVITY_Y","ACTIVITY_Z","Event"))

#Now, delete all rows containg the string "End"
datanet<-dataraw[!grepl("End", dataraw$Event),]

#Then, read only the columns ACTIVITY_X, ACTIVITY_Y and ACTIVITY_Z for a selected interval that will act as a trainning set
trainset <- datanet[1:150, !"Event"]
View(trainset)

#Create the behavioural classes. Note that the number of rows should be in the same interval as the trainset dataset
behaviour<-datanet[1:150,!1:3]
View(behaviour)

#Test file. This file contains sensor data only, and behaviours would be associated based on the trainset and behaviour datasets
testset<-datanet[151:240,!"Event"]
View(testset)

#Converting inputs into matrix
train = as.matrix(trainset, byrow = T, ncol=3)
test = as.matrix(testset, byrow = T, ncol=3)
classes=as.matrix(behaviour,byrow=T,ncol=1)

library(stats)
library(class)

#Now running the algorithm. But first we set the k value.

for kk=10

kn1 = knn(train, test, classes, k=kk, prob=TRUE)

prob = attributes(.Last.value)
clas1=factor(kn1)

#Write results, this is the classification of the testing set in a single column
filename = paste("results", kk, ".csv", sep="")
write.csv(clas1, filename)

#Write probs to file, this is the proportion of k nearest datapoints that contributed to the winning class
fileprobs = paste("probs", kk, ".csv", sep="")
write.csv (prob$prob, fileprobs)

我也在上传样本 image我的脚本的输出。在 D 列上查看 A 到 C 列值的“真实行为类别”,在 E、G、I、K、M 和 O 列上查看算法根据行 [1: 150], 对于不同的 K 值。

非常感谢任何帮助!!!

最佳答案

在 KNN 中找到 K 不是一件容易的事,K 值小意味着噪声对结果的影响较大,值大则计算量大。

我经常看到人们使用:K = SQRT(N)。但是,如果您不想为您的场景找到更好的 K,请使用 Carret 包中的 KNN,这是一个示例:

library(ISLR)
library(caret)

# Split the data:
data(iris)
indxTrain <- createDataPartition(y = iris$Sepal.Length,p = 0.75,list = FALSE)
training <- iris[indxTrain,]
testing <- iris[-indxTrain,]

# Run k-NN:
set.seed(400)
ctrl <- trainControl(method="repeatedcv",repeats = 3)
knnFit <- train(Species ~ ., data = training, method = "knn", trControl = ctrl, preProcess = c("center","scale"),tuneLength = 20)
knnFit

#Use plots to see optimal number of clusters:
#Plotting yields Number of Neighbours Vs accuracy (based on repeated cross validation)
plot(knnFit)

enter image description here

这表明 5 的准确率最高,因此 K 的值为 5。

关于r - 使用 R 中的简单数据集在 KNN 中选择 K 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54446125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com