1.ワンホットコードとは
英文学でワンホット コードと呼ばれるワンホット コードは、直観的に言えば状態の数だけビットがあり、1 ビットだけが 1 で、残りはすべて 0 です。詳細については、one_hot コードを参照してください。 (ウィキペディア) . 機械学習では、離散的で分類されたデータをデジタル化する必要があります. たとえば、性別の属性には、男性、女性、またはその他の3つの値しかありません. これらの3つの値をデジタルで表現するにはどうすればよいですか? 簡単な方法は、男性の場合は 0、女性の場合は 1、その他の場合は 2 ですが、何が問題なのですか?
上記の単純なシーケンスを使用して分類値を表すと、モデルのトレーニング中に問題が発生する可能性があります。つまり、さまざまな値の数がモデルのトレーニング効果に影響し、モデルのプロセスでさまざまな値が影響を受けます。トレーニングはサンプルで同じ機能を作成します. 重みが変わる場合があります. 1000 として直接エンコードされた場合, 1 としてエンコードされるよりもモデルに大きな影響を与えますか? 上記の問題を解決するために、トレーニング プロセスが分類値の表現の問題によるモデルへの悪影響の影響を受けないように、ワンホット コードを導入して、分類。
2. コーディングプロセス
特徴量が 1 つだけ離散値の場合:
{性別:{男、女、その他}}
この特徴には合計 3 つの異なる分類値があります. このとき, 特徴の値を示すために 3 ビットが必要であり, 対応するビットは 1 です. 位置は元の特徴の値に対応します (通常, の値元の機能は、後で使用するために並べ替えに変更できます)。このとき得られるワンホット コードは、{100}男性、{010}女性、{001}その他です。
複数の機能でワンホット エンコーディングが必要な場合は、上記の方法に従って、各機能のワンホット エンコーディングを順番に接続します。
{性別:{男、女、その他}}
{グレード: {1 年生、2 年生、3 年生、4 年生}}
このとき、{性別: 男性; 学年: 4 年生} の入力をワンホット エンコードするには、まず上記に従って性別をエンコードして {100} を取得し、次に学年に応じてエンコードして {0001} を取得します。 、次に 2 つを接続して、最終的なワンホット コード {1000001} を取得します。
3.ワンホットコードの関数ライブラリ
Python を使用している場合、scikit_learn は既製のエンコーディング関数をカプセル化します。コード例を次に示します。
one_hot エンコーディング
出力結果:
array([[ 1., 0., 0., 1., 0., 0., 0., 0., 1.]])
Baidu や Google で紹介しなくても、spark には対応する関数もあります。