如何解决如何正确重塑 sklearn 分类器的 predict_proba 的多类输出?
我有一个包含 10 个类的多类问题。 使用任何带有 predict_proba 的 sklearn 分类器,我得到的输出为
(n_classes,n_samples,n_classes_probability_1_or_0)
就我而言(10,4789,2)
现在使用二元分类,我会这样做
model.predict_proba(X)[:,1]
我曾假设:
pred = np.array(model.predict_proba(X))
pred = pred.reshape(-1,10,2)[:,:,1]
会做同样的事情,但顺序完全关闭。
现在 y[:,class]
对应于 pred[class,1]
我知道我想错了形状,但不幸的是我看不到。
我如何正确地重塑它?
目标是在 roc_auc_score 指标中使用它
我想要 (instances,classes_probabilities = 1)
你能帮忙吗? 提前致谢!
解决方法
如果您提到您正在使用 MultiOutputClassifier
会很有用,因为 scikit learn 中的大多数多类分类器都不会返回与您类似的内容,因此使用示例数据集:
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.multioutput import MultiOutputClassifier
from sklearn import preprocessing
lb = preprocessing.LabelBinarizer()
from sklearn.datasets import make_classification
X,y = make_classification(n_samples=500,n_classes=10,n_informative=10,n_clusters_per_class=1)
y = lb.fit_transform(y)
设置分类器
forest = RandomForestClassifier(n_estimators=10,random_state=1)
model = MultiOutputClassifier(forest,n_jobs=-1)
model.fit(X,y)
您无需考虑重塑它,只需提取值即可:
pred = np.array(model.predict_proba(X))
就像您之前所做的那样,这将对应于每一行都是一个类,每一列都是您的观察:
pred[:,:,1].shape
(10,500)
要获得概率,只需转置:
prob1 = pred[:,1].T
prob1[:2]
array([[0.9,0.,0. ],[0.1,0.1,0.7,0. ]])
与我们是否实际提取并堆叠比较:
prob2 = np.hstack([i[:,1].reshape(-1,1) for i in model.predict_proba(X)])
array([[0.9,0. ]])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。