使用SVC、MultinomialNB分类时出现Unknown label type: 'continuous'错误如何解决
错误根源
你选用的MultinomialNB、SVC都属于分类模型,仅支持输入离散的类别标签,你当前的ytrain是连续浮点数值,属于回归任务的标签类型,因此触发类型不匹配报错。你之前编写的标签编码代码未生效,是因为你没有将编码后的encoded变量传入模型训练,仍然使用了原始的连续值标签ytrain。
解决方案
根据你的实际业务需求二选一即可:
方案1:确认做分类任务,调整标签处理逻辑
分类任务要求标签是固定的离散类别,你需要先把连续数值标签转换为离散类别:
- 推荐先根据业务逻辑对连续值做分箱处理,再编码为整数标签,示例代码如下:
import pandas as pd from sklearn import preprocessing from sklearn.naive_bayes import MultinomialNB # 步骤1:将连续标签分箱为离散类别,可根据业务调整分箱数量、边界 ytrain_category = pd.cut(ytrain, bins=3, labels=['低', '中', '高']) # 步骤2:将类别标签编码为整数 lab_enc = preprocessing.LabelEncoder() encoded_ytrain = lab_enc.fit_transform(ytrain_category) # 步骤3:训练模型时必须传入编码后的标签,不要传原始ytrain model = MultinomialNB() model.fit(Xtrain, encoded_ytrain)
- 如果你确实需要将每一个唯一的连续值作为单独类别,可以直接对原始
ytrain做LabelEncoder编码,注意传入模型的必须是编码后的结果。
处理完成后可以运行以下代码验证标签类型,输出为binary或multiclass即为符合要求:
from sklearn import utils print(utils.multiclass.type_of_target(encoded_ytrain))
方案2:确认做连续值预测任务,替换为回归模型
如果你的业务就是要预测连续数值,属于回归任务,直接替换对应回归模型即可,不需要修改标签:
from sklearn.svm import SVR from sklearn.linear_model import BayesianRidge # SVC对应替换为SVR(支持向量回归) svr_model = SVR() svr_model.fit(Xtrain, ytrain) # MultinomialNB对应替换为贝叶斯回归类模型 bayes_model = BayesianRidge() bayes_model.fit(Xtrain, ytrain)
内容的提问来源于stack exchange,提问作者bishwajit bhattacharya
相关产品推荐
相关产品推荐

