如何让Sklearn的svm.SVC分类器输出二元类别的独热向量
实现SVC多分类预测结果转独热编码向量的方案
你可以通过以下两种常用方式实现需求:
方法1:使用Sklearn内置的LabelBinarizer转换(推荐)
直接利用Sklearn自带的标签二值化工具,自动适配你的训练集类别规则,代码示例如下:
from sklearn import svm from sklearn.preprocessing import LabelBinarizer import numpy as np X_train = np.array([ [35.0,15.0], [36.0,15.5], [0,0] ]) # 训练特征 y_train = np.array([1, 2, 3]) # 训练类别 X_new = np.array([[36.2,15.0]]) # 初始化标签二值化器并拟合训练集类别 lb = LabelBinarizer() lb.fit(y_train) clf = svm.SVC() clf.fit(X_train, y_train) pred = clf.predict(X_new) # 转换为独热编码形式 one_hot_pred = lb.transform(pred) print(one_hot_pred)
运行输出就是你需要的结果:
array([[0, 1, 0]])
方法2:手动用Numpy生成(无需额外导入预处理类)
利用训练完成的SVC模型自带的classes_属性(存储了排序后的所有类别列表),手动构造独热向量,代码示例如下:
from sklearn import svm import numpy as np X_train = np.array([ [35.0,15.0], [36.0,15.5], [0,0] ]) # 训练特征 y_train = np.array([1, 2, 3]) # 训练类别 X_new = np.array([[36.2,15.0]]) clf = svm.SVC() clf.fit(X_train, y_train) pred = clf.predict(X_new) # 手动构造独热向量 one_hot_pred = np.zeros(clf.classes_.shape, dtype=int) # 找到预测类别对应的索引 pred_idx = np.where(clf.classes_ == pred[0])[0][0] one_hot_pred[pred_idx] = 1 print(one_hot_pred)
运行输出:
array([0, 1, 0])
注意事项
如果你的类别有自定义排序需求,可以在初始化LabelBinarizer时手动指定classes参数,比如lb = LabelBinarizer(classes=[3,1,2]),就会按照你指定的类别顺序生成独热向量。
内容的提问来源于stack exchange,提问作者Red-Sky
相关产品推荐
相关产品推荐

