65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Intel® Data Analytics Acceleration Library 优化线性回归方法

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2017年4月12日

CPOL

6分钟阅读

viewsIcon

15771

本文介绍了称为线性回归的常见回归分析类型,以及 Intel® 数据分析加速库 (Intel® DAAL) 如何在配备 Intel® Xeon® 处理器的系统上运行以优化此算法。

公司如何预测其在未来广告上的花费以增加销售额? 同样,公司应该在未来的培训计划上花费多少才能提高生产力?

在这两种情况下,这些公司都依赖于变量之间的历史关系,例如,前者是销售价值与广告支出之间的关系,以预测未来结果。

这是可以使用机器学习1 最佳解决的典型回归问题。

本文介绍了称为线性回归2 的常见回归分析类型,以及 Intel® 数据分析加速库 (Intel® DAAL) 3 如何在配备 Intel® Xeon® 处理器的系统上运行以优化此算法。

什么是线性回归?

线性回归 (LR) 是最基本的回归类型,用于预测分析。 LR 显示变量之间的线性关系以及一个变量如何受一个或多个变量影响。 受其他变量影响的变量称为因变量、响应变量或结果变量,其他变量称为自变量、解释变量或预测变量。

为了使用 LR 分析,我们需要检查 LR 是否适用于此数据集。 为此,我们需要观察数据的分布情况。 让我们看下面的两张图

图 1: 可以将一条直线拟合到数据点上。

图 2: 无法将一条直线拟合到这些数据点上。

在图 1 中,我们可以将一条直线拟合到数据点上;然而,在图 2 的数据点上却没有办法做到这一点。 只有曲线(非线性)可以拟合图 2 中的数据点。 因此,线性回归分析可以在图 1 的数据集上进行,但在图 2 的数据集上则不能。

根据自变量的数量,LR 分为两种类型:简单线性回归 (SLR) 和多元线性回归 (MLR)。

当只有一个自变量时,LR 称为 SLR,而 MLR 有一个以上的自变量。

一个因变量和一个自变量的最简单方程形式定义为

y = Ax + B (1)

其中

y:因变量

x:自变量

A:回归系数或直线的斜率

B:常数

问题是如何找到最佳拟合线,使得因变量 (y) 的观测值与预测值之间的差异最小。 换句话说,找到方程 (1) 中的 A 和 B,使得 |yobserved – ypredicted| 最小。

找到最佳拟合线的任务可以使用最小二乘法4 来完成。 它通过最小化从每个数据点到直线的垂直差(观测值和预测值之间的差异)的平方和来计算最佳拟合线。 垂直差也称为残差。

图 3: 线性回归图。

从图 3 中可以看出,绿点代表实际数据点。 黑点显示了数据点在回归线(红线)上的垂直(非垂直)投影。 黑点也称为预测数据。 实际数据和预测数据之间的垂直差称为残差。

线性回归的应用

可以很好地利用线性回归的一些应用

  • 预测未来销售额。
  • 分析产品销售的市场营销效果和定价。
  • 评估金融服务或保险领域的风险。
  • 在汽车中研究发动机性能的测试数据。

线性回归的优缺点

LR 的一些优点和缺点

  • 优点
    • 当自变量和因变量之间的关系几乎是线性的时候,结果是最优的。
  • 缺点
    • LR 对异常值非常敏感。
    • 它不恰当地用于模拟非线性关系。
    • 线性回归仅限于预测数值输出。

Intel® 数据分析加速库

Intel DAAL 是一个由许多基本构建块组成的库,这些构建块针对数据分析和机器学习进行了优化。 这些基本构建块针对最新的 Intel® 处理器的最新功能进行了高度优化。 LR 是 Intel DAAL 提供的预测算法之一。 在本文中,我们使用 Intel DAAL 的 Python* API 来构建一个基本的 LR 预测器。 要安装 DAAL,请遵循 如何在 Linux 中安装 Intel DAAL 的 Python 版本*5 中的说明。

在 Intel 数据分析加速库中使用线性回归算法

本节将介绍如何使用 Intel DAAL 在 Python*6 中调用线性回归方法。

参考部分提供了指向可用于测试应用程序的免费数据集的链接7

执行以下步骤从 Intel DAAL 调用算法

  1. 使用 from 和 import 命令导入必要的包。
    1. 通过发出命令导入 Numpy
      import numpy as np
    2. 通过发出以下命令导入 Intel DAAL 数值表
      from daal.data_management import HomogenNumericTable
    3. 导入必要的函数到数值表中以存储数据
      from daal.data_management import ( DataSourceIface, FileDataSource, HomogenNumericTable, MergeNumericTable, NumericTableIface)
    4. 使用以下命令导入 LR 算法
      from daal.algorithms.linear_regression import training, prediction
  2. 如果数据输入来自 .csv 文件,则初始化文件数据源
    trainDataSet = FileDataSource(
            trainDatasetFileName, DataSourceIface.notAllocateNumericTable,
            DataSourceIface.doDictionaryFromContext
        )
  3. 为训练数据和因变量创建数值表
    trainInput = HomogenNumericTable(nIndependentVar, 0, NumericTableIface.notAllocate)
    
    trainDependentVariables = HomogenNumericTable(nDependentVariables, 0, NumericTableIface.notAllocate)
    
    mergedData = MergedNumericTable(trainData, trainDependentVariables)
    
  4. 加载输入数据
    trainDataSet.loadDataBlock(mergedData)
  5. 创建一个函数来训练模型。
    1. 首先使用以下命令创建一个算法对象来训练模型
      algorithm = training.Batch_Float64NormEqDense()
      注意:此算法使用正规方程来解决线性最小二乘问题。 DAAL 还支持 QR 分解/因子分解。
    2. 使用以下命令将训练数据集和因变量传递给算法
      algorithm.input.set(training.data, trainInput)
      algorithm.input.set(training.dependentVariables, trainDependentVariables)
      其中
      algorithm:如上一步 a 中定义的算法对象。 train
      Input:训练数据。 trainDependent
      Variables:训练因变量
    3. 使用以下命令训练模型
      trainResult = algorithm.compute()
      其中
      algorithm:如上一步 a 中定义的算法对象。
  6. 创建一个函数来测试模型。
    1. 与上述第 2、3 和 4 步类似,我们需要创建用于测试的测试数据集
      i。
      testDataSet = FileDataSource(
      testDatasetFileName, DataSourceIface.doAllocateNumericTable,
      DataSourceIface.doDictionaryFromContext
       )
      ii。
      testInput = HomogenNumericTable(nIndependentVar, 0, NumericTableIface.notAllocate)
      testTruthValues = HomogenNumericTable(nDependentVariables, 0, NumericTableIface.notAllocate)
      mergedData = MergedNumericTable(testDataSet, testTruthValues)
      iii。
      testDataSet.loadDataBlock(mergedData)
    2. 使用以下命令创建一个算法对象来测试/预测模型
      algorithm = prediction.Batch()
    3. 使用以下命令将测试数据和训练模型传递给模型
      algorithm.input.setTable(prediction.data, testInput)
      algorithm.input.setModel(prediction.model, trainResult.get(training.model))
      其中
      algorithm:如上一步 a 中定义的算法对象。
      testInput:测试数据。
    4. 使用以下命令测试/预测模型
      Prediction = algorithm.compute()

结论

线性回归是一种非常常见的预测算法。 Intel DAAL 优化了线性回归算法。 通过使用 Intel DAAL,开发人员可以利用未来几代 Intel Xeon 处理器的最新功能,而无需修改他们的应用程序。 他们只需要将应用程序链接到最新版本的 Intel DAAL。

参考文献

  1. 维基百科 – 机器学习
  2. 线性回归
  3. Intel 数据分析加速库简介
  4. 最小二乘法
  5. 如何在 Linux 中安装 Intel DAAL 的 Python 版本
  6. Python 网站
  7. 常见数据集列表
© . All rights reserved.