2017-10-22 14 views
0

私は現在、特定の製品の販売を予測するために、店舗の場所と商品名のデータセットを取得しています。ニューラルネットワークのカテゴリの機能を処理するには?

バイナリエンコーディングやpandas get_dummies()を使用したかったのですが、アイテムの名前が5000個あり、メモリエラーが発生しました。これに対処する方法はありますか?皆さんありがとう!

あなたの代わりにワンホットエンコーディングを使用する必要があります代わりにダミー変数のgazillionsを作成する
print(train.shape) 
print(train.dtypes) 
print(train.head()) 

(125497040, 6) 
id    int64 
date   object 
store_nbr  int64 
item_nbr   int64 
unit_sales  float64 
onpromotion  object 
dtype: object 
    id  date store_nbr item_nbr unit_sales onpromotion 
0 0 2013-01-01   25 103665   7.0   NaN 
1 1 2013-01-01   25 105574   1.0   NaN 
2 2 2013-01-01   25 105575   2.0   NaN 
3 3 2013-01-01   25 108079   1.0   NaN 
4 4 2013-01-01   25 108701   1.0   NaN 
+0

データフレームの長さは何ですか? – Dark

+0

長さは約100,000,000です。 – BenjiBB

+0

あなたは並列プログラミングをする必要があります。 1億行?それほど多く処理することはありません – Dark

答えて

0

https://en.wikipedia.org/wiki/One-hot

パンダは、この機能が内蔵されていないので、最も簡単な方法は、scikit-learnを使用することです。http://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.]]) 
+0

データフレームには約1億行があります。メモリエラーを止めることはできません。 – Dark

+0

もしそれを使って1つのホットエンコードされた配列を作成するのであれば、テンソルの形はどのように見えるでしょうか?ありがとう! – BenjiBB

+2

_ "パンダにはこの機能が組み込まれていません" _ ... 'pd.get_dummies'? –

0

私は、あなたは可能性がそれを見る方法:

  1. すべてのアイテムを使用するのではなく、最も頻繁に使用するアイテムだけを使用します。

    このようにしてダミーを作成し、新しい列を少なくし、メモリを少なくします。これが起こるには、少数のアイテムが必要です(少数のスレッシュホールドを定義する)、いくつかの情報が失われます。

  2. 代替アプローチは、ファクタライゼーションマシンを使用することです。

上記の両方の提案を使用して、平均してより良いスコアを得ることができます。

+0

ありがとうございます。残念ながら、私はすべての項目を予測する必要があるので、私は列を削除することはできません。私はFMを試してNNと比較します。ありがとう! – BenjiBB

関連する問題