2017-08-15 6 views
1

質問1wide_n_deep_tutorial.py'hash_bucket_size'パラメータを設定する原則は?

、そこ両方tf.feature_column.categorical_column_with_hash_buckettf.feature_column.crossed_column方法に対するhash_bucket_size名前ハイパーパラメータであり、その値はhash_bucket_size=1000あります。

なぜ1000?このパラメータの設定方法は?

質問2: 2番目の質問についてcrossed_columns、つまり、wide_n_deep_tutorial.py

crossed_columns = [ tf.feature_column.crossed_column(["education", "occupation"], hash_bucket_size=1000), tf.feature_column.crossed_column([age_buckets, "education", "occupation"], hash_bucket_size=1000), tf.feature_column.crossed_column(["native_country", "occupation"], hash_bucket_size=1000) ]

なぜcrossed_columnsとして["education", "occupation"][age_buckets, "education", "occupation"]["native_country", "occupation"]を選択し、任意のルールがあります親指?

答えて

0

hash_bucketについては

一般的な考え方は、理想的には、ハッシュ関数の結果は、(そうでなければ/アルゴリズムの2つの場合を区別することはできません)任意の衝突が生じてはならないということです。したがって、1000はこの場合「単なる」値です。あなたは、この数が十分に高いことがわかります職業や国(16及び43)のための一意のエントリを見れば:

を横切る

[email protected]:/tmp$ cat adult.data | cut -d , -f 7 | sort | uniq -c | wc -l 
16 
[email protected]:/tmp$ cat adult.data | cut -d , -f 14 | sort | uniq -c | wc -l 
43 

機能を私は経験則があると思います特徴の組み合わせが実際に意味を持つならば、その交差は意味をなさない。この例では、教育と職業は関連しています。 2つめの場合、人々を「学位を持たない上級掃除スタッフ」と「ph.d」を持つ「ジュニアエンジニア」として定義するのはおそらく意味があります。別の典型的な例としては、経度と緯度の交差があります。なぜなら、それらは個別により意味があるからです。

+0

_ hash_bucket_のために、「10 *ユニークなエントリよりも小さな整数(たとえば、100,1000,10000,100000)」というルールを使用できますか?例えば、 'A'は120個のユニークなエントリを持っているので、' hash_bucket_size = 10000'は意味がありますか? – feng1122

+0

_フィーチャークロス - 時間と労力を要するフィーチャー工学が必要なようですね。何百もの機能があり、どのようにクロスカラムを決定するのか想像してみてください。 – feng1122

+0

hash_bucketについては、実際にテストするだけで、すべての入力のハッシュを作成し、重複が発生していないことを確認することができます。機能の横断については、数百の機能がある場合は時間がかかりますが、無料のランチがないことを覚えておいてください。これにはいくつかの作業とデータの理解が必要です。 –