データを準備する
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 51/58。
モデルが読み込めるのは、数値がすべてそろった行だけです。ペンギンのデータには欠損があり、テキスト列も2つあるため、各列はそれぞれのレーンを通ります。
テキストの欠損値には "unknown" という単語が設定されます。性別が記録されていないペンギンには、推測値ではなく専用の列が割り当てられます。
text_steps = make_pipeline(
SimpleImputer(strategy="constant", fill_value="unknown"),
OneHotEncoder())各レーンは学習用の行だけで適合させます。テスト用のペンギンも含めて計算した中央値を使うと、その情報が学習データに漏れてしまいます。
チャレンジ
中級ペンギンたちは、図にあるレーンを必要としています。スターターコードではデータを分割し、行番号を読み込みます。
prepを作成します。numbersを数値レーンに、textをテキストレーンに送るColumnTransformerです。- 訓練行に対して適合させ、1回の呼び出しで変換します。
- 変換前のサイズと欠損数、変換後のサイズ、そしてその行の変換結果を小数点以下2桁で出力します。
別のコロニーで、行番号が3の場合:
Before: 180 penguins, 6 columns, 9 gaps
After: 180 penguins, 10 columns
Penguin 3: [-1.12 0.47 -0.83 -0.6 0. 1. 0. 0. 1. 0. ]14行目は、誰も測定できなかったペンギンです。どのような値になりますか?
自分で試してみよう
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
# Meet the Penguins のペンギンのコロニー、その特徴量とラベル
penguins = pd.read_csv("penguins.csv")
numbers = ["bill_length_mm", "bill_depth_mm", "flipper_length_mm", "body_mass_g"]
text = ["island", "sex"]
X = penguins[numbers + text]
y = penguins["species"]
# まず分割する:テスト用のペンギンは Ship the Model まで使わずに取っておく
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, stratify=y, random_state=0)
row = int(input())
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ