python统计函数库scipy.stats中entropy,skew,kurtosis,iqr四个函数的意义和java实现
1、entropy(pk, qk=None, base=None, axis=0)
熵的定义
熵是对混乱程度的度量,熵值越大,说明混乱程度越大。通常一个信源发送出什么信号是不确定的,衡量它可以根据其出现的概率来度量,概率大,出现机会多,不确定性小,反之不确定性就大。
不确定性函数f是概率P的减函数,两个独立符号所产生的不确定性应等于各自不确定性之和,这称为可加性,同时满足这两个条件的函数f是对数函数。
离散型随机变量的熵计算公式:
连续型随机变量的熵计算公式:
java实现
public double entropy() {
Array vec = new Array();
double sum = this.sum();
for (int i = 0; i < this.size(); i++) {
double pk = this.get(i)/sum;
pk = -pk * Math.log(pk);
vec.add(pk);
}
return vec.sum();
}
2、skew(a, axis=0, bias=True, nan_policy='propagate')
样本偏度
偏度衡量随机变量概率分布的不对称性,是相对于均值不对称程度的度量。若偏度为负,则均值左侧的离散度比右侧强;若偏度为正,则均值左侧的离散度比右侧弱。对于正态分布(或严格对称分布)偏度等于 0。计算公式如下:
java实现
public double skew() {
double mean = this.mean();
double std = this.std();
Array skewArray = new Array();
for (int i = 0; i < this.size(); i++) {
double x = (this.get(i) - mean)/std;
x = Math.pow(x, 3);
skewArray.add(x);
}
return skewArray.mean();
}
3、kurtosis(a, axis=0, fisher=True, bias=True, nan_policy='propagate')
样本峰度
峰度是表征概率密度分布曲线在平均值处峰值高低的特征数。直观看来,峰度反映了峰部的尖度。样本的峰度是和正态分布相比较而言统计量,如果峰度大于三,峰的形状比较尖,比正态分布峰要陡峭,反之亦然。计算公式如下:
java实现
public double kurtosis() {
double x = 0;
double y;
double mean = this.mean();
double var = this.var();
for (int i = 0; i < this.size(); i++) {
y = this.get(i) - mean;
y = Math.pow(y, 4);
x = x + y;
}
x = x/this.size();
return (x/Math.pow(var, 2))-3;
}
4、iqr,四分位距,表示第三四分位数和第一四分位数的差,代码如下:
public double iqr() {
Array sortArray = this.asarray();
sortArray.DicSort();
double position = (double)(sortArray.size()-1)/4.0;
int floor = (int) Math.floor(position);
int ceil = (int) Math.ceil(position);
double x = position - floor;
double y = ceil - position;
double q1 = sortArray.get(floor)*y+sortArray.get(ceil)*x;
position = position * 3;
floor = (int) Math.floor(position);
ceil = (int) Math.ceil(position);
x = position - floor;
y = ceil - position;
double q3 = sortArray.get(floor)*y+sortArray.get(ceil)*x;
return q3 - q1;
}