如何从非实验数据中获得科学结果(数据挖掘?)
- 我想从具有许多变量的过程中获得最大的性能,其中许多是无法控制的。
- 收集许多指示性能的参数的数据
- 对于我无法控制的参数,尽可能"正确"
- 找出我可以控制的东西的"最佳"价值,然后重新开始
感觉上这被称为数据挖掘,我们要遍历大量数据,这些数据似乎并不立即相关,但是经过一些努力后确实显示了相关性。
所以...我该从哪里开始着眼于这类事情的算法,概念和理论?甚至出于搜索目的的相关术语也将很有用。
背景:我喜欢进行超马拉松骑行,并记下每次骑行的日志。我想保留更多数据,经过数百次骑行之后,我可以提取有关我的表现的信息。
但是,一切都会改变路线,环境(温度,气压,嗡嗡声,日照,风,降水等),燃料,姿态,重量,水负荷等,等等。用相同的路线运行20次以测试新的燃油状况只会令人沮丧,并且要花费数年时间才能完成我想做的所有实验。但是,我可以记录所有这些以及更多内容(自行车FTW上的遥测)。
解决方案
听起来我们想做一些回归分析。我们当然有很多数据!
回归分析是统计学和科学中极为普遍的建模技术。 (可以说统计是回归分析的艺术和科学。)有很多统计数据包可以用来进行我们需要的计算。 (我会推荐一个,但是我已经过时了。)
数据挖掘之所以被冠以坏名声,是因为人们常常认为关联等于因果关系。我发现一种好的技术是从我们知道有影响力的变量开始,然后围绕它们建立统计模型。因此,我们知道风,负重和爬升会影响行进速度,而统计软件可以获取数据集并计算这些因素之间的相关性。这将为我们提供一个统计模型或者线性方程式:
speed = x*weight + y*wind + z*climb + constant
当我们探索新变量时,我们可以通过比较拟合优度指标(例如R平方)来查看模型是否得到了改善。因此,我们可以检查温度或者一天中的时间是否向模型添加了任何内容。
我们可能要对数据应用转换。例如,我们可能会发现在寒冷的日子里表现更好。但是,真正的寒冷和炎热的日子可能会损害性能。在这种情况下,我们可以将温度分配给箱或者段:<0C; 0C至40C; > 40C,或者类似的温度。关键是要以与现实世界中发生的事情的理性模型相匹配的方式来转换数据,而不仅仅是数据本身。
如果有人认为这与编程无关,请注意,我们可以使用这些相同的技术来分析系统性能。
过去,我曾将Perl模块Statistics :: Regression用于类似的问题。请注意,回归分析绝对是一门艺术。正如Perl模块中的警告所言,如果我们没有学习适当的数学知识,这对我们来说就没有意义了。
有了这么多变量,维数太多了,我们可能需要看一下主成分分析。它消除了回归分析中的一些"技巧",并让数据说明了一切。链接的底部显示了一些用于进行此类分析的软件。