12

回帰アルゴリズムは、数字で表されるフィーチャに作用しているようです。たとえば :文字列/カテゴリの特徴(変数)による線形回帰分析?

enter image description here

このデータセットは、カテゴリ機能/変数が含まれていません。このデータを回帰分析して価格を予測する方法は非常に明確です。


しかし、今私は、カテゴリ機能が含まれているデータに対して回帰分析をしたい:

enter image description here

5つの機能があります:DistrictConditionMaterialSecurityType


このデータを回帰させるにはどうすればよいですか?この文字列/カテゴリデータをすべて手動で数値に変換する必要がありますか?私はいくつかのエンコーディングルールを作成しなければならないということを意味し、そのルールに従ってすべてのデータを数値に変換します。手動で独自のエンコーディングルールを作成することなく、文字列データを数値に変換する簡単な方法はありますか?いくつかのライブラリがあるかもしれませんPythonそれに使用できますか? 「悪い符号化」のために回帰モデルが何らかの形で間違ってしまうリスクがありますか?

答えて

26

はい、あなたは数字にすべてを変換する必要があります。それは、これらの属性が何を表しているかを考える必要があります。

通常三つの可能性があります。

カテゴリーデータのためのワンホットエンコーディング順序データのための
  • 任意の数
  • 使用
    1. は、グループのようなものは、カテゴリーデータのための手段(例えば都市地区の価格を意味します) 。

    あなたは、アプリケーションのケースでは持っていない情報を注入しないように注意する必要があります。

    ワンホットエンコーディング

    あなたはカテゴリデータを持っている場合は、それぞれの可能な値の0/1の値を持つダミー変数を作成することができます。

    E.g。

    idx blue green red 
    0 1 0  0 
    1 0 1  0 
    2 0 1  0 
    3 0 0  1 
    

    idx color 
    0 blue 
    1 green 
    2 green 
    3 red 
    

    これはパンダで簡単に行うことができます:序データため

    color_blue color_green color_red 
    0   1   0   0 
    1   0   1   0 
    2   0   1   0 
    3   0   0   1 
    

    番号:

    import pandas as pd 
    
    data = pd.DataFrame({'color': ['blue', 'green', 'green', 'red']}) 
    print(pd.get_dummies(data)) 
    

    はになります3210

    ソート可能なカテゴリのマッピングを作成します。 g。 古い<は新しい<を改装→0、1、これはパンダでも可能である2

    data = pd.DataFrame({'q': ['old', 'new', 'new', 'ren']}) 
    data['q'] = data['q'].astype('category') 
    data['q'] = data['q'].cat.reorder_categories(['old', 'ren', 'new'], ordered=True) 
    data['q'] = data['q'].cat.codes 
    print(data['q']) 
    

    結果:

    0 0 
    1 2 
    2 2 
    3 1 
    Name: q, dtype: int8 
    

    GROUPBY操作のためのカテゴリデータを使用して

    ます過去の各カテゴリの平均を使用することができます(既知のイベント)。

    は、あなたが都市の最後の既知の平均価格とのデータフレームがあるとしましょう:

    prices = pd.DataFrame({ 
        'city': ['A', 'A', 'A', 'B', 'B', 'C'], 
        'price': [1, 1, 1, 2, 2, 3], 
    }) 
    mean_price = prices.groupby('city').mean() 
    data = pd.DataFrame({'city': ['A', 'B', 'C', 'A', 'B', 'A']}) 
    
    print(data.merge(mean_price, on='city', how='left')) 
    

    結果:

    city price 
    0 A  1 
    1 B  2 
    2 C  3 
    3 A  1 
    4 B  2 
    5 A  1 
    
  • +0

    しかし、あなたは新しい色を予測しようとするとき、どのように助けにあなたをhotencodingだろうか?おそらくあなたの場合、モデルを再トレーニングする必要があります。何か解決策はありますか? – gtzinos

    3

    この場合、「ダミーコーディング」を使用できます。 ダミーコーディングを行うためのPythonライブラリがありますが、いくつかの選択肢があります。

    あなたはscikit-learnライブラリを使用できます。 hereをご覧ください。

    パンダで作業する場合は、ダミー変数を作成するための組み込み関数があります。 thisを確認してください。

    パンダとの例は以下の通りです:

    import pandas as pd 
    
    sample_data = [[1,2,'a'],[3,4,'b'],[5,6,'c'],[7,8,'b']] 
    df = pd.DataFrame(sample_data, columns=['numeric1','numeric2','categorical']) 
    dummies = pd.get_dummies(df.categorical) 
    df.join(dummies) 
    
    関連する問題