如何用Python实现预测?MLPClassifier报Unknown label type错误求解
解决
ValueError: Unknown label type问题 这个错误的根源很明确:你使用的MLPClassifier是分类模型,它要求输入的标签是离散的类别标识(比如整数0/1/2,或者字符串类别名),但你的标签数据是连续的浮点数(比如1.0,1.1,1.2这类),scikit-learn无法将连续值识别为分类任务的标签,因此抛出了这个异常。
根据你的实际任务需求,有两种针对性的解决方案:
方案1:你确实需要做分类任务
如果这些浮点数代表的是不同的独立类别(比如1.0对应类别A,1.1对应类别B,以此类推),你需要把标签转换成模型能识别的离散类别格式,推荐用LabelEncoder来统一编码:
import numpy as np from sklearn.naive_bayes import GaussianNB from sklearn.model_selection import train_test_split from sklearn.neural_network import MLPClassifier from sklearn.preprocessing import LabelEncoder # 新增导入 data = np.loadtxt('C:/Users/hedeg/Desktop/RulaSoftEdgePrediction.txt') X_train = np.array(data[0:3500,0:4]) y_train = np.array(data[0:3500,4]) X_test = np.array(data[3500::,0:4]) y_test = np.array(data[3500::,4]) # 对标签进行编码,将唯一浮点数转为连续整数类别 le = LabelEncoder() y_train = le.fit_transform(y_train) y_test = le.transform(y_test) clf = MLPClassifier(solver='lbfgs', alpha=1e-5,hidden_layer_sizes=(5, 2), random_state=1) clf.fit(X_train, y_train)
LabelEncoder会自动把所有唯一的浮点数标签转换成从0开始的连续整数,完美适配分类模型的要求。
方案2:你实际需要做回归任务
如果你的目标是预测连续的数值(比如输出1.0、1.1这类连续结果),那你用错了模型——应该用专门处理回归任务的MLPRegressor,而不是分类用的MLPClassifier:
import numpy as np from sklearn.naive_bayes import GaussianNB from sklearn.model_selection import train_test_split from sklearn.neural_network import MLPRegressor # 替换导入为回归模型 data = np.loadtxt('C:/Users/hedeg/Desktop/RulaSoftEdgePrediction.txt') X_train = np.array(data[0:3500,0:4]) y_train = np.array(data[0:3500,4]) X_test = np.array(data[3500::,0:4]) y_test = np.array(data[3500::,4]) # 使用MLPRegressor替换MLPClassifier,适配连续值预测 clf = MLPRegressor(solver='lbfgs', alpha=1e-5,hidden_layer_sizes=(5, 2), random_state=1) clf.fit(X_train, y_train)
这样模型就会以预测连续数值为目标,不会再纠结标签类型的问题。
内容的提问来源于stack exchange,提问作者Masilila
相关产品推荐
相关产品推荐

