我有数据集(1-D),只有一个独立的列。我想适合任何模型,以便从该模型中取样。原始数据 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()
原始vs样本
我正在寻找的是如何改善拟合度,对可能更准确地拟合我的数据的模型的任何建议或方向,都表示赞赏。谢谢
答案 0 :(得分:1)
这是使用电子表格数据进行统计统计分布Double Gamma的图形Python拟合器,我希望这可能会有所用,因为正态分布似乎不太适合此数据集。 dgamma的scipy文档位于https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.dgamma.html-顺便说一下,双重Weibull分布也几乎适用。
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()