比较成熟的通用机器学习库:Scikit Learn,H2O和Spark ML

2023-06-05 0 450

比较成熟的通用机器学习库:Scikit Learn,H2O和Spark ML

第一资本子公司高阶应用软件技师Baharak Saberidokht和Will Beckman

近一两年,虽然预测数学模型对获得成功民营企业的机能显得愈来愈关键,因而机器学习生态系早已有了大批产业发展。 因而,在今后一两年中,许多合作开发者将碰触到机器学习的本意,并将不得已优先选择适宜她们市场需求的通用型机器学习库。

在数学模型合作开发操作过程中为机器学习各项任务优先选择最合适的库时,要考量许多不利因素。 每一分馆都有其缺点和缺点。 在这首诗中,他们意在阐释机器学习应用领域中四个成形的通用型库的优劣:Scikit-Learn,H2O和Spark ML。

Scikit-LearnScikit-Learn是两个开放源码Python库(

https://github.com/scikit-learn/scikit-learn),当中包涵用作统计数据挖掘和机器学习的辅助工具和架构。 它的如上所述版是2007年6月,在往后的12年中,它始终是如上所述开拓性统计数据挖掘,机器学习和统计数据可视化的必选。 Scikit-Learn提供更多了各式各样知名的机器学习演算法的同时实现(即重回,进行分类和控制点)。

Spark MLSpark ML构筑于Apache Spark其内,再于2017年做为Spark 1.2的一小部分正式发布。它是开放源码(

https://github.com/apache/spark/tree/master/python/pyspark/ml)并提供更多 管用的API,有利于为统计数据专门化工程项目合作开发管线。

H2O.aiH2O于2014年建立,但在2017年平衡为两个开放源码架构(

https://www.h2o.ai/products/h2o/),用作在缓存中同时实现许多机器学习库。 它为能博戈达化的机器学习算法提供更多了博戈达同时实现。 民营企业版提供更多了附加的自订和全力支持。

优先选择最合适的库

为什么优先选择正确的库很关键? 两个库的优先选择取决于您要解决的建模问题的细微差别,它在以下任何两个步骤中可能都不同:

· 预处理:此步骤包括将原始统计数据转换为数字格式。 这通常包括解析统计数据,过滤或替换丢失的值,以及从中建立有意义的机能。

· 建模:在已转换的统计数据上优先选择正确的演算法(例如K-means,Random Forest…。)。 此步骤通常涉及广泛的基准测试和跨不同演算法的较为。 两个好的库提供更多了所需演算法的同时实现,以简化该演算法。

· 性能:考量库的可伸缩性,它取决于训练阶段的统计数据量和用作预测的输入统计数据量。

· 评估:提供更多有关如何评估数学模型以及库中已同时实现哪些度量的度量。 这些包括准确性,F值,Cohen Kappa和混淆矩阵。

· 部署环境:在较高的层次上,如何对数学模型进行序列化(反序列化)会影响数学模型加载速度以进行预测。

预处理

在机器学习库中,统计数据预处理通常是更好的优先选择。 机能建立和常规预处理在使用机器学习库之前就已完成,但是当您使用的库具有端到端的统计数据准备解决方案时,这无疑是两个加号。 往后训练过数学模型的大多数统计数据科学家都知道预处理统计数据既费时又乏味。 拥有端到端的机器学习统计数据管线能极大地帮助结果重现性,统计数据版控制以及机能建立操作过程中使用的计算测试。

Scikit-LearnScikit-Learn是这方面的先驱。 Scikit-Learn提供更多了两个界面,用户能使用该界面将其操作链接到两个管线中,在此管线中,所有预处理,特征建立和特征索引均分阶段完成。 管线能直接输入数学模型,从而为特征预处理和建模建立统一的工作流。 Scikit-Learn还为用户提供更多了一组预烘焙的预处理步骤,这些步骤通常在机器学习管线中使用,但是还允许您定义自己的步骤以进行自订统计数据转换。 这有效地使统计数据科学家能够以她们想要的任何方式和顺序来操纵统计数据集

Spark MLSpark ML还使用Scikit-Learn率先合作开发的标准,不同之处在于其转换器不会在适当位置修改统计数据,而是会添加新列。

H2OH2O在自动处理进行分类变量和估算缺失值方面提供更多了不错的机能。

如前所述,Spark ML与Scikit-Learn相似,其管线API基于Scikit-Learn管线API。 同样,H2O提供更多了一种通过H2OAssembly类将变压器链接到管线的方法。 这些管线通常由两部分组成:

1.任意数量的转换器:transform(dataframe)=> dataframe

2.最终估算器:fit(dataframe)=>转换器

在这种情况下,估计器是一种能适宜统计数据以生成变换器的演算法。 不同的学习演算法是对统计数据进行训练并生成数学模型的估计器。 用户能使用Spark MLlib架构中的常见转换,也能通过扩展Transformer类来定义自己的转换。 Transformer的一些示例:

比较成熟的通用机器学习库:Scikit Learn,H2O和Spark ML

Transformer的一些示例是:

Scikit-LearnProvide提供更多了各式各样转换器,例如Normalize,Label Encoder,Imputer,OneHotEncoder和CountVectorizer。 以下示例显示了如何链接它们:

column_trans = ColumnTransformer( [(country_class, OneHotEncoder(dtype=int),[country]), (domain_vec, CountVectorizer(), domain)], remainder=drop)

column_trans.fit(X)

在Scikit-Learn中,能在变压器和估计器中调用拟合(在上面的示例中,它在列的变压器上使用)

Spark ML Spark ML中的转换器示例包括Bucketizer,一键编码器,字符串索引器和矢量汇编器。 与Scikit-Learn类似,他们也能在Spark ML中链接转换器。

tokenizer = Tokenizer(inputCol=”doc”, outputCol=”words”)

hashingTF = HashingTF(inputCol=tokenizer.getOutputCol(), outputCol=”features”)

pipeline = Pipeline(stages=[tokenizer, hashingTF])pipeline.fit(training)

H2OH2OTransformer处理进行分类变量到数值的映射。 它还提供更多了转换器来处理缺失值的估算。 这是它们链接操作过程的类似示例(如在Scikit-Learn和Spark ML中)

iris = h2o.load_dataset(“iris”)

# example from docs.H2O.AI

assembly = H2OAssembly(steps=[… (“col_select”, H2OColSelect([“Sepal.Length”, “Petal.Length”, “Species”])),… (“cos_Sepal.Length”, H2OColOp(op=H2OFrame.cos, col=”Sepal.Length”, inplace=True)),… (“str_cnt_Species”, H2OColOp(op=H2OFrame.countmatches, col=”Species”,… inplace=False, pattern=”s”))… ])

result = assembly.fit(iris)

架构

H2O和Spark ML之间的基本权衡可能是H2O充当架构,早已嵌入了许多机能。这是有代价的,您可能无法自订每一步骤(即机能)而不修改 H2O源代码,然后重新构筑。 但是,Spark ML的灵活性确实需要演算法的更多技术知识。 与上述架构相比,Scikit-Learn提供更多了许多演算法和数学模型的同时实现。 它还能在一台机器上运行,这意味着统计数据需要容纳在缓存中,并且不能通过增加输入大小来扩展。 下面显示了以下四个库的API:

Scikit Learn

clf.fit(X_train, y_train)pred = clf.predict(X_test)

clf能是任何进行分类器,例如:

·perception(n_iter = 50);

·KNeighborsClassifier(n_neighbors = 10)

Spark ML

pipeline = Pipeline(stages)

model = pipeline.fit(training_data)

pred = model.transform(test_data)

H2O

model_of_interst.train( training_frame = train_data, y = response, x = features)

该表较为了Spark ML,Scikit-Learn和H2O中主要进行分类和重回演算法的可用性。

比较成熟的通用机器学习库:Scikit Learn,H2O和Spark ML

> Table 1. Comparison of major classification and regression algorithm.

常见控制点演算法的较为:

在统计数据专门化工程项目中有许多方案,当中的统计数据标签不可用。 面对这个问题,他们需要一种自组织的方法(又名无监督学习)。 表2总结了在无监督学习中广泛使用的Spark ML,Scikit-Learn和H2O中主要控制点技术的可用性的较为。

比较成熟的通用机器学习库:Scikit Learn,H2O和Spark ML

> Table 2. Comparison of common clustering algorithm.

绩效与评估

可扩展性

· Scikit-Learn-如果统计数据能放入RAM中就很好,并且为EDA和机器学习提供更多了多种辅助工具。

· Spark ML-Spark ML建立在Spark其内,因而他们能利用Spark中的大统计数据挖掘机能,例如用作集群编程的接口以及容错能力。 能在Spark中使用和转换统计数据,并在其其内使用Spark ML中提供更多的机器学习演算法。

· H2O-全力支持大统计数据,无需为集群设置。

评价

对每一演算法的评估和结果表示是最后也是最关键的里程碑。 结果需要以可读的格式表示,并为技师提供更多足够的信息,以将结果映射到基于业务的决策中。 因而,不同评估指标的可用性及其打印方式能节省技师的时间,并有利于她们与业务部门交流结果。

比较成熟的通用机器学习库:Scikit Learn,H2O和Spark ML

上表总结了Spark ML,Scikit Learn和H2O中评估指标的优劣。

数学模型部署

从最基本的角度来看,将机器学习数学模型部署到生产中的一般操作过程非常简单。 首先,技师将训练性能可接受的数学模型。 接下来,将数学模型输出为能序列化并保存到磁盘的格式(最好是在云存储环境中,例如Amazon S3),最后,将

Scikit-LearnScikit-Learn使用标准的Python序列化pickle。 能将数学模型腌制到磁盘中,然后将其重新加载到REST API中。

H2OH2O数学模型能输出为简单的旧Java对象(POJO)或优化后的数学模型对象(MOJO)格式,能轻松导出到任何Java环境。 H2O数学模型也能以二进制格式输出,但是重新加载它们需要在API服务器上存在H2O库。 同样,如果数学模型以二进制格式保存,则更新H2O要求以正确的H2O版重新训练数学模型。

Spark ML将数学模型保存在Spark ML中的机能使您能在Spark环境中轻松地重新加载它们,但是很难将其加载到其他地方。 能将数学模型保存为可预测数学模型标记语言(PMML)格式,然后将其加载到其他位置,但是此机能仅限于Spark ML基于RDD的API,并且只能以这种格式保存数学模型的一小部分。

结论

随着机器学习在行业和学术界显得愈来愈普遍,在今后一两年中,愈来愈多的合作开发者将优先选择她们的第两个通用型机器学习库。 为了对优先选择哪个库做出明智的决定,必须能够在生产操作过程的每一步骤中将每一库的机能相互较为。 在优先选择第两个通用型机器学习库时,该博客应该有利于为您提供更多自治和自信的感觉。

参考文献/书目

· MLlib:Apache Spark中的机器学习,孟祥瑞,Joseph Bradley,Burak Yavuz,Evan Sparks,Shivaram Venkataraman,Davies Liu,Jeremy Freeman,DB Tsai,Manish Amde,Sean Owen,Doris Xin,Reynold Xin,Michael J.Franklin,Reza Zadeh,Matei Zaharia和Ameet Talwalkar。 机器学习研究杂志(JMLR)。 2016年。

· Spark SQL:Spark中的关系统计数据处理。 迈克尔·阿姆布鲁斯特(Michael Armbrust),雷诺·辛(Reynold S. SIGMOD2015。2015年6月。

· Scikit-learn:Python中的机器学习,Pedregosa等人,JMLR 12,第2825–28页,2011年

· H2O的实用机器学习,:OReilly Media,Darren Cook,2016年。

披露声明:©2019 Capital One。 观点是个别作者的观点。 除非在本帖子中另有说明,否则Capital One不与任何提及的子公司有附属关系或认可。 使用或显示的所有商标和其他知识产权均为其各自所有者的财产。

(本文翻译自Baharak Saberidokht的文章《Comparing Mature, General-Purpose Machine Learning Libraries》,参考:

https://medium.com/capital-one-tech/a-comparison-of-mature-general-purpose-machine-learning-libraries-scikit-learn-h2o-and-spark-ml-96df117eefa6)

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务