将字符串表示为决策树中的特征,词汇量为 200(带或不带 one-hot 编码)

Posted

技术标签:

【中文标题】将字符串表示为决策树中的特征,词汇量为 200(带或不带 one-hot 编码)【英文标题】:representing strings as features in decision trees with vocabulary size of 200(with or without one-hot encoding) 【发布时间】:2019-05-29 00:09:21 【问题描述】:

我是机器学习的新手!

我尝试在 sci-kit learn 中对我的整个词汇进行标记编码。但是在生成决策树时,比较的形式是浮点型。 (例如: type

更新我的问题: 我的数据如下所示:

这些列是:

输入特征

column1:字符串(可以是大小为 200 的词汇表中的任何单词。注意:这些是函数调用名称,因此类似于颜色名称或国家名称)

同样,有 4 个类似 column1 的列。

输出特征(标签):

字符串类型。这可以是大小为 500 的词汇表中的任何单词。这些都是函数调用名称,因此类似于颜色名称或国家名称)

【问题讨论】:

我认为使用CountVectorizer 是最好的选择。分享一些输入数据可能有助于我们更具体 我建议你使用 tf-idf 矢量化器,scikit-learn.org/stable/modules/generated/… @MohamedThasinah 不是用于文档比较的 tf-idf 吗?这里我的 javascript 函数名称作为特征给出? 【参考方案1】:

您可以为此使用 countVectorizer,即使您的输入不是文档。

例如,将您的 javascript 函数词汇表视为vocab_functions。您的输入函数出现在数据框的五列中,如下所示

df[func1],df[func2],df[func3],df[func4],df[func5]

将所有函数名用空格连接起来形成一个新列

df['input_func']

现在在此列上应用 countVectorizer,

from sklearn.feature_extraction.text import CountVectorizer
corpus = [
    'func_asb func_asdnl func_15 func_sx funcd3d',
    'func_11 func_sav3 func_fdasvb15 func_saax funcdnlvasdd',
]
vectorizer = CountVectorizer()#add --- vocabulary=vocab_functions

X = vectorizer.fit_transform(corpus) # replace with df['input_func']

X.todense()
#
matrix([[0, 1, 1, 1, 0, 0, 0, 1, 1, 0],
        [1, 0, 0, 0, 1, 1, 1, 0, 0, 1]], dtype=int64)

将此 X 输入到维度为 200 的决策树。

【讨论】:

将所有五个函数调用名称合并为一个字符串并将其提供给 countVectorizer()

以上是关于将字符串表示为决策树中的特征,词汇量为 200(带或不带 one-hot 编码)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用决策树中的 feature_importances_ 删除所有非零重要特征?

如何在 sklearn 决策树中显示特征名称?

《统计学习方法》读书笔记之决策树

能够将先验知识整合到决策树中的机器学习方法

决策树中的特征重要性、离散化和标准

决策树中的特征重要性、离散化和标准