我正在尝试使用插入符号在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
>
答案 0 :(得分:0)
这是一个高度不平衡的数据集,因此如果您训练有素的算法对所有实例均预测为否,我不会感到惊讶。
如何解决它仍然是一个不重要的话题。我可以列举一些可能性。最常见的一种是使用交叉验证。它可能并不总是有效,但尝试时不会受到伤害。或者您可以使用一些惩罚来调整您的优化目标,当前您只是在优化精度。第三,您可以对代表性不足的课程进行升采样,直到达到平衡为止。