架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 241|回复: 0

[技巧] 使用 sklearnex 加速 scikit-learn 机器学习库

[复制链接]
发表于 2025-4-27 09:59:40 | 显示全部楼层 |阅读模式
Scikit-learn

sklearn,全称scikit-learn,是python中的机器学习库,建立在numpy、scipy、matplotlib等数据科学包的基础之上,涵盖了机器学习中的样例数据、数据预处理、模型验证、特征选择、分类、回归、聚类、降维等几乎所有环节,功能十分强大。与深度学习库存在pytorch、TensorFlow等多种框架可选不同,sklearn是python中传统机器学习的首选库,不存在其他竞争者。

官网:超链接登录可见。
源码:超链接登录可见。

Extension for Scikit-learn

scikit-learn作为经典的机器学习框架,从诞生至今已发展了十余年,但其运算速度一直广受用户的诟病。Extension for Scikit-learn 是一款免费的 AI 软件加速器,旨在为您现有的 Scikit-learn 代码提供10 到 100 倍以上的加速。软件加速通过矢量指令、AI 硬件专用的内存优化、线程和优化实现。

使用 Scikit-learn 扩展,您可以:

  • 在同等数学精度的情况下,训练和推理速度提高 100 倍
  • 受益于不同 CPU 硬件配置(包括 GPU 和多 GPU 配置)的性能改进
  • 无需修改代码即可将扩展集成到您现有的 Scikit-learn 应用程序中
  • 继续使用开源 scikit-learn API
  • 使用几行代码或在命令行中启用和禁用扩展


源码:超链接登录可见。
文档:超链接登录可见。

scikit-learn-acceleration.png

测试

首先,使用 conda 准备环境和安装必要的包,命令如下:

新建 python 测试代码如下:

加速后的代码如下:

源码解读:

1.X, y = make_regression(n_samples=2000000, n_features=100, noise=1, random_state=42)
make_regression 是 scikit-learn 中的一个函数,用于生成一个线性回归问题的数据集。
n_samples=2000000: 指定生成的数据集中样本的数量为 2,000,000 个。
n_features=100: 指定每个样本有 100 个特征(即输入变量)。
noise=1: 在目标值 y 上添加噪声的标准差为 1。这意味着目标值会有一定的随机扰动。
random_state=42: 设置随机种子为 42,确保每次运行代码时生成的数据是相同的(可重复性)。
结果: X 是一个形状为 (2000000, 100) 的 NumPy 数组,表示 2,000,000 个样本,每个样本有 100 个特征;y 是一个长度为 2,000,000 的一维数组,表示目标值。

2. X_train, _, y_train, _ = train_test_split(X, y, test_size=0.33, random_state=42)
train_test_split 是 scikit-learn 中的一个函数,用于将数据集拆分为训练集和测试集。
test_size=0.33: 表示将数据集的 33% 分配给测试集,剩下的 67% 分配给训练集。
random_state=42: 设置随机种子为 42,确保每次运行代码时数据拆分的结果是相同的。
_: 使用下划线 _ 表示忽略返回值。这里我们只关心训练集部分(X_train 和 y_train),而忽略了测试集部分。
结果:
X_train: 训练集的特征矩阵,形状为 (1340000, 100)(约 67% 的数据)。
y_train: 训练集的目标值,长度为 1,340,000。

3. model = LinearRegression()
LinearRegression 是 scikit-learn 中的一个类,用于实现线性回归模型。
这一行代码创建了一个线性回归模型的实例,并将其赋值给变量 model。
默认情况下,LinearRegression 不会对数据进行正则化(即没有 L1 或 L2 正则化)。

4. model.fit(X_train, y_train)
fit 是 scikit-learn 模型中的一个方法,用于训练模型。
这里调用 fit 方法,使用训练集数据 X_train 和目标值 y_train 来拟合线性回归模型。
模型会计算出一组最优的权重(系数)和截距,使得预测值与真实值之间的误差最小化(通常是最小二乘法)。
训练完成后,模型的参数会被存储在 model.coef_(特征的权重)和 model.intercept_(截距)中。

执行耗时分别如下:

QQ截图20250427095516.jpg QQ截图20250427095531.jpg

可以看到未加速和加速后效果非常明显,未加速需要16秒左右,加速后只需要0.1秒!!!!




上一篇:.NET/C# 使用 Tesseract 对图片 OCR 文字识别
下一篇:.NET/C# 使用 HtmlAgilityPack 移除所有 HTML 标签
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2025-6-15 12:39

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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