【Python机器学习】算法链与管道——利用网格搜索选择使用哪个模型

我们可以进一步将GridSearchCV和Pipeline结合起来:还可以搜索管道中正在执行的实际步骤(比如用StandardScaler还是用MinMaxScaler)。这样会导致更大的搜索空间,应该予以仔细考虑。

尝试所有可能的解决方案,通常并不是一种可行的机器学习策略。但下面是一个例子:在iris数据集上比较RandomForestClassifier和SVC。我们知道,SVC可能需要对数据进行缩放,所以我们还需要搜索是使用StandardScaler还是不使用预处理。我们知道,RandomForestClassifier不需要预处理。我们先定义管道。这里我们显式地对步骤命名。需要两个步骤,一个用于预处理,然后是一个分类器。我们可以用SVC和StandardScaler来将其实例化:

python 复制代码
pipe=Pipeline(
    [('preprocessing',StandardScaler()),('classifier',SVC())]
)

现在我们可以定义需要搜索的param_grid。我们希望classifier是RandomForestClassifier或SVC。由于这两种分类器需要调节不同的参数,并且需要不同的预处理,所以我们可以使用搜索网格列表。

为了将一个估计器分配给一个步骤,我们使用步骤名称作为参数名称。如果我们想跳过管道中的某个步骤,则可以将该步骤设置为None:

python 复制代码
param_grid=[
    {
        'classifier':[SVC()],
        'preprocessing':[StandardScaler(),None],
        'classifier__gamma':[0.001,0.01,0.1,1,10,100],
        'classifier__C':[0.001,0.01,0.1,1,10,100]
    },
    {
        'classifier':[RandomForestClassifier(n_estimators=100)],
        'preprocessing':[None],
        'classifier__max_features':[1,2,3]
    }
]

现在,我们将网格搜索实例化,并在数据集上运行:

python 复制代码
cancer=load_breast_cancer()
X_train,X_test,y_train,y_test=train_test_split(cancer.data,cancer.target,random_state=0)
grid=GridSearchCV(pipe,param_grid=param_grid,cv=5)
grid.fit(X_train,y_train)
print('最佳模型参数:{}'.format(grid.best_params_))
print('最佳交叉验证分数:{}'.format(grid.best_score_))
print('最佳模型在测试集精度:{}'.format(grid.score(X_test,y_test)))

可以看到,网格搜索后的结果,最佳模型是SVC、StandardScaler预处理,在C=100和gamma=0.01时的结果最好。

相关推荐
Xzq210509几秒前
Mysql API学习
数据库·学习·mysql
北顾笙9801 分钟前
深度学习day05
人工智能·深度学习
三更两点1 分钟前
AI Agent 的全栈上下文工程:蒸馏、整合、护栏与评估
数据库·人工智能
AI科技星2 分钟前
基于空间光速螺旋第一性原理的电荷本源定义与电场时空协变方程的完整推导、严格证明及全尺度数值验证
c语言·开发语言·算法·机器学习·数据挖掘
ai产品老杨2 分钟前
从黑盒到白盒:基于GB28181/RTSP全栈源码交付的AI视频平台OEM与低代码集成实战
人工智能·低代码
野犬寒鸦3 分钟前
从零起步学习AI大模型应用开发 || 第三章:智能体项目实战中的问题与解决方案及思路详解
java·服务器·数据库·人工智能·后端·面试
马猴烧酒.5 分钟前
【Java复习|Lambda表达式】Java Lambda 表达式、函数式接口与匿名内部类:从起源到原理
java·开发语言·ide·笔记·python·spring
tobias.b8 分钟前
大数据与机器学习的联系
大数据·人工智能·机器学习
云泽8088 分钟前
蓝桥杯算法精讲:深剖分治算法及其经典应用
算法·职场和发展·蓝桥杯
fengfuyao9858 分钟前
C# 高仿QQ截图工具(支持自定义快捷键)
开发语言·c#