用R中的插入符号实现K个最近邻居

问题描述 投票:0回答:1

我正在尝试使用插入符号在R中为此数据集构建一个基本的KNN模型,但它似乎没有工作(或者它可能是?)在最后的混淆矩阵中它只做出“否”预测,没有'是',这似乎是错误的。你怎么做得好?

https://archive.ics.uci.edu/ml/datasets/Bank+Marketing

> data <- read.csv("bank-additional.csv", sep=";")
> trainIndex <- createDataPartition(data$y, p=0.7, list=FALSE, times=1)
> creditTrain <- data[trainIndex,]
> creditTest <- data[-trainIndex,]
> View(creditTrain)
> View(creditTest)
> scaler <- preProcess(creditTrain, method=c("center", "scale"))
> creditTrain <- predict(scaler, creditTrain)
> creditTest <- predict(scaler, creditTest)
> knnModel <- train(y ~ age + job + education + default, data = data, method="knn")
> creditTestPredictions <- predict(knnModel, creditTest)
> confusionMatrix(creditTestPredictions, creditTest$y)
Confusion Matrix and Statistics

          Reference
Prediction   no  yes
       no  1100  135
       yes    0    0

               Accuracy : 0.8907          
                 95% CI : (0.8719, 0.9075)
    No Information Rate : 0.8907          
    P-Value [Acc > NIR] : 0.5229          

                  Kappa : 0               
 Mcnemar's Test P-Value : <2e-16          

            Sensitivity : 1.0000          
            Specificity : 0.0000          
         Pos Pred Value : 0.8907          
         Neg Pred Value :    NaN          
             Prevalence : 0.8907          
         Detection Rate : 0.8907          
   Detection Prevalence : 1.0000          
      Balanced Accuracy : 0.5000          

       'Positive' Class : no              

> 
r r-caret knn
1个回答
0
投票

这是一个非常不平衡的数据集,所以如果你训练好的算法对所有实例都没有预测,我也不会感到惊讶。

如何解决它仍然是一个非常重要的话题。我可以列出一些可能性。最常见的是使用交叉验证。它可能并不总是有效,但尝试没有伤害。或者你可以使用一些惩罚来调整你的优化目标,目前你只是在优化准确性。第三,你可以对代表性不足的课程进行上传,直到达到平衡。

© www.soinside.com 2019 - 2024. All rights reserved.