機械学習に用いる学習データの作成中なのですが,カテゴリ変数をFeature Hashingによって次元削減してみようと思いました.
ためしに,「月」のカテゴリ変数を12次元→8次元化することを考えました.
python
1from sklearn.feature_extraction import FeatureHasher 2import pandas as pd ; import numpy as np 3#テストデータ 4test=["1","2","3","4","5","6","7","8","9","10","11","12"] 5test=pd.Series(test)#本番ではdfからスライスしたseriesを使用するため 6#ハッシュトリック 7FH=FeatureHasher(n_features=8,input_type="string") 8hashed = FH.fit_transform(test) ; hashed=hashed.toarray() 9#衝突検出 10arr = len(hashed) 11uniqs = len(np.unique(hashed, axis=0)) 12print(arr,uniqs) #-->(12,10)
↑の例だと衝突してしまうのですが,テストデータが↓のような例だとうまくいきます.
python
1test=["one1","222","three3","444","five5","666","seven7","888","nine9","1010","eleven11","1212"] 2test=pd.Series(test) 3#中略# 4print(arr,uniqs) #-->(12,12)
原因はなんなのでしょうか?
入力文字が短すぎ,形状が他の入力文字と似ているためにハッシュ関数?がうまく働いていないのでしょうか…?
回答1件
あなたの回答
tips
プレビュー
2018/02/13 01:26
2018/02/13 03:54
2018/02/13 15:25