💡 作者:韩信子 @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_sklearn
patch_sklearn()
##################################################################
◉ 这个补丁之后的所有 import 语句导入的来自 sklearn
的算法,都会优先导入 Scikit-Learn 优化版本
# Importing sklearn optimised version of LogisticRegression
from sklearn.linear_model import LogisticRegression
# Creating an object for model and fitting it on training data set
logmodel = LogisticRegression()
logmodel.fit(X_train_sm, y_train_sm)
# Predicting the Target variable
predicted = logmodel.predict(X_test)# Classification Report
report = 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_sklearn
patch_sklearn("SVC")
# 指定若干个算法减速
patch_sklearn(["SVC", "PCA"])
# 撤销对于算法的减速补丁
from sklearnex import unpatch_sklearn
unpatch_sklearn("SVC")
📌 查看优化算法列表
# 能够间接查看可减速算法列表
from sklearnex import get_patch_names
get_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_sklearn
unpatch_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_time
print("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