和某著名每日倒闭了么日企合作项目里面的一部分关于用户行为识别的相关,比如如何区分用户是轻荷载还是重荷载。我怕我下一期用的时候会忘,所以就先写出来吧……
Matlab里面没有提供太多重尾分布的函数,或者我没找见,比较常用的是广义帕累托分布(Generalized Pareto
distribution),这个函数调用方式是:
R = gprnd(K,sigma,theta,[m,n,...])
这个函数会返回一个大小为[m,n,……]的矩阵,矩阵内元素服从广义帕累托分布。
广义帕累托分布的参数是K,sigma和theta,按照WIkipedia上关于广义帕累托分布的符号,K对应形状参数,sigma对应尺度参数,theta对应位置参数。
不过这个函数并不是标准的帕累托分布,帕累托分布的参数是形状参数alpha和尺度参数Xm,需要稍微处理一下,换算比较简单:
K = 1/alpha
sigma = Xm/alpha
theta = Xm
这样就是标准的帕累托分布了。如果你没有具体参数但又要输出一个帕累托分布的话,需要注意满足theta=sigma/k。
然后我就试了一下,先是把传输的包的大小排序,红色是重尾分布(标准帕累托分布),蓝色是轻尾分布(看着像指数)
可以看出来明显帕累托分布里面样本中绝对值大的样本明显多,分布不均匀,是比较符合重尾分布的特征的。
有了样本就可以画样本的概率密度函数了,这里可以用核平滑法,Matlab里面也有,函数是
[f,xi] = ksdensity(x)
对离散一维样本默认步进是1,范围是0-100,我用了以后感觉线性坐标下区别不明显,至少对机器来说不太好识别,后来发觉用对数坐标较为明显:
这样的话,一方面是斜率不一样,明显重尾分布比较接近0,另一个就是这两个pdf都可以进行线性拟合,但是明显重尾分布的RMSE会更大,应该大大概两个数量级。
暂时没有其他更多的想法。
http://cn.mathworks.com/help/stats/gprnd.html
http://cn.mathworks.com/help/stats/ksdensity.html
#EOF