(本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )node
如今的社会工业化大生产离不开流水线做业,有了流水线,咱们能够轻松的制造出成千上万相同的产品,并且所须要的价格成本极大地降低,因此说,流水线操做,使得工业化生产水平极大的提升。git
那么有没有可能将这种流水线的处理思想转移到机器学习领域了?咱们可不能够将数据清洗-数据规整-数据处理-特征选择-监督学习-模型评估等一整套流程作成一条机器学习的流水线了?若是能够,那就能极大的节省咱们打造一个AI模型的时间,极大的提升构建优秀AI的效率。github
在此,【火炉炼AI】能够十分确定的告诉你,这是能够的,并且打造这种机器学习流水线很是方便,只须要短短的五分钟便可。算法
数据集在本项目中反而不是很重要,故而咱们用sklearn自带模块samples_generator生成一些示例数据便可。虽然numpy也在random模块中有随机产生数据集的函数,可是numpy比较适合用于产生一些简单的抽样数据。而sklearn中的datasets类却能够用来产生适合机器学习模型的数据集。bootstrap
sklearn的datasets中经常使用的API有:app
用make_regression 生成回归模型的数据框架
用make_hastie_10_2,make_classification或者make_multilabel_classification生成分类模型数据dom
用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]) # 查看没有问题
复制代码
在数据集准备完成以后,须要提取数据集中最重要的几个特征,即对咱们的分类结果影响最大的几个主要特征,这样作能够减少模型的复杂程度,同时还能保持模型的预测精准度。sklearn框架也为咱们准备好了特征选择函数SelectKBest(),咱们只须要指定要选择的特征数K便可。以下为代码,很是简单。
# 创建特征选择器
from sklearn.feature_selection import SelectKBest, f_regression
feature_selector=SelectKBest(f_regression,k=10)
# 一共20个特征向量,咱们从中选择最重要的10个特征向量
复制代码
下一步,咱们就须要构建分类器模型,前面在个人文章中讲到了不少分类器算法,好比SVM,随机森林,朴素贝叶斯等,此处咱们构建一个简单的随机森林分类器做为例子。
# 创建分类器
from sklearn.ensemble import RandomForestClassifier
classifier=RandomForestClassifier(n_estimators=50,max_depth=4)
# 此处构建随机森林分类器做为例子,参数随便指定
复制代码
上面的几个步骤至关于创建各类产品处理模块,这一步咱们就须要将这些模块组装起来,构建成一个能够完整运行的机器学习流水线。代码很简单,以下所示。
# 第四步:组装完整流水线
from sklearn.pipeline import Pipeline
pipeline=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模型构建的必备良器。
4,上面的流水线只是整合了特征选择,分类器部分,惟一让人遗憾的是,怎么把数据处理,数据清洗这部分也整合到流水线中?暂时我尚未找到这部份内容,有哪位朋友找到了这种方法,请联系我啊。
#################################################################
注:本部分代码已经所有上传到(个人github)上,欢迎下载。
参考资料:
1, Python机器学习经典实例,Prateek Joshi著,陶俊杰,陈小莉译