在scikit learn中,如何处理混合了数字和名义值的数据?

12

我知道scikit-learn的计算是基于NumPy的,因此一切都是矩阵或数组。

这个软件包如何处理混合数据(数值和名义值)?

例如,一个产品可以有'颜色'和'价格'属性,其中颜色是名义值而价格是数值。我注意到有一个模型名为 'DictVectorizer' 来对名义数据进行数字化。例如,两个产品是:

products = [{'color':'black','price':10}, {'color':'green','price':5}]

'DictVectorizer' 的结果可能是:

[[1,0,10],
 [0,1,5]]

如果属性"颜色"有很多不同的取值,矩阵将非常稀疏。而且长特征会降低一些算法(如决策树)的性能。

有没有什么办法可以使用名义值而不需要创建虚拟编码?


1
值得注意的是,Weka Instances 将标称值存储为浮点数,对应于属性定义中标称值的索引。您可以简单地遵循相同的策略,生成一个数字数据集,以便与scikit-learn一起使用。 - Wesley Tansey
非常感谢您扩展我的知识。 - xueliang liu
1个回答

6

scikit-learn中的DecisionTree类需要进行一些重构,以有效处理高基数(high-cardinality)分类特征(甚至可能包括自然稀疏数据,如文本TF-IDF向量)。

据我所知,目前还没有人在开展相关工作。


在scikit中,与手动操作相比,是否有任何智能的重构方式?非常感谢。 - xueliang liu
我的回答表示,当前scikit-learn中决策树的实现存在一定限制。我不知道有什么简单的方法可以消除这个限制。我不理解你所说的“手动操作”是什么意思。 - ogrisel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接