作者:韩信子@ShowMeAI
机器学习实战系列:https://www.showmeai.tech/tutorials/41
本文地址:https://www.showmeai.tech/article-detail/295
申明:版权所有,转载请分割平台与作者并注明出处
珍藏ShowMeAI查看更多精彩内容

咱们在利用机器学习模型时,除了最终成果,也十分关注它们的性能。而机器学习模型的性能,不仅仅取决于咱们的利用形式(特色多少、模型复杂度),也和硬件非亲非故。

在本篇内容中,ShowMeAI 要给大家介绍到的是 Intel 针对 Scikit-Learn 机器学习工具库做的减速不定,能够十分大程度减速咱们的模型训练与预测速度。

在咱们的机器学习利用案例中,应用intel拓展减速的形式,仅仅破费原始建模形式1/5的工夫,能够实现一样的工作达到统一的成果。

Scikit-Learn (SKlearn) 机器学习工具库

Scikit-Learn (Sklearn) 是 Python 中最有用和最弱小的机器学习库。 它通过 Python 中的接口为机器学习和统计建模提供了一系列无效工具,包含分类、回归、聚类和降维。

  • SKLearn 官网
  • SKLearn Github

SKLearn 的疾速应用办法也举荐大家查看[ShowMeAI](https://www.showmeai.tech/)的文章和速查手册:

  • 机器学习实战 | SKLearn入门与简略利用案例
  • 机器学习实战 | SKLearn最全利用指南
  • AI 垂直畛域工具库速查表 | Scikit-Learn 速查表

面向 Scikit-Learn 的英特尔扩大

Scikit-Learn是一个大而全的工具库,但它的性能并不总是最佳的,有时候一些 ML 算法可能须要数小时能力运行,工夫老本很高。

面向 Scikit-Learn 的英特尔扩大(Intel(R) Extension for Scikit-learn)只需在大家相熟的建模办法根底上,增加几行代码,就能显着晋升性能,而且它也是开源的。

scikit-learn-intelex 提速成果

通过 scikit-learn-intelex 优化算法运行形式,能够取得 1-3 个数量级的效率改良,最终取决于应用到的数据集和算法。

  • Intel Extension for Scikit-Learn 提供了许多 Scikit-Learn 算法(下表)的优化实现,这些算法与原始版本统一,有一样的最终后果。
  • 即便大家应用到了以后拓展不反对的算法或参数,工具包也会主动退回到原始 Scikit-Learn,保障大家无缝连接,大部分代码能够维持原来的模式,无需重写代码。

利用英特尔® Extension for Scikit-learn 能够对上述 Scikit-Learn 算法效率优化,具体的能够参考官网介绍

工具库装置&配置

Intel Extension for Scikit-Learn 反对 x86 架构上的 Linux、Windows 和 Mac 零碎。 它能够应用 PyPI 或 Anaconda Cloud 下载:

从 PyPI 装置

只需在命令行运行 pip 命令进行装置:

pip install scikit-learn-intelex 

从 Anaconda 装置

◉ Conda-Forge形式:

onda install scikit-learn-intelex -c conda-forge 

◉ 英特尔渠道:

conda install scikit-learn-intelex -c intel 

◉ 默认形式:

conda install scikit-learn-intelex 

从容器装置

请留神,正确拜访链接须要 DockerHub 帐户。

大家能够通过以下命令,将最新的英特尔® Scikit-Learn 扩大装置为 Docker 容器:

docker pull intel/intel-optimized-ml:scikit-learn 

英特尔® Scikit-Learn 扩大应用办法:

打补丁 patch_sklearn

patch是一种保留 Scikit-Learn 库存版本以供应用的办法,大家能够在代码结尾增加它( patch_sklearn()函数调用),如下所示:

############### 在此处插入补丁########################## from sklearnex import patch_sklearnpatch_sklearn()################################################################## 

◉ 这个补丁之后的所有import语句导入的来自sklearn的算法,都会优先导入Scikit-Learn优化版本

# Importing sklearn optimised version of LogisticRegressionfrom sklearn.linear_model import LogisticRegression# Creating an object for model and fitting it on training data setlogmodel =  LogisticRegression()logmodel.fit(X_train_sm, y_train_sm)   # Predicting the Target variable                 predicted = logmodel.predict(X_test)# Classification Reportreport = metrics.classification_report(y_test, predicted)

️ 留神:导入程序十分重要,请大家肯定记得在导入Scikit-Learn工具库之前打补丁!

如果大家不想应用补丁,能够随时通过sklearnex.unpatch_sklearn()勾销intel的补丁。

其余代替计划

大家有很多代替计划,同样能够启用英特尔® Extension for Scikit-Learn优化:

◉ 在命令行间接应用拓展运行原始 Scikit-Learn 利用程序代码获取减速:

python -m sklearnex my_application.py 

◉ 指定算法导入减速:

# 指定某个算法减速from sklearnex import patch_sklearnpatch_sklearn("SVC")# 指定若干个算法减速patch_sklearn(["SVC", "PCA"])# 撤销对于算法的减速补丁from sklearnex import unpatch_sklearn unpatch_sklearn("SVC")

查看优化算法列表

# 能够间接查看可减速算法列表from sklearnex import get_patch_namesget_patch_names()>>['pca','kmeans','dbscan', 'distances','linear','ridge','elasticnet','lasso', 'logistic','log_reg','knn_classifier','nearest_neighbors','knn_regressor', 'random_forest_classifier','random_forest_regressor', 'train_test_split', 'fin_check','roc_auc_score', 'tsne', 'logisticregression', 'kneighborsclassifier', 'nearestneighbors','kneighborsregressor', 'randomrorestclassifier', 'randomforestregressor','svr', 'svc', 'nusvr', 'nusvc','set_config', 'get_config','config_context']

全局补丁

如果大家想应用全局补丁来优化所有 Scikit-Learn 应用程序,无需任何额定操作,只须要在命令行运行:

python sklearnex.glob patch_sklearn 

案例

咱们用一个案例来阐明一下,应用英特尔® Extension for Scikit-Learn,相比原始版本,有多大程度的晋升,这里应用到的业务场景是信用卡欺诈辨认场景

数据能够在 Kaggle场景数据 下载,也能够在ShowMeAI 的百度网盘地址间接下载。

实战数据集下载(百度网盘):公众号『ShowMeAI钻研核心』回复『实战』,或者点击 这里 获取本文 [[8] 面向 Scikit-Learn 的英特尔减速扩大补丁](https://www.showmeai.tech/art...) 『creditcard 信用卡欺诈场景数据集

ShowMeAI官网GitHub:https://github.com/ShowMeAI-Hub

勾销补丁的原始版本

因为咱们的电脑上进行了配置,intel优化的算法会全局失效,为了比照原始版本的sklearn速度,咱们这里应用unpatch_sklearn()函数勾销补丁,整个逻辑回归模型训练与测试破费了 35.5 秒。

################ Insert Patch here ############################from sklearnex import unpatch_sklearnunpatch_sklearn()########################################################### 导入from sklearn.linear_model import LogisticRegression# 开始工夫start_time = time.time()# 初始化模型并你和数据集logmodel = LogisticRegression()logmodel.fit(X_train_sm, y_train_sm)   # 测试集预估                 predicted = logmodel.predict(X_test)patched_time = time.time() - start_timeprint("Time to calculate \033[1m logmodel.predict in Unpatched scikit-learn {:4.1f}\033[0m seconds".format(patched_time))# 成果评估report = metrics.classification_report(y_test, predicted)print(f"Classification report for Logistic Regression with SMOTE:\n{report}\n")

运行后果截图如下所示:

增加补丁的减速版本

上面是咱们测试Intel优化版Logistic Regression算法, 代码应用patch_sklearn()增加补丁,最初 执行工夫 7.1秒,能够看到,只破费了原始版本20%的工夫,却获得了齐全一样的成果!

总结

本文介绍了英特尔针对Scikit-Learn的减速扩大,它的一些特点包含:

  • 优化常见 ML 算法的性能
  • 缩小 ML 训练和推理工夫
  • 提供无缝体验(只需增加两行代码即可启用减速)

参考资料

  • 实战数据集下载(百度网盘):公众号『ShowMeAI钻研核心』回复『实战』,或者点击 这里 获取本文 [[8] 面向 Scikit-Learn 的英特尔减速扩大补丁](https://www.showmeai.tech/art...) 『creditcard 信用卡欺诈场景数据集
  • ShowMeAI官网GitHub:https://github.com/ShowMeAI-Hub
  • SKLearn 官网:https://scikit-learn.org/stable/
  • SKLearn Github:https://github.com/scikit-learn/scikit-learn
  • scikit-learn-intelex:https://github.com/intel/scikit-learn-intelex
  • 机器学习实战 | SKLearn入门与简略利用案例:https://www.showmeai.tech/article-detail/202
  • 机器学习实战 | SKLearn最全利用指南:https://www.showmeai.tech/article-detail/203
  • AI 垂直畛域工具库速查表 | Scikit-Learn 速查表:https://www.showmeai.tech/article-detail/108