Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在DecisionTreeClassifier中为多类设置类权重_Python_Machine Learning_Scikit Learn_Decision Tree - Fatal编程技术网

Python 如何在DecisionTreeClassifier中为多类设置类权重

Python 如何在DecisionTreeClassifier中为多类设置类权重,python,machine-learning,scikit-learn,decision-tree,Python,Machine Learning,Scikit Learn,Decision Tree,我正在使用sklearn.tree.DecisionTreeClassifier来训练三级分类问题 三类记录的数量如下所示: A: 122038 B: 43626 C: 6678 当我训练分类器模型时,它无法学习类-C。虽然效率达到65-70%,但完全忽略了C类 然后我了解了class\u weight参数,但我不知道如何在多类设置中使用它 这是我的代码:(我使用了平衡的,但它的准确性更差) 如何使用与类分布成比例的权重 其次,有没有更好的方法来解决这个不平衡的类问题以提高准确性。您还可以将一

我正在使用
sklearn.tree.DecisionTreeClassifier
来训练三级分类问题

三类记录的数量如下所示:

A: 122038
B: 43626
C: 6678
当我训练分类器模型时,它无法学习类-
C
。虽然效率达到65-70%,但完全忽略了C类

然后我了解了
class\u weight
参数,但我不知道如何在多类设置中使用它

这是我的代码:(我使用了
平衡的
,但它的准确性更差)

如何使用与类分布成比例的权重


其次,有没有更好的方法来解决这个不平衡的类问题以提高准确性。

您还可以将一个值字典传递给class\u weight参数以设置自己的权重。例如,将班级的重量减半:

class_weight={
    'A': 0.5,
    'B': 1.0,
    'C': 1.0
}
通过执行class_weight='balanced',它会自动设置与课堂频率成反比的权重

更多信息可以在class_weight参数下的文档中找到:

通常可以预期,平衡类会降低准确性。这就是为什么对于不平衡的数据集,精度通常被认为是一个很差的指标

您可以尝试sklearn在开始时包含的平衡精度指标,但还有许多其他潜在指标需要尝试,这取决于您的最终目标是什么

如果您不熟悉“混淆矩阵”及其相关值,如精确度和召回率,那么我将从那里开始您的研究


您还可以将值字典传递给class\u weight参数,以设置自己的权重。例如,将班级的重量减半:

class_weight={
    'A': 0.5,
    'B': 1.0,
    'C': 1.0
}
通过执行class_weight='balanced',它会自动设置与课堂频率成反比的权重

更多信息可以在class_weight参数下的文档中找到:

通常可以预期,平衡类会降低准确性。这就是为什么对于不平衡的数据集,精度通常被认为是一个很差的指标

您可以尝试sklearn在开始时包含的平衡精度指标,但还有许多其他潜在指标需要尝试,这取决于您的最终目标是什么

如果您不熟悉“混淆矩阵”及其相关值,如精确度和召回率,那么我将从那里开始您的研究


开始的方式是“平衡”模式。

“平衡”模式使用y值自动调整 与输入数据中的类频率成反比的权重 作为n个样本/(n个类*np.bincount(y))


要手动定义权重,您需要一个字典或一个字典列表,具体取决于问题。


类别权重dict,dict列表或“平衡”,默认值=无

与{class_label:weight}形式的类关联的权重。如果没有,所有类都应该有权重1。用于多输出 如果出现问题,可以按照相同的顺序提供DICT列表 y列

注意,对于multioutput(包括multilabel),应该在其自己的dict中为每个列的>每个类定义权重。例如,对于四类multilabel>分类权重应该是[{0:1,1:1},{0:1,1:5},{0:1,1:1},{0:1,1:1}],而不是[{1:1},{2:5},{3:1},{4:1}]


例如:

如果A类频率为10%,B类频率为90%:

clf = tree.DecisionTreeClassifier(class_weight={A:9,B:1})

开始的方式是“平衡”模式。

“平衡”模式使用y值自动调整 与输入数据中的类频率成反比的权重 作为n个样本/(n个类*np.bincount(y))


要手动定义权重,您需要一个字典或一个字典列表,具体取决于问题。


类别权重dict,dict列表或“平衡”,默认值=无

与{class_label:weight}形式的类关联的权重。如果没有,所有类都应该有权重1。用于多输出 如果出现问题,可以按照相同的顺序提供DICT列表 y列

注意,对于multioutput(包括multilabel),应该在其自己的dict中为每个列的>每个类定义权重。例如,对于四类multilabel>分类权重应该是[{0:1,1:1},{0:1,1:5},{0:1,1:1},{0:1,1:1}],而不是[{1:1},{2:5},{3:1},{4:1}]


例如:

如果A类频率为10%,B类频率为90%:

clf = tree.DecisionTreeClassifier(class_weight={A:9,B:1})