在流水线中使用自定义函数转换器
您得知传感器在肥胖个体上的表现可能较差。之前您用权重处理过这个问题,但现在您认为这些信息也可用于特征工程,因此决定用一个指示变量(是否肥胖)来替换个体记录的体重。您希望通过流水线来实现这一点。环境中已提供 numpy(别名为 np)、RandomForestClassifier()、FunctionTransformer() 和 GridSearchCV()。
本练习是课程的一部分
用 Python 设计机器学习工作流
练习说明
- 定义一个自定义特征提取器。该函数应输出其输入的已修改副本。
- 将第 1 列中的每个值替换为一个指示变量:当该值高于"列均值的某个倍数"这一阈值时取 1,否则取 0。
- 将上述特征提取器转换为一个转换器,并与随机森林分类器一起放入流水线中。
- 使用网格搜索交叉验证,在特征提取器中的乘法常数
multiplier上尝试取值 1、2 和 3。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# Define a feature extractor to flag very large values
def more_than_average(X, multiplier=1.0):
Z = ____
Z[:,1] = ____ > multiplier*np.mean(Z[:,1])
return Z
# Convert your function so that it can be used in a pipeline
pipe = Pipeline([
('ft', ____(____)),
('clf', RandomForestClassifier(random_state=2))])
# Optimize the parameter multiplier using GridSearchCV
params = ____
grid_search = GridSearchCV(pipe, param_grid=params)