Sklearn与Pandas分类器异常:输入不同输出结果却一致
问题解决:KNN分类器输出始终一致的原因及修复方案
核心问题:预测输入未做标准化
你训练模型时对X_train和X_test都用了StandardScaler做标准化,但预测时直接传入原始的[[5, 6, 7, 3]],没有经过相同的scaler转换。KNN是基于距离计算的模型,原始输入和标准化后的训练数据不在同一尺度,模型计算出的距离完全失真,最终大概率每次都预测训练集中占比最高的类别。
修复步骤
1. 对预测输入做标准化
把预测的输入数据用训练时拟合好的scaler做转换,代码修改如下:
# 原预测代码 # y_pred = classifier.predict([[5, 6, 7, 3]]) # 修改后:先标准化输入 input_data = scaler.transform([[5, 6, 7, 3]]) y_pred = classifier.predict(input_data)
2. 检查数据集类别分布
如果修复后还是输出一致,那可能是你的数据集里某个成员ID的出现次数远高于其他(类别不平衡)。可以运行以下代码查看训练集的类别分布:
print(pd.Series(y_train).value_counts())
如果某个ID占比超过50%,KNN在多数情况下会倾向于预测这个类别。这种情况可以尝试:
- 调整
n_neighbors参数,比如调小到3或1,减少多数类的影响 - 对数据集做重采样(过采样少数类/欠采样多数类)
3. 验证模型性能
建议先在测试集上评估模型的准确率,确认模型本身是否有效:
y_test_pred = classifier.predict(X_test) from sklearn.metrics import accuracy_score print(f"测试集准确率:{accuracy_score(y_test, y_test_pred)}")
如果准确率极低,说明模型不适合这个任务,或者数据特征(前4个成员ID)和目标(第5个成员)之间没有明显关联,可能需要换模型(比如分类树、朴素贝叶斯)或者重新设计特征。
内容的提问来源于stack exchange,提问作者Max SF
相关产品推荐
相关产品推荐

