所以我的理解是,您执行一个热编码,将分类特征转换为整数,以将它们适合scikit学习机器学习分类器。
假设我们有两种选择
a。将所有特征拆分为一个热编码特征(如果A是一个取值为"A"、"b"one_answers"c"的分类特征,那么它就变成了A_A、A_b和A_c,每行都有二进制值,二进制值为"1",这意味着观察具有该特征,二进制值"0"意味着它不具有该特征!)。然后我会在这上面安装一个DecisionTreeClassifier。
b。不拆分所有特征,但是,在不执行一次热编码的情况下将每个类别转换为一个整数值(如果A是采用值"A"、"b"one_answers"c"的分类特征,则"A"one_answers"b"被重命名为1、2、3,并且没有创建新列,则通过使用pandas.factorize
或适合DecisionTreeClassifier的东西,"A"仍然是具有整数值1、2和3的单列
我的问题是,当您在一个具有多列的热编码数据集上安装DecisionTreeClassifier时,每个新列是否会被视为一个单独的功能?
此外,如果你在数据集上拟合DecisionTreeClassifier,其中分类特征被简单地转换为整数并保存在一列中;它会产生与DecisionTreeClassifier适用于具有一个热门编码特征的数据集的节点分裂相同的节点分裂吗?
比如,当你在这两种情况下都可视化树时,
下面给出的解释是正确的吗?
用于具有一个热编码的DecisionTree分类器
如果属性==A_A,则是
如果属性==A_b,则没有
对于没有一个热编码的DecisionTreeClassifier('a'由整数值1表示,'b'由值2表示)
如果属性==1,则是
如果属性==2,则没有
您所描述的两个选项做了两件非常不同的事情。
如果您选择对变量的值进行二值化(一次热编码),则它们没有顺序。每次拆分的决策树都会考虑对每个新的二进制变量进行二进制拆分,并选择信息量最大的一个。是的,每个二进制特征现在都被视为一个独立的特征。
第二个选项按顺序排列值。隐含地,你说a < b < c
如果变换a=1
,b=2
,c=3
。如果你在决策树中使用这个变量,算法会考虑分裂1对2,3和1,2对3(但不是3对1,2)。
因此,变量的含义是非常不同的,我不认为你可以期待同等的结果。