发 帖  
原厂入驻New
[问答]

请问一下如何去打造一种机器学习流水线?

72 机器学习
分享
如何去打造一种机器学习流水线?有哪些步骤?
0
2021-7-14 06:26:29   评论 分享淘帖 邀请回答
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模型构建的必备良器。
  #################################################################
2021-7-14 09:23:33 评论

举报

只有小组成员才能发言,加入小组>>

2044个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表