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

基于Python的KNN分类器代码报错排查:我的代码问题在哪?

KNN分类器报错:Unknown label type: 'continuous' 解决方法

问题场景与错误信息

我正在完成课程作业,需使用KNN构建分类器并报告准确率,运行代码时出现如下错误:

Traceback (most recent call last):
File "c:\Users\jazzm\OneDrive\Desktop\python\HWK6.py", line 20, in 
classifier.fit(x_train, y_train)
File "C:\Users\jazzm\OneDrive\Desktop\python.venv\lib\site-packages\sklearn\neighbors_classification.py", line 207, in fit
return self._fit(X, y)
File "C:\Users\jazzm\OneDrive\Desktop\python.venv\lib\site-packages\sklearn\neighbors_base.py", line 429, in _fit
check_classification_targets(y)
File "C:\Users\jazzm\OneDrive\Desktop\python.venv\lib\site-packages\sklearn\utils\multiclass.py", line 200, in check_classification_targets
raise ValueError("Unknown label type: %r" % y_type)
ValueError: Unknown label type: 'continuous'

我的代码如下:

import pandas as PD
import numpy as np
import matplotlib.pyplot as mtp

data_set= PD.read_csv('hw6.data.csv.gz')

x= data_set.iloc[:,[2,3]].values
y= data_set.iloc[:, 4].values

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test= train_test_split(x,y, test_size=.25, random_state=0)

from sklearn.preprocessing import StandardScaler
st_x= StandardScaler()
x_train= st_x.fit_transform(x_train)
x_test= st_x.transform(x_test)

from sklearn.neighbors import KNeighborsClassifier
classifier= KNeighborsClassifier(n_neighbors=5, metric='minkowski', p=2)
classifier.fit(x_train, y_train)

y_pred= classifier.predict(x_test)

错误原因

KNeighborsClassifier是分类模型,要求输入的标签(y值)必须是离散的类别(比如0/1、A/B/C这类离散值),但你的y是连续型数值,所以模型报错。

解决步骤

1. 先确认标签列的情况

先运行以下代码,查看y的类型和取值:

print(y.dtype)
print(np.unique(y))

根据输出结果分两种情况处理:

2. 情况一:任务确实是分类

如果你的任务目标是分类,但y是连续值,需要把连续值转换成离散类别:

  • 方法1:按阈值划分成两类
    # 示例:将大于5的设为1,小于等于5的设为0
    y = np.where(y > 5, 1, 0)
    
  • 方法2:分箱成多类别
    # 示例:将y分成3个区间,对应标签0、1、2
    y = PD.cut(y, bins=3, labels=[0,1,2])
    

同时还要确认你选的第5列(索引4)是不是正确的分类标签列,别误选了连续型特征列。

3. 情况二:任务实际是回归

如果你的目标是预测连续数值(回归任务),那应该用KNN回归器替代分类器:

# 替换分类器为回归器
from sklearn.neighbors import KNeighborsRegressor
regressor = KNeighborsRegressor(n_neighbors=5, metric='minkowski', p=2)
regressor.fit(x_train, y_train)
y_pred = regressor.predict(x_test)

# 用回归指标评估(比如均方误差)
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_test, y_pred)
print(f"均方误差:{mse}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:25:34