准备数据
本课属于 Coddy Machine Learning 学习旅程的“监督学习”单元。第 51 课,共 58 课。
模型只能读取完整的数字行。企鹅数据中有缺失值和两列文本,因此每一列都会经过一条处理通道:
文本中的缺失值会填入单词 "unknown":性别未记录的企鹅会有自己的列,而不是被猜测分类。
text_steps = make_pipeline(
SimpleImputer(strategy="constant", fill_value="unknown"),
OneHotEncoder())只在训练行上拟合这些转换器。如果计算中位数时看过测试集中的企鹅,就会把它们的信息泄漏到训练集中。
挑战
中等这些企鹅需要图片中的通道。起始代码会将它们拆分,并读取一个行号。
- 构建
prep,一个ColumnTransformer,将numbers送入数字通道,将text送入文本通道。 - 用训练行拟合它,并在一次调用中转换这些行。
- 先打印转换前的大小和缺失值数量,再打印转换后的大小,然后打印准备好的那一行,保留 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 在线编译器