如何在拟合 Sklearn 估计器和转换器之前手动指定正 class
How to specify the positive class manually before fitting Sklearn estimators and transformers
我正在尝试使用来自 UCI ML Repo 的 relevant dataset 预测信用卡批准。问题是目标将信用卡申请编码为“+”表示批准,“-”表示拒绝。
由于目标中有更多被拒绝的申请,所有评分员、估算员都将被拒绝的 class 视为积极的,否则应该是积极的。因此,我的混淆矩阵全乱了,因为我认为所有真阳性和真阴性、假阳性和假阴性都倒置了:
如何手动指定正数 class?
我不知道有哪些 scikit-learn 估计器或转换器可以让您翻转正负 class 标识符作为参数。但我可以想到两种方法来解决这个问题:
方法 1:在拟合估计器之前自行转换数组标签
numpy
数组可以轻松实现:
y = np.array(['+', '+', '+', '-', '-'])
y_transformed = [1 if i == '+' else 0 for i in y]
还有 pandas Series
个对象:
y = pd.Series(['+', '+', '+', '-', '-'])
y_transformed = y.map({'+': 1, '-': 0})
在这两种情况下,输出都是 [1, 1, 1, 0, 0]
方法二:在confusion_matrix
中定义labels
参数
scikit-learn 的 confusion_matrix
有一个参数 labels
,可让您重新排序标签。像这样使用:
y_true = np.array([1, 1, 1, 0, 0])
y_pred = np.array([1, 0, 1, 0, 0])
print(confusion_matrix(y_true, y_pred))
# output
[[2 0]
[1 2]]
print(confusion_matrix(y_true, y_pred, labels=[1, 0]))
# output
[[2 1]
[0 2]]
我正在尝试使用来自 UCI ML Repo 的 relevant dataset 预测信用卡批准。问题是目标将信用卡申请编码为“+”表示批准,“-”表示拒绝。
由于目标中有更多被拒绝的申请,所有评分员、估算员都将被拒绝的 class 视为积极的,否则应该是积极的。因此,我的混淆矩阵全乱了,因为我认为所有真阳性和真阴性、假阳性和假阴性都倒置了:
如何手动指定正数 class?
我不知道有哪些 scikit-learn 估计器或转换器可以让您翻转正负 class 标识符作为参数。但我可以想到两种方法来解决这个问题:
方法 1:在拟合估计器之前自行转换数组标签
numpy
数组可以轻松实现:
y = np.array(['+', '+', '+', '-', '-'])
y_transformed = [1 if i == '+' else 0 for i in y]
还有 pandas Series
个对象:
y = pd.Series(['+', '+', '+', '-', '-'])
y_transformed = y.map({'+': 1, '-': 0})
在这两种情况下,输出都是 [1, 1, 1, 0, 0]
方法二:在confusion_matrix
labels
参数
scikit-learn 的 confusion_matrix
有一个参数 labels
,可让您重新排序标签。像这样使用:
y_true = np.array([1, 1, 1, 0, 0])
y_pred = np.array([1, 0, 1, 0, 0])
print(confusion_matrix(y_true, y_pred))
# output
[[2 0]
[1 2]]
print(confusion_matrix(y_true, y_pred, labels=[1, 0]))
# output
[[2 1]
[0 2]]