5分でのデータサイエンス:1つのホットエンコーディングは何か?


あなたがデータサイエンスの分野にいるならば、あなたはおそらく「一つの熱いコード化」という語を聞きました.SkLearn文書さえ、「1つの熱い計画を使用しているカテゴリー的な整数機能をコード化する」とあなたに言います.しかし、1つのホットエンコーディングとは何ですか?
ほとんどのマシン学習のチュートリアルとツールは、特定のMLモデルに合う前にデータを準備する必要があります.つのホットエンコーディングは、予測を改善するための機械学習アルゴリズムに提供することができるように、カテゴリのデータ変数を変換するプロセスです.つのホットエンコーディングは、機械学習のための機能工学の重要な部分です.
このガイドでは、1つのホットエンコーディングを紹介し、あなたのMLモデルで使用するときに表示されます.私たちはSkLearnとパンダといくつかの現実世界の例を提供します.
このチュートリアルを一目で示します
  • What is one hot encoding?
  • How to convert categorical data to numerical data
  • One hot encoding with Pandas
  • One hot encoding with Sklearn
  • Next steps for your learning
  • つのホットエンコーディングは何ですか?


    カテゴリーデータは、ラベル値で構成される変数を指します.例えば、“color”変数は“red”、“blue”、“green”の値を持つことができます.時々彼らに自然な順序がある異なるカテゴリーのような価値を考えてください.
    いくつかmachine learning algorithms のような実装に応じて、カテゴリカルデータを直接処理できますdecision tree , しかし、最も多くの入力を必要とするか、値を数値であるか、値で数値に出力してください.これは、どんなカテゴリー的データも整数にマップされなければならないことを意味します.
    一つのホットエンコーディングは、データをデータに変換して、アルゴリズムを準備し、より良い予測を得る方法です.つのホットでは、各カテゴリの値を新しいカテゴリの列に変換し、1または0のバイナリ値をそれらの列に割り当てます.各整数値は、バイナリベクトルとして表される.すべての値は0で、インデックスは1でマークされます.
    より良い理解のためにこのチャートを見てください.

    これを例にしましょう.我々に値赤と青があると言ってください.つのホットで、我々は数値1と0と青の数値で赤を割り当てるでしょう.

    It’s crucial to be consistent when we use these values. This makes it possible to invert our encoding at a later point to get our original categorical back.


    数値を割り当てると、数値を表すバイナリベクトルを作成します.この場合、2つの値があるので、私たちのベクトルは2としてその長さを持ちます.したがって、red 値は、バイナリベクトル[1,0] , とblue 値は[0,1] .

    なぜ1つのホットエンコーディングを使用しますか?


    つのホットエンコーディングは、互いに関係のないデータに便利です.機械学習アルゴリズムは重要度の属性として数の順序を扱う.言い換えれば、彼らはより低い数よりも優れているかより重要として、より高い数を読むでしょう.
    これはいくつかの序論的な状況に役立つが、いくつかの入力データは、カテゴリ値の任意のランキングを持っていない、これは予測と悪いパフォーマンスの問題につながることができます.それは1つのホットエンコーディングが保存日です.
    つのホットエンコーディングは、我々のトレーニングデータをより有用で表現力豊かにします、そして、それは簡単に取り消されることができます.数値を使用することで、より簡単に値の確率を決定します.特に、1つの熱い符号化は我々の出力値のために使われます.

    カテゴリデータを数値データに変換する方法


    データを数値に手動で変換するには、2つの基本的な手順があります.
  • 整数符号化
  • つのホットエンコーディング
  • 最初のステップでは、各カテゴリの値を整数または数値で指定する必要があります.赤、黄、青の値があれば、それぞれ1、2、3を割り当てることができます.
    順序や関係のないカテゴリー変数を扱うとき、さらにこの一歩を踏み出す必要があります.ステップ2では、割り当てられた整数に1つのホットエンコーディングを適用する.これを行うには、整数エンコードされた変数を削除し、各変数のバイナリ変数を追加します.
    上記の3つのカテゴリーまたは色を持っていたので、3つのバイナリ変数を使用します.私たちは値1を各々の色のためのバイナリ変数と他の2色の値0とします.
    red,    yellow,  blue
    1,      0,      0
    0,      1,      0
    0,      0,      1
    

    Note: In many other fields, binary variables are referred to as dummy variables.


    パンダでの1つのホットエンコーディング


    我々は手動で1つのホットエンコードする必要はありません.多くのデータサイエンスツールは、データをエンコードする簡単な方法を提供します.PythonライブラリPandas 関数として提供する関数get_dummies つのホットエンコーディングを有効にするには.
    df_new = pd.get_dummies(df, columns=["col1"], prefix="Planet")
    
    これを行動で見ましょう.
    import pandas as pd 
    
    df = pd.DataFrame({"col1": ["Sun", "Sun", "Moon", "Earth", "Moon", "Venus"]})
    print("The original data")
    print(df)
    print("*" * 30)
    df_new = pd.get_dummies(df, columns=["col1"], prefix="Planet")
    print("The transform data using get_dummies")
    print(df_new)
    
  • 7行目は、我々が使用していることを示しますget_dummies のための1つのホットエンコーディングを行うにはpandas DataFrame オブジェクト.パラメータprefix 新しい列名のプレフィックスを示します.
  • 9行目は出力です.
  • これを実例にしましょう.次のデータセットがあるとします.
    import pandas as pd
    
    ids = [11, 22, 33, 44, 55, 66, 77]
    countries = ['Seattle', 'London', 'Lahore', 'Berlin', 'Abuja']
    
    df = pd.DataFrame(list(zip(ids, countries)),
                      columns=['Ids', 'Cities'])
    
    ここではパンダという名前のデータがありますdf 2つのリストがあります.ids and Cities . 電話しましょうhead() この結果を得るには、次の手順に従います.
    ID
    都市
    0
    11
    シアトル
    1
    22
    ロンドン
    2
    33
    ラホール
    3
    44
    ベルリン
    4
    55
    アブジャ
    我々はここでCities 列は私たちの分類値が含まれています:私たちの都市の名前.我々は新しいコラムに改宗しなければならないCities 使用get_dummies() 機能は上記した.
    y = pd.get_dummies(df.Countries, prefix='City')
    print(y.head())
    
    ここでは、我々は値を渡しているCity のためにprefix メソッドの属性get_dummies() . コードを実行すると、エンコードされた値を出力します.
    import pandas as pd 
    
    df = pd.DataFrame({"col1": ["Seattle", "London", "Lahore", "Berlin", "Abuja"]})
    print("The original data")
    print(df)
    print("*" * 30)
    df_new = pd.get_dummies(df, columns=["col1"], prefix="Cities")
    print("The transform data using get_dummies")
    print(df_new)
    

    SkLearnによる1つの熱いコード化


    我々は、同様の機能を実装することができますSklearn , この関数は、preprocessing モジュールです.
    import sklearn.preprocessing as preprocessing
    import numpy as np
    import pandas as pd
    
    targets = np.array(["red", "green", "blue", "yellow", "pink",
                        "white"])
    labelEnc = preprocessing.LabelEncoder()
    new_target = labelEnc.fit_transform(targets)
    onehotEnc = preprocessing.OneHotEncoder()
    onehotEnc.fit(new_target.reshape(-1, 1))
    targets_trans = onehotEnc.transform(new_target.reshape(-1, 1))
    print("The original data")
    print(targets)
    print("The transform data using OneHotEncoder")
    print(targets_trans.toarray())
    
  • 使用するLabelEncoder 行を7行目と8行目にintに変換します.
  • ライン9は、我々をつくりますOneHotEncoder オブジェクト.
  • ライン10は、元の機能を使用してフィットfit() .
  • ライン11は、1つのホットエンコーディングを使用して、元の機能を新しい機能に変換します.
  • 行15の出力から新しいデータを見ることができます.
  • Note: In the newer version of sklearn, you don’t need to convert the string to int, as OneHotEncoder does this automatically.


    見ましょうOneHotEncoder 別の例で動作するクラスです.まず、クラスのインポート方法を示します.
    from sklearn.preprocessing import OneHotEncoder 
    
    以前と同様に、我々は最初にエンコーダのためのユニークな値のリストを設定します.
    x = [[11, "Seattle"], [22, "London"], [33, "Lahore"], [44, "Berlin"], [55, "Abuja"]]
    y = OneHotEncoder().fit_transform(x).toarray()
    print(y)
    
    これを印刷するとき、我々は現在符号化された値のために以下を得ます:
    [[1. 0. 0. 0. 0. 0. 0. 1.]
     [0. 1. 0. 0. 0. 1. 0. 0.]
     [0. 0. 1. 0. 0. 0. 0. 1.]
     [0. 0. 0. 1. 0. 0. 1. 0.]
     [0. 0. 0. 0. 1. 1. 0. 0.]]
    

    あなたの学習の次のステップ


    最後にそれを作る上でcongrats!ここでは、1つのホットエンコーディングがどのように動作し、どのようにPythonで実装するかについて良い考えが必要です.まだマシン学習機能工学を習得するために学ぶことはたくさんあります.次の手順は次のとおりです.
  • Numpyで熱いもの
  • カウントエンコード
  • 平均符号化
  • ラベルエンコード
  • 証拠符号量
  • これらについて紹介するにはFeature Engineering for Machine Learning. あなたは既存の機能から新しいML機能を作成するためのテクニックを学びます.あなたはダイビングによってラベルのエンコードには、数値に分類機能を変換するために重要です起動します.残りの章では、機能の相互作用とDateTime機能について学びます.
    ハッピーラーニング!

    人工知能学会

  • Scikit-learn cheat sheet: methods for classification & regression
  • Pandas Cheat Sheet: top 35 commands and operations
  • Anatomy of a machine learning system design interview question