我试图从一系列带有python3
的示例值构建一个模糊集。在
例如,给定[6, 7, 8, 9, 27]
我想获得一个函数:
0.0
0.0
。在请注意,y
值始终在[0.0, 1.0]
范围内,如果一个序列缺少一个值,则该值的y
为0.0。在
请考虑在最一般的情况下,输入值可能类似于[9, 41, 20, 13 ,11, 12, 14, 40, 4, 4, 4, 3, 34, 22]
(值总是可以排序的,但是请注意,在本系列中,4
重复了3次,因此我希望概率为1,而所有其他值的概率值都较低——不一定是本例中的1/3)。在
此图的顶部显示了绘制到x=16
(手绘)的所需函数。我很乐意得到这样的东西。
图片的底部显示了一些额外的功能,这是很好的,但不是严格的强制要求:
例如,我尝试过一些改编自polyfit、bezier、gauss或{a5}的方法,但结果并不是我预期的那样。
我也尝试过使用包^{epydoc
,这似乎与python3
不兼容。对StatModels也没有运气。在
有人能建议如何实现预期的功能吗?提前谢谢。在
如果您想知道,我计划使用结果函数来预测给定值的可能性;对于上面描述的模糊集,例如,4.0
返回0.0,6.5
返回1.0,5.8
类似于0.85。也许还有其他更简单的方法?在
这就是我通常处理输入值的方式(不确定是否需要添加0
s的部分),有什么可以代替???
来计算所需的f
?在
def prepare(values, normalize=True):
max = 0
table = {}
for value in values:
table[value] = (table[value] if value in table else 0) + 1
if normalize and table[value] > max:
max = table[value]
if normalize:
for value in table:
table[value] /= float(max)
for value in range(sorted(table)[-1] + 2):
if value not in table:
table[value] = 0
x = sorted(table)
y = [table[value] for value in x]
return x, y
if __name__ == '__main__':
# get x and y vectors
x, y = prepare([9, 41, 20, 13, 11, 12, 14, 40, 4, 4, 4, 3, 34, 22], normalize=True)
# calculate fitting function
f = ???
# calculate new x's and y's
x_new = np.linspace(x[0], x[-1], 50)
y_new = f(x_new)
# plot the results
plt.plot(x, y, 'o', x_new, y_new)
plt.xlim([x[0] - 1, x[-1] + 1])
plt.show()
print("Done.")
一个实际的例子,只是为了阐明这一点的动机。。。
这一系列的数值可能是人们放弃在售货亭前排队的分钟数。。。有了这样一个模型,我们可以通过知道等待了多长时间来预测某人离开队列的可能性。以这种方式读取的值可以被解除模糊化,例如在happily waiting
[0.00,0.33],just waiting
(0.33,0.66]和{about to leave
的情况下,某人可能被某事(和广告?)所吸引说服他留下来。在
这利用了峰值必须在元素上的事实。并非所有
pulse
函数都是这样。在你最好先计算
largest
,因为它是O(N^2)这只对一组整数有效(由于
np.bincount
)。在相关问题 更多 >
编程相关推荐