我希望我的程序能自动选择具有最佳适应度的分布,并使用该分布的概率密度函数来计算概率
1.使用scipy.stats.rv_continuous.fit
获取拟合参数,例如:paras = scipy.stats.norm.fit(data_array)
个
1.使用scipy.stats.kstest
测试适应性fitness = scipy.stats.kstest(data_array, paras)
个
1.选择给出最低kstest分数的分布
1.计算概率,例如scipy.stats.norm.pdf(my_values, paras)
个
我不确定这是否是一个严格正确的选择最佳拟合分布的方法,目前它适用于正态分布。
我的问题是如何解析scipy.stats.rv_continuous.pdf()
的参数。对于某些分布,有三个参数从scipy.stats.rv_continuous.fit()
计算,包括形状,位置和规模。我试图直接解析,如
scipy.stats.rv_continuous.pdf(my_values, paras[0], paras[1], paras[2])
字符串
这将给予一个点的两个pdf值。
我也试着用这种方式来解析
scipy.stats.rv_continuous.pdf(my_values, paras[0], paras[1], paras[2])
型
但结果是奇怪的,有人想做这样的事情,遇到同样的问题吗?
我的目标是在朴素贝叶斯分类中用任何更好的分布来代替高斯分布,希望能提高预测精度。
1条答案
按热度按时间ifsvaxew1#
我的问题是如何解析scipy.stats.rv_continuous.pdf()的参数
从字面上解释,这听起来像是你试图使用
scipy.stats.rv_continuous
类的pdf
方法,但是在使用pdf
方法之前,rv_continuous
类必须被子类化和示例化。接下来,我假设你使用
rv_continuous
作为引用SciPy发行版的变量,例如rv_continuous = stats.norm
。你可能想跳到最后的代码,但我将首先解决每个指示问题的语句。我试着像
scipy.stats.rv_continuous.pdf(my_values, paras[0], paras[1], paras[2])
那样直接解析,这将为一个点给予两个pdf值。如果不知道
rv_continuous
指的是什么分布,my_values
是什么分布,很难调试这个。如果rv_continuous
是指SciPy分布的变量,如果my_values
是标量,如果paras
是rv_continuous.fit
的输出,如果rv_continuous
有三个参数(包括loc
和scale
),只会有一个输出,所以问题一定出在这里没有包括的信息上。我也试着用这种方式解析
scipy.stats.rv_continuous.pdf(my_values, paras[0], paras[1], paras[2])
,但结果很奇怪。由于这与前面的方法相同,我们希望它具有相同的行为。请考虑详细说明输出是什么,因为“怪异”可以意味着很多事情。
无论如何,这段代码听起来都很有用。对于两个不同的分布,它将分布拟合到数据,从拟合的参数创建冻结分布,并计算某个点的PDF。这两个分布具有不同数量的参数,因此您可以看到无论分布有多少参数,代码都可以工作。
字符串