我有一组数据点,我很好奇数据是代表线性函数还是对数函数。
数据集是二维的。
假设一组理想的数据点遵循函数 f(x) = x。如果我绘制数据点,我将能够告诉它是线性的。
同样,如果数据点遵循函数 f(x) = log(x),我将能够直观地看出它是对数的。
另一方面,让程序确定一组数据是线性的还是对数的,这是不平凡的。我将如何处理这个?
我有一组数据点,我很好奇数据是代表线性函数还是对数函数。
数据集是二维的。
假设一组理想的数据点遵循函数 f(x) = x。如果我绘制数据点,我将能够告诉它是线性的。
同样,如果数据点遵循函数 f(x) = log(x),我将能够直观地看出它是对数的。
另一方面,让程序确定一组数据是线性的还是对数的,这是不平凡的。我将如何处理这个?
一种选择是对数据集进行线性回归以获得最佳拟合线。如果数据是线性的,您将获得非常好的拟合,并且均方误差应该很低。否则,你会得到一个很好的配合和一个合理的错误。
或者,您可以考虑通过将每个点 (x 0 , x 1 , ..., x n , y) 转换为 (x 0 , x 1 , ..., x n , e y ) 来转换数据集。如果数据是线性的,现在它将是指数的,如果数据是对数的,现在它将是线性的。现在运行线性回归并获得均方误差,对数数据的误差很小,而线性数据的误差大得惊人,因为指数函数爆炸得非常快。
要实际实现回归,一种选择是使用最小二乘回归。除了模型之外,这还有一个额外的好处,即为您提供相关系数,该系数也可用于区分两个数据集。
因为您已询问如何在 Java 中执行此操作,所以通过 Google 快速搜索找到了此 Java 代码以进行线性回归。但是,您可能更适合像 Matlab 这样专门为执行此类查询而优化的语言。例如,在 Matlab 中,您可以在一行代码中通过编写
linearFunction = inputs / outputs
希望这可以帮助!