基于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
相关产品推荐
相关产品推荐

