3

28 個の変数 (13 個のラベルと 15 個の特徴) を持つトレーニング データ セットがあります。15 個の特徴を持つテスト データ セットと、特徴に基づいてこのテスト データ セットのラベルを予測する必要があります。全 13 ラベルの KNN 分類器を個別に作成しました。

これら 13 個の個別ラベル KNN 分類器すべてを 1 つのマルチラベル分類器に結合する可能性はありますか?

単一ラベルの現在のコード:

library(class)
train_from_train <- train[1:600,2:16] 
target_a_train_from_train <- train[1:600,17] 
test_from_train <- train[601:800,2:16]
target_a_test_from_train <- train[601:800,17] 
knn_pred_a <-knn (train = train_from_train, test = test_from_train, cl= target_a_train_from_train, k = 29) 
table(knn_pred_a, target_a_test_from_train)
mean(knn_pred_a != target_a_test_from_train) 
knn_pred_a_ON_TEST <-knn (train = train[,2:16], test = test[2:16], cl= train[,17], k = 29) 
knn_pred_a_ON_TEST

私はインターネットを精査し、パッケージmldrはオプションのようですが、自分のニーズに合わせることができませんでした.

4

1 に答える 1

2

これにはパッケージ ARNN を使用できます。ただし、私の知る限り正確ではありません。

library(RANN)
library(reshape2)

####
## generate some sample data and randomize order
iris.knn <- iris[sample(1:150,150),]
#add a second class
iris.knn["Class2"] <- iris.knn[,5]=="versicolor"
iris.knn$org.row.id <- 1:nrow(iris.knn)
train <- iris.knn[1:100,]
test <- iris.knn[101:150,]
##
#####
## get nearest neighbours
nn.idx <- as.data.frame(nn2(train[1:4],query=test[1:4],k=4)$nn.idx)
## add row id
nn.idx$test.row.id <- test$rowid

#classes and row id
multiclass.vec <- data.frame(row.id=1:150,iris.knn[,5:6])
#1 row per nearest neighbour
melted <-melt(nn.idx,id.vars="row.id")
merged <- merge(melted,multiclass.vec, by.x = "value",by.y="org.row.id")
#aggrgate a single class
aggregate(merged$Species, list(merged$row.id), function(x) names(which.max(table(x))))

 #### aggregate for all classes
 all.classes <- melt(merged[c(2,4,5)],id.vars = "row.id")
 fun.agg <- function(x) {
               if(length(x)==0){
                 ""  #<-- default value adaptation might be needed.
               }else{
                 names(which.max(table(x)))
               }
 }
 dcast(all.classes,row.id~variable, fun.aggregate=fun.agg,fill=NULL)

単一のクラスに対してのみ集計を行いました。このステップをすべてのクラスに対して並行して実行すると、別のメルト操作が必要になり、コードがかなり面倒になります。

于 2016-01-18T10:35:56.983 に答える