如何处理神经网络中的分类特征?

时间:2017-10-22 11:11:14

标签: pandas numpy scikit-learn neural-network

我目前正在拥有商店位置和商品名称的数据集,以预测特定商品的销售情况。

我想使用二进制编码或pandas get_dummies(),但是项目有5000个名称并且它会导致内存错误,是否有任何替代方法或更好的方法来处理此问题?谢谢大家!

start()

2 个答案:

答案 0 :(得分:0)

您应该使用单热编码,而不是创建大量的虚拟变量:https://en.wikipedia.org/wiki/One-hot

Pandas没有内置此功能,因此最简单的方法是使用scikit-learnhttp://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html

>>> from sklearn.preprocessing import OneHotEncoder
>>> enc = OneHotEncoder()
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])  
OneHotEncoder(categorical_features='all', dtype=<... 'numpy.float64'>,
       handle_unknown='error', n_values='auto', sparse=True)
>>> enc.n_values_
array([2, 3, 4])
>>> enc.feature_indices_
array([0, 2, 5, 9])
>>> enc.transform([[0, 1, 1]]).toarray()
array([[ 1.,  0.,  0.,  1.,  0.,  0.,  1.,  0.,  0.]])

答案 1 :(得分:0)

我能看到你的方式:

  1. 不要使用所有项目,只能使用最常用的项目。

    这样可以创建虚拟对象,创建更少的新列并减少内存需求。对于这种情况,您将需要具有少量计数的项目(定义少数具有阈值)并且您将丢失一些信息。

  2. 另一种方法是使用分解机器。

  3. 您可以使用上述两种建议,并在结束时平均预测得分更高。