Scikit-Learn:使用SGDClassifier拟合乳腺癌数据集时为何报ValueError: Unknown label type?
错误原因及解决办法
核心问题
你错误地将数据集的特征列当作了分类任务的标签y,导致SGDClassifier无法识别标签类型。
具体解释
load_breast_cancer数据集的分类标签存储在breast_cancer["target"]中,是离散的二分类值(0代表恶性,1代表良性),符合SGDClassifier(分类器)对标签的要求。- 你代码中
y = breast_df["worst fractal dimension"]选取的是数据集里的一个连续数值型特征,不是分类标签。SGDClassifier默认用于分类任务,无法处理连续值作为标签的情况,因此抛出ValueError: Unknown label type。
修正后的分类任务代码
import pandas as pd import numpy as np from sklearn.datasets import load_breast_cancer from sklearn.linear_model import SGDClassifier from sklearn.model_selection import train_test_split breast_cancer = load_breast_cancer(as_frame=True) # 特征矩阵X使用所有特征列 X = breast_cancer.data # 标签y使用数据集自带的分类标签 y = breast_cancer.target np.random.seed(42) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) model = SGDClassifier() model.fit(X_train, y_train) print(model.score(X_test, y_test))
额外说明
如果你原本是想对"worst fractal dimension"这个连续值做预测(回归任务),那么应该使用SGDRegressor而不是SGDClassifier,代码示例如下:
import pandas as pd import numpy as np from sklearn.datasets import load_breast_cancer from sklearn.linear_model import SGDRegressor from sklearn.model_selection import train_test_split breast_cancer = load_breast_cancer(as_frame=True) breast_df = breast_cancer.data X = breast_df.drop("worst fractal dimension", axis=1) y = breast_df["worst fractal dimension"] np.random.seed(42) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) model = SGDRegressor() model.fit(X_train, y_train) print(model.score(X_test, y_test))
内容的提问来源于stack exchange,提问作者parham zargar
相关产品推荐
相关产品推荐

