【问题标题】:Python Sklearn: Understanding of d-tree Output for Categorical VariablePython Sklearn:理解分类变量的 d-tree 输出
【发布时间】:2017-12-05 17:08:52
【问题描述】:

我正在学习 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 替换值:

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

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

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

请帮助我输入您的意见。

【问题讨论】:

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


    【解决方案1】:
    • DT 分类器将二进制分类变量表示为浮点 0.5 不是问题。条件signup_os_ios_web <= 0.5signup_os_ios_web == 0.0相同;
    • 该算法不会在内部转换输入。

    让我假设 0 表示“否”,1 表示“是”。考虑在您的情况下第一个节点指示signup_os_ios_web

    • 如果答案是“否”(signup_os_ios_web <= 0.5 因此等于 0),那么它会继续到它的子节点,特别是 Eagerness
    • 如果后者也是“否”,那么算法会沿着树向下,到达您的 signup_os_windows 二进制虚拟对象...等等。

    0.5 视为一个简单的中等阈值或介于 01 之间的中心,它基本上将“是”和“否”一分为二甚至可能发生。


    示例

    让我们看一下由 22 个样本组成的缩短的 Titanic 数据集。 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 来实现这一点):

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

    您还可以看到情况与您的情况相似,因为阈值等于 0.5。你可以这样理解:

    如果性别是女性(如果 Sex <= 0.5 自动等于 0),继续到左侧节点

    我希望澄清一下。

    【讨论】:

    • 谢谢!!这很有帮助。
    猜你喜欢
    • 2014-09-02
    • 1970-01-01
    • 2018-04-08
    • 2014-01-02
    • 1970-01-01
    • 2023-03-09
    • 2020-05-19
    • 2019-08-13
    • 2013-04-22
    相关资源
    最近更新 更多