多维数据的统计回归

Statistical regression on multi-dimensional data

我有一组 (x, y, z) 格式的数据,其中 z 是一些涉及 xy 的公式的输出。我想找出公式是什么,我的互联网研究表明统计回归是实现此目的的方法。

但是,我在研究时发现的所有示例都只处理二维数据集 (x, y),这对我的情况没有用。上述例子似乎也没有提供一种方法来查看结果公式是什么,它们只是提供了一个函数,用于根据不在训练数据集中的数据预测未来的输出。

所需的精度水平是 z 的公式需要产生实际值 +/- 0.5 以内的结果。

谁能告诉我如何做我想做的事?请注意,我并不是要就要使用的软件库提出具体建议。

如果公式是线性函数,请查看此 tutorial。它使用 普通最小二乘法 来拟合您的数据,这是非常强大的。

假设你有数据点 (x1, y1, z1), (x2, y2, z2), ..., (xn, yn, zn),将它们转换成三个独立的 numpy 数组 X, Y 和Z.

import numpy as np
X = np.array([x1, x2, ..., xn])
Y = np.array([y1, y2, ..., yn])
Z = np.array([z1, z2, ..., zn])

然后,用ols装起来!

import pandas
from statsmodels.formula.api import ols

# Your data.
# Z = a*X + b*Y + c
data = pandas.DataFrame({'x': X, 'y': Y, 'z': Z})

# Fit your data with ols model.
model = ols("Z ~ X + Y", data).fit()

# Get your model summary.
print(model.summary())

# Get your model parameters.
print(model._results.params)
# should be approximately array([c, a, b])

如果提供更多变量

DataFrame 中添加任意多的变量。

# Your data.
data = pandas.DataFrame({'v1': V1, 'v2': V2, 'v3': V3, 'v4': V4, 'z': Z})

参考

Python package StatsModel

您需要使用的最基本的工具是多元线性回归。基本方法将 z 建模为 x 和 y 的线性函数,在它们之上添加高斯噪声 e:f(x,y) = a1*x + a2*y + a3 然后将 z 生成为 f(x, y) + e,其中 e 通常是方差未知的零均值高斯分布。您需要找到系数 a1、a2 和偏差 a3,它们通常使用最大似然估计,然后归结为高斯假设下的普通最小二乘法。它具有封闭式解析解。

既然您可以访问 Python,请查看 scikit-learn 中的线性回归: http://scikit-learn.org/stable/modules/linear_model.html#ordinary-least-squares

如果您可以重用 GitHub 上现有的 Python 3 tkinter GUI 应用程序的代码,请看一下使用我的 tkInterFit 项目拟合您提到的线性多项式曲面方程 - 它会还创建拟合曲面和等高线图。 GitHub 源代码位于 https://github.com/zunzun/tkInterFit,具有 BSD 许可证。