如何找到真实数据的概率分布和参数? (Python 3)
machine-learning
python
6
0

我有一个来自sklearn的数据集,并绘制了load_diabetes.target数据的分布图(即, load_diabetes.data用于预测的回归值)。

我使用它是因为它具有回归sklearn.datasets的变量/属性最少的数量。

使用Python 3, 如何获得最相似的分布类型和分布参数?

我所知道的target都是正的和偏斜的(正偏斜/右偏斜)。 。 。 Python中是否有办法提供一些分布,然后最适合target数据/向量?或者,根据给出的数据实际建议适合度?对于那些具有理论统计知识但很少将其应用于“真实数据”的经验的人来说,这将是非常有用的。

好处使用这种方法来找出“真实数据”的后验分布会有意义吗?如果没有,为什么不呢?

from sklearn.datasets import load_diabetes
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import pandas as pd

#Get Data
data = load_diabetes()
X, y_ = data.data, data.target

#Organize Data
SR_y = pd.Series(y_, name="y_ (Target Vector Distribution)")

#Plot Data
fig, ax = plt.subplots()
sns.distplot(SR_y, bins=25, color="g", ax=ax)
plt.show()

在此处输入图片说明

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

使用这种方法

import scipy.stats as st
def get_best_distribution(data):
    dist_names = ["norm", "exponweib", "weibull_max", "weibull_min", "pareto", "genextreme"]
    dist_results = []
    params = {}
    for dist_name in dist_names:
        dist = getattr(st, dist_name)
        param = dist.fit(data)

        params[dist_name] = param
        # Applying the Kolmogorov-Smirnov test
        D, p = st.kstest(data, dist_name, args=param)
        print("p value for "+dist_name+" = "+str(p))
        dist_results.append((dist_name, p))

    # select the best fitted distribution
    best_dist, best_p = (max(dist_results, key=lambda item: item[1]))
    # store the name of the best fit and its p value

    print("Best fitting distribution: "+str(best_dist))
    print("Best p value: "+ str(best_p))
    print("Parameters for the best fit: "+ str(params[best_dist]))

    return best_dist, best_p, params[best_dist]
收藏
评论

您可以使用该代码使数据符合(根据最大可能性)不同的分布:

import matplotlib.pyplot as plt
import scipy
import scipy.stats

dist_names = ['gamma', 'beta', 'rayleigh', 'norm', 'pareto']

for dist_name in dist_names:
    dist = getattr(scipy.stats, dist_name)
    param = dist.fit(y)
    # here's the parameters of your distribution, scale, location

您可以看到有关如何使用此处获得的参数的样本片段: 使用Scipy(Python)使经验分布适合理论分布吗?

然后,您可以选择具有最佳对数可能性的分布 (还有其他条件可以匹配“最佳”分布,例如贝叶斯后验概率,AIC,BIC或BICc值等)。

对于您的奖金问题,我认为没有通用的答案。如果您的数据集很重要,并且是在与真实单词数据相同的条件下获得 ,则可以这样做。

收藏
评论

据我所知,没有自动的方法来获取样本的分布类型和参数(因为推断样本的分布本身就是一个统计问题)。

我认为,您能做的最好的事情是:

(对于每个属性)

  • 尝试使每个属性适合可能分布的相当大的列表(例如,有关使用Scipy(Python)使经验分布适合于理论分布的示例,请参见使用Scipy的示例)

  • 评估您的所有健康状况并选择最合适的。这可以通过在样本与拟合的每个分布之间执行Kolmogorov-Smirnov检验(再次在Scipy中实现),然后选择一个将检验统计量D最小化的方法来完成(也就是样本和拟合)。

奖励:这很有道理-当您为每个变量选择合适的模型时,您将在每个变量上建立模型-尽管预测的优劣取决于数据的质量和所使用的分布配件。毕竟,您正在建立模型。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号