我正在尝试使用插入符号在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
>
这是一个非常不平衡的数据集,所以如果你训练好的算法对所有实例都没有预测,我也不会感到惊讶。
如何解决它仍然是一个非常重要的话题。我可以列出一些可能性。最常见的是使用交叉验证。它可能并不总是有效,但尝试没有伤害。或者你可以使用一些惩罚来调整你的优化目标,目前你只是在优化准确性。第三,你可以对代表性不足的课程进行上传,直到达到平衡。