事前処理 - カテゴリーデータ
カテゴリーデータ
データに文字列で表されるカテゴリがある場合、数値データのみを受け入れることが多い機械学習モデルをトレーニングするためにそれらを使用することは困難です。
カテゴリーデータを無視してモデルから情報を除外する代わりに、モデルで使用できるようにデータを変換できます。
下の表を見てください。これは、重回帰の章。
例
結果
車種 体積 重量 CO2 0 トヨティ アイゴ 1000 790 99 1 三菱 スペーススター 1200 1160 95 2 シュコダ シティゴ 1000 929 95 3 フィアット 500 900 865 90 4 ミニクーパー 1500 1140 105 5 VWアップ! 1000 929 105 6 シュコダ ファビア 1400 1109 90 7 メルセデス A クラス 1500 1365 92 8 フォード フィエスタ 1500 1112 98 9 アウディ A1 1600 1150 99 10 現代 I20 1100 980 99 11 スズキ スイフト 1300 990 101 12 フォード フィエスタ 1000 1112 99 13 ホンダ シビック 1600 1252 94 14 フンダイ I30 1600 1326 97 15 オペル アストラ 1600 1330 97 16 BMW 1 1600 1365 99 17 マツダ 3 2200 1280 104 18 シュコダ ラピッド 1600 1119 104 19 フォード フォーカス 2000 1328 105 20 フォード モンデオ 1600 1584 94 21 オペル インシグニア 2000 1428 99 22 メルセデス C クラス 2100 1365 99 23 シュコダ オクタビア 1600 1415 99 24 ボルボ S60 2000 1415 99 25 メルセデス CLA 1500 1465 102 26 アウディ A4 2000 1490 104 27 アウディ A6 2000 1725 114 28 ボルボ V70 1600 1523 109 29 BMW 5 2000 1705 114 30 メルセデス E クラス 2100 1605 115 31 ボルボ XC70 2000 1746 117 32 フォード B-マックス 1600 1235 104 33 BMW 216 1600 1390 108 34 オペル ザフィーラ 1600 1405 109 35 メルセデス SLK 2500 1395 120
重回帰の章では、エンジンの容積と車の重量に基づいて CO2 排出量を予測しようとしましたが、車のブランドとモデルに関する情報は除外しました。
自動車のブランドやモデルに関する情報は、排出される CO2 をより正確に予測するのに役立つ可能性があります。
ワンホットエンコーディング
Car または Model 列は数値ではないため、データで使用することはできません。カテゴリ変数 Car または Model と数値変数 CO2 の間の線形関係は決定できません。
この問題を解決するには、カテゴリ変数の数値表現が必要です。これを行う 1 つの方法は、カテゴリ内の各グループを表す列を作成することです。
各列の値は 1 または 0 で、1 はグループの包含を表し、0 は除外を表します。この変換はワンホットエンコーディングと呼ばれます。
これを手動で行う必要はありません。Python Pandas モジュールには、get_dummies()
1 つのホット エンコーディングを行います。
Pandas モジュールについては、pandasのチュートリアル。
例
Car 列を 1 つのホットエンコードします。
結果
Car_Audi Car_BMW Car_Fiat Car_Ford Car_Honda Car_Hundai Car_Hyundai Car_Mazda Car_Mercedes Car_Mini Car_Mitsubishi Car_Opel Car_Skoda Car_Suzuki Car_Toyoty Car_VW Car_Volvo 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 1 0 6 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 7 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 8 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 9 1 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 12 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 13 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 15 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 16 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 18 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 19 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 20 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 22 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 24 0 0 0 0 0 0 0 0 0 0 0 0 0 1 25 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 26 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 0 0 0 0 0 0 0 0 0 0 0 0 0 1 29 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 31 0 0 0 0 0 0 0 0 0 0 0 0 0 1 32 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 33 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 34 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 35 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
結果
Car 列の車のブランドごとに 1 つの列が作成されました。
CO2 を予測する
この追加情報を体積と重量とともに使用して、CO2 を予測できます。
情報を組み合わせるには、concat()
pandasの関数。
まず、いくつかのモジュールをインポートする必要があります。
pandasのインポートから始めます。
import pandas
pandas モジュールを使用すると、csv ファイルを読み取り、DataFrame オブジェクトを操作できます。
cars = pandas.read_csv("data.csv")
また、ダミー変数を作成することもできます。
ohe_cars = pandas.get_dummies(cars[['Car']])
次に、独立変数 (X) を選択し、ダミー変数を列ごとに追加する必要があります。
従属変数も y に格納します。
X = pandas.concat([cars[['Volume', 'Weight']], ohe_cars], axis=1)y = cars['CO2']
また、線形モデルを作成するために sklearn からメソッドをインポートする必要があります
線形回帰について学ぶ
from sklearn import linear_model
これで、データを線形回帰に適合させることができます。
regr = linear_model.LinearRegression()regr.fit(X,y)
最後に、自動車の重量、容積、メーカーに基づいて CO2 排出量を予測できます。
##predict the CO2 emission of a Volvo where the weight is 2300kg, and the volume is 1300cm3:predictedCO2 = regr.predict([[2300, 1300,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]])
例
結果
[122.45153299]
これで、データ セット内の体積、重量、および各自動車ブランドの係数が得られました。
ダミー化
カテゴリ内のグループごとに 1 つの列を作成する必要はありません。グループ数よりも 1 列少ない情報を保持できます。
たとえば、色を表す列があり、その列に赤と青の 2 つの色があるとします。
例
結果
色 0 青 赤1個
red という名前の 1 つの列を作成できます。1 は赤を表し、0 は赤ではない、つまり青を表します。
これを行うには、1 つのホット エンコーディングで使用したのと同じ関数 get_dummies を使用して、列の 1 つを削除します。結果のテーブルから最初の列を除外できる引数 drop_first があります。
例
結果
赤色 0 0 1 1
2 つ以上のグループがある場合はどうなりますか?複数のグループを 1 つ少ない列で表すにはどうすればよいですか?
今回は、赤、青、緑の 3 色があるとします。最初の列をドロップしながら get_dummies を実行すると、次の表が得られます。
例
結果
color_green color_red color 0 0 0 青 1 0 1 赤 2 1 0 緑
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。