您可以直接复制/粘贴代码到您的环境中运行。
我找到的科学术语是成本最小化,而算法应用的是准确性最大化。也就是说,算法的目标是获得最高的准确性得分,而我并不关心准确性,我关心的是不误分类某个特定类别。
我知道以下代码使用了决策树的CART算法,我想知道如何修改它以强调误分类False比误分类正类更危险。我知道术语是成本最小化,但我不确定如何应用它或应该查找哪些书籍。
import numpy as npimport pandas as pdfrom sklearn.datasets import make_classificationfrom sklearn.tree import DecisionTreeClassifierX, y = make_classification(n_samples=1000, n_features=6, n_informative=3, n_classes=2, random_state=0, shuffle=False)# Creating a dataFramedf = pd.DataFrame({'Feature 1':X[:,0], 'Feature 2':X[:,1], 'Feature 3':X[:,2], 'Feature 4':X[:,3], 'Feature 5':X[:,4], 'Feature 6':X[:,5], 'Class':y})y_train = df['Class']X_train = df.drop('Class',axis = 1)dt = DecisionTreeClassifier(random_state=42)dt.fit(X_train, y_train)
回答:
我只能想到两个选项:
增加正类别的权重
DecisionTreeClassifier有一个参数,可以让您更改每个类别的默认权重。默认是平衡的,这意味着所有类别的权重都等于1。为了最小化假阴性,您可以为标记为正类的数据赋予更大的权重。
创建自己的评分函数以最小化假阴性
算法为每个类别计算概率。如果您有两个类别的分类问题,那么如果一个样本的概率>=0.5,则评分为1,如果<0.5,则评分为0。
这些概率会随训练模型一起返回,您可以通过dt.predict_proba
获取它们。因此,不要使用模型返回的评分标签,而是使用预测的概率来创建您的评分函数,以在成本矩阵上最小化假阴性。