使用KNN算法预测连续变量报错:ValueError如何解决?
问题场景与错误分析
数据集
| Number of plants | Total kg |
|---|---|
| 900 | 7.565 |
| 1440 | 17.808 |
| 2340 | 25.373 |
| 900 | 10.340 |
| 900 | 10.610 |
尝试使用KNN算法基于植株数量预测总产量,编写的代码如下:
from sklearn.neighbors import KNeighborsClassifier df = pd.read_csv(r'final2.csv') X = df.drop('Total kg', axis=1) Y = df[["Total kg"]] X=X.values Y=Y.values knn = KNeighborsClassifier(n_neighbors=1) prediction = knn.fit(X,Y)
运行后报错:
ValueError: Unknown label type: 'continuous'
解答
KNN完全可以处理连续变量的预测任务,你只是用错了模型类型:
KNeighborsClassifier是分类模型,仅适用于离散标签的分类任务(比如判断花的品种),而你的目标变量"Total kg"是连续数值,属于回归预测任务。- 要处理连续变量预测,应该使用
sklearn中的KNeighborsRegressor,这是专门为回归任务设计的KNN模型。
修正后的代码
from sklearn.neighbors import KNeighborsRegressor import pandas as pd # 补充缺失的pandas导入 df = pd.read_csv(r'final2.csv') X = df.drop('Total kg', axis=1) Y = df["Total kg"] # 用单层方括号获取一维Series即可,无需转二维数组 # 初始化回归模型 knn_reg = KNeighborsRegressor(n_neighbors=1) knn_reg.fit(X, Y) # 示例预测:输入900株的数量,得到预测产量 sample_input = [[900]] predicted_total_kg = knn_reg.predict(sample_input) print(predicted_total_kg)
额外说明
- KNN回归的核心逻辑是取邻近样本的均值(或加权均值)作为预测结果,天然适配连续变量的预测需求。
- 原始代码漏导入
pandas,运行时会触发NameError,修正代码中已补充。 - 目标变量无需手动转成
values,sklearn可以直接处理Pandas的DataFrame/Series类型。
内容的提问来源于stack exchange,提问作者Stetco Oana
相关产品推荐
相关产品推荐

