Kaggle翻译,第十七天:机器学习进阶 4/7

管道 —— 机器学习 4/7

一个带预处理的部署(甚至测试)复杂模型的关键技术。
本课中你将学到如何使用 管道 来清理你的模型代码。

简介

  • 管道是一个简单的技巧,它可以使你的预处理和训练模型的代码更加整齐。具体的来说,一个管道将预处理和训练步骤包裹起来,给用户感觉好像是一步。
  • 许多数据科学家不适用管道技术而是拼凑模型,但是管道有许多重要的好处,包括:
    • 更整洁的代码 每一步预处理的时候计算数据会很使得代码很凌乱,有了管道技术,你就不需要每一步都手动跟踪你的训练集和验证集数据了。
    • 报错更少 忘记执行某一步或者忘记数据预处理的几率会更少
    • 易于流水线化 将模型的原型机转化成可大规模部署的模式会出奇的困难。我们在这不会提到相关的技术难题,但是管道技术可以帮助我们解决。
    • 模型验证有更多选择 你将在下一节看到一个相关的例子,使用的是交叉验证。

案例

  • 和之前的例子一样,我们还是使用墨尔本的房价数据,跳过数据加载过程,现在我们已经有了训练集和验证集:X_train, X_valid, y_train, y_valid
  • 我们可以用head()方法预览一下数据集,可以注意到数据集中既有分类变量,也有丢失值。有了管道技术,我们能很轻松的处理两种问题!
X_train.head()
  • 我们只需三步就可以创建一个完整的管道。

第一步:定义预处理步骤

  • 和管道包裹预处理和训练步骤类似,我们使用ColumnTransformer 类来将不同的预处理步骤包裹在一起。下面的代码完成了:
    • 在数值数据中填补丢失值;
    • 在分类变量中填补丢失值并采用热编码处理分类变量;
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder

# Preprocessing for numerical data
numerical_transformer = SimpleImputer(strategy='constant')

# Preprocessing for categorical data
categorical_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='most_frequent')),
    ('onehot', OneHotEncoder(handle_unknown='ignore'))
])

# Bundle preprocessing for numerical and categorical data
preprocessor = ColumnTransformer(
    transformers=[
        ('num', numerical_transformer, numerical_cols),
        ('cat', categorical_transformer, categorical_cols)
    ])

步骤二:定义模型

  • 下面我们用RandomForestRegressor 类来定义一个随机森林模型
from sklearn.ensemble import RandomForestRegressor

model = RandomForestRegressor(n_estimators=100, random_state=0)

第三步:创建并评价管道

  • 最后,我们将使用Pipeline 类来定义一个包裹预处理和模型训练的管道,下面的问题需要额外注意:
    • 有了管道技术,我们只需要一行代码来实现处理数据和训练模型。(相比较而言,我们一般需要分步进行填补、热编码、模型训练。在我们要同时处理数值类数据和分类变量时,代码就会显得很凌乱
    • 有了管道技术,我们可以直接使用X_valid 中的特性来预测,管道会自动帮我们预处理特征在产生预测结果。(然而,没有管道,我们记得预处理验证集,再预测
from sklearn.metrics import mean_absolute_error

# Bundle preprocessing and modeling code in a pipeline
my_pipeline = Pipeline(steps=[('preprocessor', preprocessor),
                              ('model', model)
                             ])

# Preprocessing of training data, fit model 
my_pipeline.fit(X_train, y_train)

# Preprocessing of validation data, get predictions
preds = my_pipeline.predict(X_valid)

# Evaluate the model
score = mean_absolute_error(y_valid, preds)
print('MAE:', score)
MAE: 160679.18917034855

结论

管道技术再清理机器学习代码和避免出错时有奇效。并且他们再复杂数据预处理的工作流中也十分有用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值