完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
现在的社会工业化大生产离不开流水线作业,有了流水线,我们可以轻松的制造出成千上万相同的产品,而且所需要的价格成本极大地下降,所以说,流水线操作,使得工业化生产水平极大的提高。
那么有没有可能将这种流水线的处理思想转移到机器学习领域了?我们可不可以将数据清洗-数据规整-数据处理-特征选择-监督学习-模型评估等一整套流程做成一条机器学习的流水线了?如果可以,那就能极大的节省我们打造一个AI模型的时间,极大的提高构建优秀AI的效率。 在此,【火炉炼AI】可以十分肯定的告诉你,这是可以的,而且打造这种机器学习流水线非常方便,只需要短短的五分钟即可。 1. 流水线第一步:准备数据集 数据集在本项目中反而不是很重要,故而我们用sklearn自带模块samples_generator生成一些示例数据即可。虽然numpy也在random模块中有随机产生数据集的函数,但是numpy比较适合用于产生一些简单的抽样数据。而sklearn中的datasets类却可以用来产生适合机器学习模型的数据集。 sklearn的datasets中常用的API有: 用make_regression 生成回归模型的数据 用make_hastie_10_2,make_classification或者make_multilabel_classification生成分类模型数据 用make_blobs生成聚类模型数据 用make_gaussian_quantiles生成分组多维正态分布的数据 # 准备数据集from sklearn.datasets import samples_generator# 使用这个函数产生示例数据X,y=samples_generator.make_classification(n_informative=4, n_features=20, n_redundant=0, random_state=5)# 产生一个分类数据集,包含有100个样本,20个features,2个类别,没有冗余特征。# print(X.shape) # (100, 20)# print(y.shape) # (100,)# print(X[:3]) # 查看没有问题2. 流水线第二步:构建特征选择器 在数据集准备完成之后,需要提取数据集中最重要的几个特征,即对我们的分类结果影响最大的几个主要特征,这样做可以减小模型的复杂程度,同时还能保持模型的预测精准度。sklearn框架也为我们准备好了特征选择函数SelectKBest(),我们只需要指定要选择的特征数K即可。如下为代码,非常简单。 # 建立特征选择器from sklearn.feature_selection import SelectKBest, f_regressionfeature_selector=SelectKBest(f_regression,k=10) # 一共20个特征向量,我们从中选择最重要的10个特征向量3. 流水线第三步:构建分类器 下一步,我们就需要构建分类器模型,前面在我的文章中讲到了很多分类器算法,比如SVM,随机森林,朴素贝叶斯等,此处我们构建一个简单的随机森林分类器作为例子。 # 建立分类器from sklearn.ensemble import RandomForestClassifierclassifier=RandomForestClassifier(n_estimators=50,max_depth=4)# 此处构建随机森林分类器作为例子,参数随便指定4. 流水线第四步:组装完整流水线 上面的几个步骤相当于建立各种产品处理模块,这一步我们就需要将这些模块组装起来,构建成一个可以完整运行的机器学习流水线。代码很简单,如下所示。 # 第四步:组装完整流水线from sklearn.pipeline import Pipelinepipeline=Pipeline([(‘’selector‘’,feature_selector), (‘’rf_classifier‘’,classifier)])# 修改流水线中参数设置# 假如我们希望特征选择器不是选择10个特征,而是5个特征,# 同时分类器中的参数n_estimators也要修改一下,可以采用:pipeline.set_params(selector__k=5, rf_classifier__n_estimators=25)------------------------输---------出-------------------------------- Pipeline(memory=None, steps=[(‘’selector‘’, SelectKBest(k=5, score_func=《function f_regression at 0x000000001891B7B8》)), (‘’rf_classifier‘’, RandomForestClassifier(bootstrap=True, class_weight=None, criterion=‘’gini‘’, max_depth=4, max_features=‘’auto‘’, max_leaf_nodes=None, min_impurity_decrease=0.0, min.。.n_jobs=1, oob_score=False, random_state=None, verbose=0, warm_start=False))]) ------------------------------完------------------------------------- 从上面的输出中可以看出,这个流水线中只有两个模块,一个是特征选择器selector,另外一个是分类器rf_classifier,各自分别的参数位于后面。 对于模型,最终都是要用数据集进行训练,并且用训练好的模型来对新样本做出预测。如下为代码: # 将数据输入到流水线中pipeline.fit(X,y) # 对流水线进行训练predict_y=pipeline.predict(X) #用训练好的流水线预测样本# print(predict_y)# 评估该流水线的模型性能print(‘’pipeline model score: {:.3f}‘’.format(pipeline.score(X,y)))----------------------输---------出------------------------------ pipeline model score: 0.960 --------------------------完------------------------------------- 这个流水线模型在训练集上的得分为0.960,貌似性能还不错。 上面我们构建了一个特征选择器,但是怎么知道哪些特征被选择,哪些陪抛弃了?如下代码: # 查看特征选择器选择的特征:feature_status=pipeline.named_steps[‘’selector‘’].get_support()# get_support()会返回true/false,如果支持该feature,则为true.selected_features=[]for count,item in enumerate(feature_status): if item: selected_features.append(count)print(‘’selected features by pipeline, (0-indexed): /n{}‘’.format( selected_features))复制代码--------------------输---------出-------------------------------- selected features by pipeline, (0-indexed):[5, 9, 10, 11, 15] --------------------------完------------------------------------- 由此可以看出,流水线自动选择了五个特征(我们前面指定了k=5),这最重要的五个特征分别是标号为5,9,10,11,15的特征。 ########################小**********结############################### 1,打造机器学习流水线非常简单,只需要先构建机器学习的基本模块即可,然后将这些模块组装起来。 2,前面的特征提取器选择最重要特征的过程是先进行单变量统计测试,然后从特征向量中抽取最优秀的特征。这种测试之后,向量空间中的每个特征将有一个评价分数,基于这些评价分数,选择最好的K个特征,一旦抽取出K个特征,一旦K维的特征向量形成,就可以用这个特征向量用于分类器的输入训练数据。 3,打造这种流水线的优势有很多,可以简单快速的构建机器学习模型,可以方便的提取最重要的K个特征向量,可以快速的评估构建的模型,正所谓,这是个快速进行AI模型构建的必备良器。 ################################################################# |
|
|
|
只有小组成员才能发言,加入小组>>
3441个成员聚集在这个小组
加入小组物联网工程师必备:怎么选择不同的无线连接威廉希尔官方网站 ,本指南帮你忙!
3302 浏览 1 评论
【DFRobot TinkerNode NB-IoT 物联网开发板试用连载】WIFI功能测试
3957 浏览 0 评论
【DFRobot TinkerNode NB-IoT 物联网开发板试用连载】Arduino的替代SublimeText3+STino
3460 浏览 0 评论
使用端口扩展器轻松高效地向IIoT端点添加具有成本效益的子节点
4027 浏览 1 评论
20708 浏览 11 评论
模组有时候复位重启后输出日志为“REBOOT_CAUSE_SECURITY_PMU_POWER_ON_RESET”的原因?
844浏览 2评论
1075浏览 2评论
1076浏览 1评论
1195浏览 1评论
412浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-12 05:47 , Processed in 0.781646 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号