Statistics 寻找估算方法(数据分析)

Statistics 寻找估算方法(数据分析),statistics,data-analysis,approximation,forecasting,Statistics,Data Analysis,Approximation,Forecasting,因为我不知道我现在在做什么,我的措辞可能听起来很滑稽。但说真的,我需要学习 我面临的问题是提出一种方法(模型)来估计软件程序是如何工作的:即运行时间和最大内存使用量。我已经有了大量的数据。此数据集概述了程序在不同条件下的工作方式,例如: <code> RUN Criterion_A Criterion_B Criterion_C Criterion_D Criterion_E <br> -----------------------------------

因为我不知道我现在在做什么,我的措辞可能听起来很滑稽。但说真的,我需要学习

我面临的问题是提出一种方法(模型)来估计软件程序是如何工作的:即运行时间和最大内存使用量。我已经有了大量的数据。此数据集概述了程序在不同条件下的工作方式,例如:

<code>
RUN     Criterion_A  Criterion_B  Criterion_C  Criterion_D  Criterion_E <br>
------------------------------------------------------------------------
R0001           12         2           3556            27           9 <br>      
R0002            2         5           2154            22           8 <br>
R0003           19        12           5556            37           9 <br>
R0004           10         3           1556             7           9 <br>
R0005           5          1            556            17           8 <br>
</code>

运行标准\u A标准\u B标准\u C标准\u D标准\u E
------------------------------------------------------------------------ R0001 12 3556 27 9
R0002 2 5 2154 22 8
R00031912556379
R000410315679
R0005 5 1 556 17 8
我有数千行这样的数据。现在我需要知道,如果我事先知道所有标准,我如何估计(预测)运行时间和最大内存使用量。我需要的是给出提示(上限或范围)的近似值


我觉得这是一个典型的???我不知道的问题。你们能给我一些提示或给我一些想法(理论、解释、网页)或任何可能有帮助的东西吗。谢谢

如果您要预测的标准在当前已知标准的范围内,那么您应该对该过程进行更多的研究:

在数值分析的数学子领域中,插值是一种在一组离散的已知数据点范围内构造新数据点的方法

如果它不在您目前已知的数据范围内,且不太准确:

在数学中,外推是在一组离散的已知数据点之外构造新数据点的过程

方法

  • 供您浏览
  • 详细介绍了一些用于外推的方法
您需要一个新程序,该程序将一个或多个条件作为输入,然后输出运行时间或内存使用量的估计值。这是一个机器学习问题

您的输入可以列为数字向量,如下所示:

input = [ A, B, C, D, E ]
最简单的算法之一就是一个。这背后的想法是,您将获取数字的输入向量,并在数据库中找到与输入向量最相似的数字向量。例如,给定此输入向量:

input = [ 11, 1.8, 3557, 29, 10 ]
您可以假设运行时间和内存应该非常类似于此运行的值(最初在上面列出的表中):

有几种算法可以计算这两个向量之间的相似性,一种简单直观的算法是。例如,输入向量和表中向量之间的欧氏距离如下:

dist = sqrt( (11-12)^2 + (1.8-2)^2 + (3557-3556)^2 + (27-29)^2 + (9-10)^2 )
dist = 2.6533
直觉上应该很清楚,距离较低的点应该更好地估计运行时间和内存使用,因为距离应该描述两组标准之间的相似性。假设您的标准信息丰富且选择得当,具有类似标准的点应具有类似的运行时间和内存使用情况

下面是一些如何在R中执行此操作的示例代码:

r1 = c(11,1.8,3557,29,10)
r2 = c(12,2.0,3556,27, 9)

print(r1)
print(r2)

dist_r1_r2 = sqrt( (11-12)^2 + (1.8-2)^2 + (3557-3556)^2 + (27-29)^2 + (9-10)^2 ) 
print(dist_r1_r2)
smarter_dist_r1_r2 = sqrt( sum( (r1 - r2)^2 ) ) 
print(smarter_dist_r1_r2)
计算最近行的运行时间和内存使用量是K=1的KNN算法。通过从数据库中获取多行的加权组合,这种方法可以扩展到包括来自多行的数据,与输入向量的距离越小的行对估计的贡献越大。阅读KNN上的Wikipedia页面了解更多信息,特别是关于数据规范化的信息,包括多点的贡献和计算距离

当计算这些输入向量列表之间的差异时,你应该考虑规范化你的数据。这样做的理由是,标准C的3557和3556之间的差值为1个单位,可能不等于标准a的11和12之间的差值为1。如果您的数据是正态分布的,您可以使用以下公式将它们全部转换为:

N_trans = (N - mean(N)) / sdev(N)
对于规范化数据的“正确”方法没有通用的解决方案,因为它取决于您拥有的数据的类型和范围,但是Z分数很容易计算,并且是一种先尝试的好方法

有许多更复杂的技术用于构建这样的估计,包括线性回归、支持向量回归和非线性建模。一些更复杂的方法背后的想法是,您尝试并开发一个方程,描述变量与运行时间或内存的关系。例如,一个简单的应用程序可能只有一个标准,您可以尝试区分以下模型:

running_time = s1 * A + s0
running_time = s2 * A^2 + s1 * A + s0
running_time = s3 * log(A) + s2 * A^2 + s1 * A + s0
其思想是,A是您的固定标准,sN是一个自由参数列表,您可以对其进行调整,直到得到一个运行良好的模型

这种方法的一个问题是,有许多不同的可能模型具有不同数量的参数。区分具有不同数量参数的模型是统计学中的一个难题,我不建议您在第一次尝试机器学习时解决这个问题

你应该问自己的一些问题是:

  • 我的所有标准都会影响运行时间和内存使用吗?从预测的角度来看,是否有些只影响其中一个或另一个,而有些是无用的?回答这个问题被称为,这是一个突出的问题
  • 对于变量如何影响运行时间或内存使用,您是否有任何先验估计?例如,您可能知道应用程序使用的排序算法在时间上是N*log(N),这意味着您需要显式地
    running_time = s1 * A + s0
    running_time = s2 * A^2 + s1 * A + s0
    running_time = s3 * log(A) + s2 * A^2 + s1 * A + s0