2017-10-22 5 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

하나의 핫 인코딩 된 배열을 만드는 데이 코드를 사용하는 경우 텐서의 모양은 어떤 모양입니까? 감사! – BenjiBB

+2

_ "팬더에는이 기능이 내장되어 있지 않습니다"_ ...'pd.get_dummies'? –

0

당신이 수를 볼 수있는 방법 :

  1. 모든 항목을 사용하지 말고 가장 빈번한 항목 만 사용하십시오.

    이렇게하면 더미를 만들고 새로운 열을 더 적게 만들고 메모리를 덜 필요로합니다. 이 일이 발생하면 몇 가지 항목이 필요하며 (임계 값과 함께 몇 가지를 정의하십시오) 일부 정보가 손실됩니다.

  2. 대체 방법은 팩토 라이징 머신을 사용하는 것입니다.

위의 두 가지 제안을 모두 사용할 수 있으며 평균적으로 더 나은 점수를 얻을 수 있습니다.

+0

제안 해 주셔서 감사합니다. 불행히도 모든 항목을 예측해야하기 때문에 열을 제거 할 수 없습니다. FM을 시도하고 NN과도 비교합니다. 감사! – BenjiBB

관련 문제