我有数据集(一维),只有一个独立的列。我想将任何模型拟合到它,以便从该模型中采样。原始数据 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()
原始与样本
我正在寻找的是如何改进拟合,任何可以更准确地拟合我的数据的模型的建议或方向将不胜感激。谢谢
最佳答案
这是一个使用电子表格数据的 scipy 统计分布 Double Gamma 的图形 Python 拟合器,我希望这可能会有一些用处,因为正态分布似乎不太适合该数据集。 dgamma 的 scipy 文档位于 https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.dgamma.html - 顺便说一句,双威 bool 分布几乎也适合。
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/