機械学習、クロスが特徴とオプティマイザのビニング機能-TensorFlowアプリケーション

  • アウトライン

このセクションでは、このようなBucketized(ビニング)特長と機能scallingなどのアプリケーション・プロセスにはいくつかの小さな知識、機能のハンドルの最初の1、でTensorFlow何を説明しています。第二は、このようなようにSGD、Adagrad、アダム、およびなどの一般的に使用されるいくつかのオプティマイザとの違い、を簡単に見ています。ここでは以前のものの主な内容に小さなサプリメントです。以前の私たちは多くのことを言ったが、あること、ネットまあすり抜けが常にあるものの、実際には、処理機能に関しては、私は長い時間話の前に使用していたが、基本的な枠組みは、ハンドルにsklearnに基づいていますビニング機能、説明し、適用するには、ここTensorFlowを使用しています。オプティマイザの一部があり、我々は、彼らがAdagrad、アダムあり、私は2つの他の一般的なオプティマイザについてのトークで簡単に行きます。このセクションのSGDアプリケーションのフロントに言って、私はそれらの間の長所と短所について簡単になり、シナリオ。

  • Bucketized(ビニング)特長

  我々のエンジニアリング機能は、多くの前で話をし、sklearnで自分のアプリケーションと実装プロセスを実証しています。ここでは、具体的ビニングはそれがどのような機能、知識ビニング機能を追加?n個のビンに分割され、あるいはn分位数、各ビンに、ここで理解されるサイズのデータ​​の私達のために非常に簡単ですし、我々は最終的に私たちのデータに適用し、リストに境界を記録しますビンの内側に、我々のデータを見てみた各ビンは、我々は大きな時間に小さなからビンサイズの結果に従っているに属し、0、1です.............. ...そう。私たちは、簡単な例を見ることができます

境界= [0、10、100 ]
入力テンソル = [-5、10000 ]
                [ 150、10 ]
                [ 5、100]

出力は以下の

出力= [0,3 ]
          [ 3、2 ]
          [ 1、3]

当社オリジナルのデータの我々上記範囲の簡単な例から見たことは非常に大きく、我々はこのリストの境界に応じて4つのビンにそれらを分割することができ、最終的に我々はビンに属し、生データを見てください。上記の我々は、次の特定のコードの実装を見て、簡単な例です。我々はseriesbucketizedが必要な場合は、全体のプロセスは、実際にはbucketized 3つの部分に分かれている、すなわち境界に作成され、シリーズnumerical_column、最後の3つのbucketized部分に変身、我々は以下を参照してください

デフget_quantile_based_boundaries(シリーズ、num_bucket):
    位数 = np.arange(1.0、num_bucket)/ num_bucket
    境界 = series.quantile(分位)インデックス分位である
    戻り [境界[キー] のためのキー boundaries.keysを()]

この機能の目的は、各ビンの境界を見つけるために、上記の分位数に基づいており、以下に示すように、我々は、私たちのシリーズnumerical_columnに変身する必要があります

house_median_age_numeric_column = tf.feature_column.numeric_column(" housing_median_age "

それは別のビンに割り当てられるサイズに応じて、我々は確かに、この列のデータを持っているので、実際には、これは、我々が型の列であることを声明である数値です。今、私たちは境界を持っていることを、我々はまた、以下に示すように、次のステップは、あなたをbucketizedされ、numeric_columnてきました

bucketized_house_median_age = tf.feature_column.bucketized_column(source_column = house_median_age_numeric_column、
                                                                   境界 = get_quantile_based_boundaries(シリーズ= cali_housing_dataset_permutation [ " housing_median_age " ]、num_bucket = 10) 
                                        )

ここでは、宣言して列のbucketizedのプロセスを完了した後、私たちはこのbucketized_columnを渡すことができますモデルのパラメータをfeature_columnすることです。私たちは、bucketizedの列の全体のプロセスを完了しました。

追加:これはそれをbucketizedた後、私たちは私たちの値feature_columnを得るように、ここでは、我々はbucketized feature_columnオブジェクトをインスタンス化するので、あること、小さなサプリメントの知識であり、そして我々のモデルに語りましたか?シンプルなポイントは、我々は、変換bucketized_house_median_ageのどの値がこのことを知っていますか?実際には、非常に単純な、私は直接コードに、我々は直接カザフスタンを考え出すことができます

デフデモ(feature_column):
  feature_layer = tf.keras.layers.DenseFeatures(feature_column)
   プリント(feature_layer(辞書(cali_housing_dataset_permutation))。numpyの())

直接私たちが望む値、および以下をプリントアウトすることができます上記の関数を呼び出します

[[0。0. 0. ... 0.1 0]
 [0。0. 0. 0. 0. 0. ...]
 [0。0. 0. ... 1 0 0]
 ...
 [0。0. 0. 0. 0. 0. ...]
 [0。0 1 ... 0. 0. 0]
 [0。0. 0. ... 1. 0. 0.]]

ここでは、また後でbucketized見ることができる、それがワンホットエンコーディング方式の機能に変わります。

  • Cross_features

特徴情報cross_featuresを提示されている中、当社sklearnで発電、私たちに直接カテゴリデータや十字操作sklearnのための数値データと新しい機能を生成することができ、そしてそれはいくつかの機能の新機能を搭載対応する動作のエンジニアリング。実際には、TensorFlowは、我々はまた、操作の対応方法を持っている中で、TensorFlowが動作するために特別なcross_featureを持っている、とcross_featureクロス機能で我々のモデルを、教えて返します。ここで我々はまた、NiubiのTensorFlowを見ることができます彼は唯一の私たちは、むしろそれでsklearnに比べ、データの各列をどのように動作するかの我々のモデルを伝える必要があることで、私たちは自分の列の一部をラベル付けする必要があり、そのようなエンコーディングなどの複雑な操作をエンジニアリング備えています。しかし、すべてが良いと悪いが、TensorFlowは、多くの機能エンジニアリングの詳細の多くはまた、我々は、操作の基本原則のいくつかを理解することはできませんが生じ隠している、当社の機能工学の私達の最適化プロセスを助長されていません。実際には、唯一の我々はいくつかの機能を横断し、それをモデル化するものを伝えるために必要なものを宣言する必要があり、私たちは本当に変更し、新しい機能を作成するために、ステップによって私たちのデータステップなしで交差する必要がcross_featureの面でTensorFlowを言ってまとめます当社オリジナルのデータフレーム。特に、私たちのTensorFlowでは、どのようにシンプルな機能、それを渡り、あなたは以下を参照してくださいすることができます

    lon_x_lat = tf.feature_column.crossed_column(キー= [bucketized_longitude、bucketized_latitude]
                                                 hash_bucket_size = 1000)

上記のキーがリストされ、リスト要素の内側のみが文字列であれば、我々はこれらの、(同じ交差するようにこれらの文字列に対応する機能を使用します、ここで文字列またはfeature_columnのカテゴリ機能タイプ、要素であることに注意してください機能、データ型必須の文字列の場合);カテゴリ機能タイプならば、そして、私たちは、直接データを横断なります。機能タイプ、そこHA機能は、タイプとデータ型との間の差である小さなディテールがあり、初心者はしばしば混同されている唯一の2カテゴリや数値、およびデータは、それが可能であるタイプ、そのデータ型がintまたはフロートがあるint型フロート文字列など、その特徴の種類は、必ずしも数値でない場合、カテゴリがあってもよい、例えば、我々はbucketized列の上にあるが、データ型はintであり、それは、カテゴリデータ型です。

  • オプティマイザ

私たちのトレーニングモデルの過程で、しばしば遭遇状況は、オプティマイザを選択し、実際には、この1だけでなく、最高の良いです。通常の状況下では、各オプティマイザは、異なるアプリケーションシナリオのための独自の利点と欠点があります。私は主に3つの共通オプティマイザ、それぞれ、SGD、Adagradとアダムについて、今日の話します。まず、SDGは、ほぼすべての凸シーンの、ややその大きなリソース消費に加えて、計算するための私たちの最も伝統的な勾配降下アルゴリズムであり、何も大きな問題; Adagradは学習率その改善アルゴリズムであり、固定されていない、それが私たちのデータを変更するには学習率の大きさに応じて可能であり、それは凸問題に表示されている非常に良いですが、非凸シーン、パフォーマンスの低下;アダムは、一般的に非凸で使用シーン、SGDとAdagradより良い非凸でその性能。

おすすめ

転載: www.cnblogs.com/tangxiaobo199181/p/12244347.html