python - 如何解决一维数据拟合不良的问题?

标签 python distribution curve-fitting gaussian normal-distribution

我有数据集(一维),只有一个独立的列。我想将任何模型拟合到它,以便从该模型中采样。原始数据 Data set

我尝试了 Fitter 包中的各种理论分布(此处 https://pypi.org/project/fitter/ ),但没有一个能正常工作。然后我尝试使用 sklearn 进行核密度估计。这很好,但由于它的工作方式,我无法阻止负值。最后,我尝试了正常登录,但它并不是很完美。

此处为日志正常代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy
import math
from sklearn.metrics import  r2_score,mean_absolute_error,mean_squared_error

NN = 3915 # sample same number as original data set

df = pd.read_excel (r'Data_sets2.xlsx',sheet_name="Set1")

eps = 0.1  # Additional term for c

"""
    Estimate parameters of log(c) as normal distribution
"""
df["c"] = df["c"] + eps
mu = np.mean(np.log(df["c"]))
s  = np.std(np.log(df["c"]))
print("Mean:",mu,"std:",s)


def simulate(N):
    c = []
    for i in range(N):
        c_s = np.exp(np.random.normal(loc = mu, scale = s, size=1)[0])
        c.append(round(c_s))
    return (c)


predicted_c = simulate(NN)


XX=scipy.arange(3915)
### plot C relation ###
plt.scatter(XX,df["c"],color='g',label="Original data")
plt.scatter(XX,predicted_c,color='r',label="Sample data")
plt.xlabel('Index')
plt.ylabel('c')
plt.legend()
plt.show()

原始与样本

fitted data

我正在寻找的是如何改进拟合,任何可以更准确地拟合我的数据的模型的建议或方向将不胜感激。谢谢

最佳答案

这是一个使用电子表格数据的 scipy 统计分布 Double Gamma 的图形 Python 拟合器,我希望这可能会有一些用处,因为正态分布似乎不太适合该数据集。 dgamma 的 scipy 文档位于 https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.dgamma.html - 顺便说一句,双威 bool 分布几乎也适合。

plot

import numpy as np
import scipy.stats as ss
import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_excel (r'Data_sets2.xlsx',sheet_name="Set1")
eps = 0.1  # Additional term for c

data = df["c"] + eps

P = ss.dgamma.fit(data)
rX = np.linspace(min(data), max(data), 50)
rP = ss.dgamma.pdf(rX, *P)

plt.hist(data,bins=25, normed=True, color='slategrey')

plt.plot(rX, rP, color='darkturquoise')
plt.show()

关于python - 如何解决一维数据拟合不良的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57540395/

相关文章:

python - 在 Python 中读取二进制字符串,zlib

python - 在 Boto 中列出 EC2 卷

python - 如何最好地分发具有 _large_ 数据依赖性的 python 包

javascript - 操作在后端还是前端?

python - 平滑信号并找到峰值

python - 这个 `_time_independent_equals` 是什么意思?

javascript - 生成具有对数分布和自定义斜率的随机数

python - 如何在关注更好的准确性的同时做出更好的曲线拟合

python - 以变​​量为积分极限的非线性最小二乘拟合

python - 如何使用词嵌入作为 CRF (sklearn-crfsuite) 模型训练的特征