我正在尝试使用插入符号在 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
>
这是一个高度不平衡的数据集,所以如果您的训练算法对所有实例都预测为否,我不会感到惊讶。
如何修复它仍然是一个重要的话题。我可以列出几种可能性。最常见的一种是使用交叉验证。它可能并不总是有效,但尝试也无妨。或者您可以使用一些惩罚来调整您的优化目标,目前您只是在优化准确性。第三,您可以对代表性不足的类进行上采样,直到达到平衡。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句