文字列/カテゴリ機能(変数)を使用した線形回帰分析?質問する

文字列/カテゴリ機能(変数)を使用した線形回帰分析?質問する

回帰アルゴリズムは、数値として表される特徴に対して機能するようです。例:

カテゴリ特性のない単純なデータ

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


しかし、今度はカテゴリ特性を含むデータに対して回帰分析を行いたいと思います。

カテゴリ特性を持つデータセット

がある5特徴:DistrictConditionMaterialSecurityType


このデータに対して回帰分析を行うにはどうすればよいですか? すべての文字列/カテゴリ データを手動で数値に変換する必要がありますか? つまり、エンコード ルールを作成し、そのルールに従ってすべてのデータを数値に変換する必要があります。

手動で独自のエンコードルールを作成せずに文字列データを数値に変換する簡単な方法はありますか?おそらくいくつかのライブラリがありますパイソンそのために使用できるものは何ですか? 「不適切なエンコード」が原因で回帰モデルが何らかの形で不正確になるリスクはありますか?

ベストアンサー1

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

通常、次の 3 つの可能性があります。

  1. カテゴリデータのワンホットエンコーディング
  2. 順序データの任意の数値
  3. カテゴリデータにはグループ平均のようなものを使用します (例: 市区町村の平均価格)。

申請ケースに、持っていない情報を注入しないように注意する必要があります。

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

カテゴリデータがある場合は、可能な値ごとに 0/1 値を持つダミー変数を作成できます。

例:

idx color
0   blue
1   green
2   green
3   red

idx blue green 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))

結果は次のようになります:

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

順序データの数値

並べ替え可能なカテゴリのマッピングを作成します。例: 古い < 改装済み < 新しい → 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

グループ化操作にカテゴリデータを使用する

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

都市の最新の平均価格を含む DataFrame があるとします。

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

おすすめ記事