如何在R中使用KNN分类对新样本(年薪32000、行业1)预测性别?
KNN预测新样本性别的实现步骤
要预测新样本(年薪32000、行业1)的性别,核心是让新样本的特征和训练数据采用完全相同的归一化规则,具体操作如下:
1. 获取原始训练数据的特征极值
你的归一化函数基于iwg数据集的SalaryInUSD和Industry的最大、最小值计算,先提取这两个特征的原始统计量:
# 提取原始数据的极值,用于后续归一化 salary_min <- min(iwg$SalaryInUSD) salary_max <- max(iwg$SalaryInUSD) industry_min <- min(iwg$Industry) industry_max <- max(iwg$Industry)
2. 对新样本做归一化处理
不能直接用原始值输入KNN,必须按照训练数据的归一化规则转换:
# 创建新样本数据框 new_sample <- data.frame(SalaryInUSD = 32000, Industry = 1) # 执行归一化,与训练集规则完全一致 new_sample$SalaryInUSD <- (new_sample$SalaryInUSD - salary_min) / (salary_max - salary_min) new_sample$Industry <- (new_sample$Industry - industry_min) / (industry_max - industry_min)
3. 调用KNN进行预测
沿用你训练时的参数(k=24),传入训练集、归一化后的新样本和训练集的性别标签:
library(class) set.seed(12) # 保持随机种子一致,确保结果可复现 new_pred <- knn(train = mstr, test = new_sample, cl = iwg[1:450, 3], k = 24) # 查看预测结果 print(new_pred)
关键注意事项
- 归一化是KNN的核心前提,新样本必须和训练集共享同一套极值计算逻辑,否则距离计算会失效,导致预测结果不可靠。
- 从你提供的混淆矩阵来看,模型对女性样本的预测准确率更高(71/77),男性样本的误判率较高(30/42),预测结果可结合这一特性参考。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

