【问题标题】:Curve fitting for large datasets in PythonPython中大型数据集的曲线拟合
【发布时间】:2020-03-25 16:01:11
【问题描述】:

我有一个非常大的数据集(大约 100k 点),我想为这个图拟合一条曲线。

我尝试了另一个问题的答案建议的过滤器,但这会导致过度拟合。 到目前为止,我正在使用 numpy 和 matplotlib。

This 是我想要拟合的散点图类型。

编辑 1:

请忽略中心主数据点一侧的数据点(因此只有一条曲线可以拟合)

Here 是数据集,将文件下载为文本文件以分隔列,考虑第 3 列和第 9 列(基于 1 的索引),y 轴有第 3 列,而 x 轴绘制差异第 3 列和第 9 列。

编辑 2:忽略负值

编辑 3:由于似乎有很多噪音,请考虑第 33 列的概率,并仅考虑概率 >90% 的恒星

【问题讨论】:

  • 从视觉上看,单个函数不适合此数据,因为在同一个图上似乎有多个数据组。对我来说,似乎应该有多个模型分别适合不同的数据组。如果这样做,每个模型中的数据点数量就会减少。
  • 能否发一个数据集的链接?
  • @JamesPhillips 是的,我会编辑问题
  • 这些列中的某些值是负数。我应该排除它们吗?
  • @JamesPhillips 很抱歉我忘了说,是的,排除他们。

标签: python-3.x numpy matplotlib curve-fitting scatter-plot


【解决方案1】:

这里是使用链接中的数据的比较散点图,以及我用来读取、解析和绘制数据的 python 代码。请注意,我的绘图还有一个倒置的 y 轴用于直接比较。这向我表明,根据您的指示解析的已发布链接中的数据不适合您的问题。我希望你能在我的工作中发现一些错误,并且实际上可以制作一个模型。

import matplotlib.pyplot as plt

dataFileName = 'temp.dat'

dataCount = 0
xlist = []
ylist = []
with open(dataFileName) as f:
    for line in f:
        if line[0] == '#': # comments
            continue

        spl = line.split()
        col3 = float(spl[2])
        col9 = float(spl[8])

        if col3 < 0.0 or col9 < 0.0:
            continue

        x = abs(col3 - col9)
        y = col3

        xlist.append(x)
        ylist.append(y)

f = plt.figure()
axes = f.add_subplot(111)
axes.invert_yaxis()
axes.scatter(xlist, ylist,color='black', marker='o', lw=0, s=1)
plt.show()

【讨论】:

  • 由于似乎有很多噪音,请考虑第 33 列的概率,并仅考虑概率 >90% 的星星
  • 有趣的变化。我在两个散点图中看到了一些相似的特征,非常好奇。然而,在制作回归模型方面,我必须使用一些晦涩难懂的技术术语,并注意——在我个人看来——将所有数据同时拟合到单个 y = f(x) 类型的数学模型不会产生深蹲。
猜你喜欢
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 2018-12-18
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多