Python Sklearn:了解分类变量的d树输出

时间:2017-07-02 07:37:31

标签: python python-3.x pandas machine-learning scikit-learn

我正在学习Python Scikit-learn

我最近在问题集上实施了d-tree。数据集具有所有分类特征,与R不同,Python需要对分类变量进行虚拟编码。

我使用以下代码执行了所有分类变量的虚拟编码:

col_names =['city_name','signup_os','signup_channel']
df_with_dummies = pd.get_dummies(df2, columns = col_names)

虚拟编码根据每列所具有的因子数创建新列,然后用0和1替换值:

enter image description here

我在这个新的数据帧上创建了一个d-tree算法,但令我困惑的是输出。

d-tree方法已为虚拟编码列提供 .5 的节点值:

enter image description here

如何解释输出?价值sign_up_os_windows <=.5的意义是什么?我应该如何将其转换回原始变量?

请帮助我提供您的意见。

1 个答案:

答案 0 :(得分:2)

  • DT分类器将二进制分类变量表示为float 0.5 不是问题。条件signup_os_ios_web <= 0.5signup_os_ios_web == 0.0;
  • 相同
  • 该算法不会在内部转换输入。

让我假设 0 状态&#39;否&#39;和 1 状态&#39;是&#39;。在您的情况下,请考虑指示signup_os_ios_web的第一个节点:

  • 如果答案是“否”&#39; (signup_os_ios_web <= 0.5因此等于0),然后它继续发展给它的孩子,特别是Eagerness;
  • 如果后者也是“没有”,则算法沿着树向下移动,到达您的signup_os_windows二进制虚拟......依此类推。

0.5 视为一个简单的中等阈值或 0 1 之间的中心,它基本上划分了“是”&#39;并且没有&#39;两种可能的偶然事件。

实施例

让我们看看由22个样本组成的缩短的泰坦数据集。 X如下所示:

Indexer          (0)  (1)    (2)      (3)
PassengerID    Pclass Sex    Age      Fare
1                 3    1    22.00    7.2500
2                 1    0    38.00   71.2833
3                 3    0    26.00    7.9250
4                 1    0    35.00   53.1000
5                 3    1    35.00    8.0500

如您所见,Sex列是一个二进制分类变量,索引等于1.

y是一个数组,表示一个人是否幸存。如果我们打印出前5个样本,我们将收到:

  

数组([0,0,0,0,0])

这意味着从这个变量中取出的前5个人无法成功。

好的,在我们安装了DT分类器之后,我们可以创建一个图表来更彻底地查看树结构(我使用export_graphviz来实现它):

enter image description here

第一个节点表示给定样本的性别,索引 1 与上面列出的名为Sex的列相关。列PassengerID只是X数据框的索引器。

您还可以看到条件与您的相似,因为阈值等于 0.5 。你可以把它读作:

  

如果性别为女性(如果Sex <= 0.5使其自动等于0),请继续执行左侧节点

我希望澄清。