Menu
CoddyTech

准备数据

本课属于 Coddy Machine Learning 学习旅程的“监督学习”单元。第 51 课,共 58 课。

模型只能读取完整的数字行。企鹅数据中有缺失值和两列文本,因此每一列都会经过一条处理通道:

一只用于训练的企鹅示意图。它的四项测量值经过蓝色通道,先填入中位数,再进行缩放,最终得到 -0.79、0.00、-0.05 和 -0.90。它的岛屿 Biscoe 和缺失的性别信息经过橙色通道,先填入未知值,再进行独热编码,最终得到六列 0 或 1

文本中的缺失值会填入单词 "unknown":性别未记录的企鹅会有自己的列,而不是被猜测分类。

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

只在训练行上拟合这些转换器。如果计算中位数时看过测试集中的企鹅,就会把它们的信息泄漏到训练集中。

challenge icon

挑战

中等

这些企鹅需要图片中的通道。起始代码会将它们拆分,并读取一个行号。

  1. 构建 prep,一个 ColumnTransformer,将 numbers 送入数字通道,将 text 送入文本通道。
  2. 用训练行拟合它,并在一次调用中转换这些行。
  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 在线编译器