借助英特尔® 数据分析加速库,提升主组件分析的性能

您是否遇到过网站迟迟无法打开或根本无法访问的情况?如果是这样,网站可能正遭遇拒绝服务1 (DoS) 攻击。DoS 攻击指攻击者让网络充斥垃圾邮件等信息,使网络因忙于处理这些信息而不能处理其他用户的请求。

为防止垃圾邮件 DoS 攻击,网络需要识别并过滤垃圾邮件。其中一个方式是将电子邮件模式与垃圾邮件签名库中的模式进行比较。与库中模式匹配的入站模式应被标记为攻击。由于垃圾邮件具有各种不同的形式,因此无法构建存储所有模式的库。为提高识别垃圾邮件的几率,需对数据进行重构,以简化数据分析。

本文探讨了一种非监督式2 机器学习3算法,即主组件分析4 (PCA),它可用于简化数据。本文还介绍了英特尔® 数据分析加速库(英特尔® DAAL)5 可如何帮助优化该算法,使其以更高性能在搭载英特尔® 至强® 处理器的系统上运行。

什么是主组件分析?

PCA 是一种主流数据分析方法,用于在不损害数据属性的情况下降低数据复杂性,从而简化数据可视化和分析。降低数据复杂性意味着减小原始数据维度,同时保留原始数据集的重要特征。它通常用作 K-means 等机器学习算法的预先步骤,6,可简化建模,从而提升性能。

图 1-3 描述了 PCA 算法的工作原理。为便于说明,我们将范围限制在二维空间。


图 1.原始数据集布局。

图 1 所示为数据集的对象。我们需要找到方差最大的方向。


图 2.平均值和方差最大的方向。

图 2 显示了数据集的平均值和方差最大的方向。第一个具有最大方差的方向称为第一个主组件。


图 3.查找下一个主组件。

图 3 所示为下一个主组件下一个主组件是方差第二大的方向。请注意,第二大的方向与第一大的方向是标准正交关系。

图 4-6 显示了 PCA 算法如何用于减小维度。


图 4.重定向图表。

图 4 所示为旋转图表后的新图表。在新图表中,与第一个主组件对应的轴线 (P1) 成为了水平轴线。


图 5.将对象投射到 P1 轴线。

在图 5 中,整个图表都进行了旋转,对应第一个主组件的轴线 (P1) 成为了水平轴线。


图 6.将二维减小至一维。

图 6 显示了使用 PCA 根据最大方差将二维(P1 和 P2)减小至一维 (P1) 的效果。同一概念可用于减小多维数据集的维度,同时通过减小具有较低方差的维度保留它们的许多特征。

如需了解有关 PCA 数学表征的信息,请查阅参考资料 7 和 8。

PCA 的应用

PCA 应用包括:

  • 检测 DoS 和网络探头攻击
  • 图像压缩
  • 模式识别
  • 分析医疗成像

PCA 的优缺点

下面列出了 PCA 的部分优势和劣势。

  • 优点
    • 快速算法
    • 显示数据的最大方差
    • 减小原始数据的维度
    • 减小噪音。
  • 缺点
    • 非线性结构难以使用 PCA 建模

英特尔® 数据分析加速库

英特尔 DAAL 是一个包含众多优化的基本构建模块的库,适合数据分析和机器学习。这些基本构建模块经过高度优化,能适应最新版英特尔® 处理器的最新特性。如欲了解关于英特尔 DAAL 的更多信息,请查看参考资料 5。

下一部分介绍了如何协同使用 PCA 和 PyDAAL —— 英特尔 DAAL 的 Python* API。请按照参考资料 9 的说明安装 PyDAAL。

在英特尔数据分析加速库中使用 PCA 算法

如需使用英特尔 DAAL 在 Python 中调用 PCA 算法10,请实施下列步骤:

  1. 输入如下命令以导入必要的封装,并导入
    1. 发布下列命令,导入加载数据所需的函数:
      from daal.data_management import HomogenNumericTable
    2. 使用下列命令导入 PCA 算法:
      import daal.algorithms.pca as pca
    3. 导入用于计算的 numpy。
      Import numpy as np
  2. 导入 createSparseTable 函数,创建数值表格,以存储从文件中读取的输入数据。
    from utils import createSparseTable
  3. 将数据加载至上述数据集对象。
     dataTable = createSparseTable(dataFileName)
    其中,dataFileName 表示 input .csv 数据文件的名称
  4. 使用关联法为 PCA 创建算法对象。
    pca_alg = pca.Batch_Float64CorrelationDense ()
    注:若要使用 svd(奇异值分解)法,我们可使用下列命令:
    pca = pca.Batch_Float64SvdDense()
  5. 设置算法的输入。
    pca_alg.input.setDataset(pca.data, dataTable)
  6. 计算结果。
    result = pca_alg.compute()
    结果可使用下列命令检索:
    result.get(pca.eigenvalues)
    result.get(pca.eigenvectors)

结论

PCA 是最简单的非监督式机器学习算法之一,可用于减小数据集的维度。英特尔 DAAL 包含优化版 PCA 算法。借助英特尔 DAAL,您无需担心您的应用无法在配备未来更多代英特尔至强处理器的系统上高效运行。英特尔 DAAL 将自动利用全新英特尔至强处理器中的新特性。您只需将您的应用链接到英特尔 DAAL 的最新版。

参考资料

1. 拒绝服务攻击

2. 非监督式学习

3. 维基百科 —— 机器学习

4. 主组件分析

5. 英特尔 DAAL 简介

6. K-means 算法

7. 面向机器学习的主组件分析

8. 主组件分析教程

9. 如何安装 Python 的英特尔分发版

10. Python 网站

有关编译器优化的更完整信息,请参阅优化通知