Menu
CoddyTech

データを準備する

CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 51/58。

モデルが読み込めるのは、数値がすべてそろった行だけです。ペンギンのデータには欠損があり、テキスト列も2つあるため、各列はそれぞれのレーンを通ります。

学習用ペンギン1羽の図。4つの測定値は青いレーンを通り、中央値で補完してからスケーリングされ、-0.79、0.00、-0.05、-0.90になります。島名Biscoeと欠損している性別はオレンジ色のレーンを通り、不明値で補完してからワンホットエンコーディングされ、0または1の列6つになります

テキストの欠損値には "unknown" という単語が設定されます。性別が記録されていないペンギンには、推測値ではなく専用の列が割り当てられます。

text_steps = make_pipeline(
    SimpleImputer(strategy="constant", fill_value="unknown"),
    OneHotEncoder())

各レーンは学習用の行だけで適合させます。テスト用のペンギンも含めて計算した中央値を使うと、その情報が学習データに漏れてしまいます。

challenge icon

チャレンジ

中級

ペンギンたちは、図にあるレーンを必要としています。スターターコードではデータを分割し、行番号を読み込みます。

  1. prepを作成します。numbersを数値レーンに、textをテキストレーンに送るColumnTransformerです。
  2. 訓練行に対して適合させ、1回の呼び出しで変換します。
  3. 変換前のサイズと欠損数、変換後のサイズ、そしてその行の変換結果を小数点以下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())

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師あり学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ