You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用KNN预测多分类标签遇低准确率及混淆矩阵报错求助

问题分析与解决

一、混淆矩阵报错的直接原因

代码里变量名大小写不匹配:

Matrix = confusion_matrix(y_test, y_pred)
print(matrix)  # 此处用了小写的matrix,但定义的变量是大写的Matrix

Python是大小写敏感语言,把print(matrix)改成print(Matrix)即可解决该报错。

二、模型准确率仅13%的核心问题

多个逻辑错误叠加导致模型完全失效,具体问题如下:

1. 标签处理逻辑错误:多分类标签无需One-Hot编码

KNeighborsClassifier处理多分类任务时,不需要对标签做One-Hot编码,它期望的标签是一维类别数组(比如原始的very expensive/expensive字符串,或用LabelEncoder转成的整数)。你用pd.get_dummies把标签转成4列二维矩阵后,模型会错误地将其识别为多标签分类任务(即每个样本可同时属于多个类别),而非你需要的单标签多分类任务,这直接导致训练逻辑完全偏离预期。

2. 特征缩放逻辑错误:测试集不能重新拟合Scaler

特征缩放时,测试集必须复用训练集拟合好的Scaler做转换,不能对测试集调用fit_transform(这会用测试集自身的min/max值缩放,属于数据泄露,破坏训练与测试的独立性)。正确写法:

scaler = preprocessing.MinMaxScaler()
X_train_scaled = scaler.fit_transform(X_train)  # 仅在训练集上执行fit
X_test_scaled = scaler.transform(X_test)  # 测试集直接用训练集的Scaler做转换

3. 训练测试集拆分的变量名错误

你在步骤2中拆分时,将未缩放的特征变量命名为X_train_scaled和X_test_scaled,后续步骤3里的X_train和X_test根本未定义,实际运行会抛出NameError。正确拆分应先得到未缩放的训练测试集:

X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.30)

三、修正后的完整代码示例

# 1. 直接使用原始标签,无需One-Hot编码
Y = df['costrange']

# 2. 拆分训练测试集(先得到未缩放的特征)
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.30, random_state=42)  # 加random_state保证结果可复现

# 3. 特征缩放:训练集fit,测试集复用Scaler
scaler = preprocessing.MinMaxScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 4. 训练KNN模型
knn = KNeighborsClassifier(n_neighbors=4, weights='uniform')
knn.fit(X_train_scaled, y_train)
y_pred = knn.predict(X_test_scaled)

# 5. 模型评估
print(metrics.accuracy_score(y_test, y_pred))
print(knn.score(X_test_scaled, y_test))

# 混淆矩阵(变量名大小写保持一致)
confusion_matrix_result = confusion_matrix(y_test, y_pred)
print(confusion_matrix_result)

额外优化建议

  • 多分类任务除了准确率,可通过metrics.classification_report(y_test, y_pred)查看每个类别的精确率、召回率,更全面评估模型性能。
  • KNN的n_neighbors参数可通过交叉验证(如GridSearchCV)筛选最优值,进一步提升模型效果。

内容的提问来源于stack exchange,提问作者Jason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:55:34