总体方差
离中趋势衡量
均值,中位数,众数,这些都是用来衡量集中趋势的(或者说是用一个数表示所有的数值,这样损失了很多信息),但是我们并不知道集中的数字是接近集中趋势,还是远离集中趋势.因此引入离中趋势衡量.
有两组数据$l_1$={2, 2, 3, 3},$l_2$={0, 0, 5, 5},它们拥有相等的平均数 2.5
对于集合$l_1$,每个数值距离它们的$\mu$都比较靠近,而对于$l_2$,每个数对于$\mu$值的距离相对来说都比较远(或者说它们相对于均值比较分散).
那么怎么区分这种数据的特征呢?方差$\sigma ^ 2$
方差
每个数与均值之间的距离的平方的平均数.
好吧有点绕,我们一点一点理解
为了方便计算每个数与均值之间的距离,不便于每个差求绝对值,我们可以采用平方来代替,它肯定是正数.
然后我们对所有的距离组成的数字求平均数来代表距离的这组数(一个值描述数据集),而距离就是来表示我们想知道的离中趋势
方差同样也是为了方便处理数据的人造结构,在不写出数据全部的情况下,通过一个值来对数据集有更好的了解
方差的计算公式:
$$\sigma ^ 2 = \frac{\sum_{i=1}^N (x_i-\mu)^2}{N}$$
对于提到的两组数据,他们对应的方差依次为0.25,6.25.直观上你会发现后者的离均值相对与第一组数据大很多.这说明他们的数都距 离均值(方差)相对远,也就是比较分散.
python计算代码
def mean_fun(val):
'''求均值函数
'''
l = [x for x in val]
return sum(l) / float(len(l))
def var_fun(val):
'''计算方差函数
'''
mean = mean_fun(val)
l = [pow((x - mean), 2) for x in val]
return mean_fun(l)
L_1 = (2, 2, 3, 3)
L_2 = (0, 0, 5, 5)
var_1 = var_fun(L_1)
var_2 = var_fun(L_2)
print(var_1, var_2)
你也可以采用第三方包来快速的求解,不过我觉得还是有必要先学会求解的过程.
代码中float()
是为了在python2中一样可以得出正确的结果,python2的/int
表示整除
代码利用了封装函数和列表推导式,读起来会比较抽象,有人觉得这样不利于代码的可读性,我觉得那只是逻辑的问题,你的代码需要别人动脑子,不像是在按事物发展顺序的代码,这样并不意味者可读性差.说了这么多,就是代码的可读性跟你逻辑没有关系
代码的可读性好,应该是有注释,但是不要冗余,要有函数类等的文档字符串,变量命名统一规范,书写方式统一规范,服从架构等等,就是一大堆约定好的习惯,而不会限制你的思维.
博主个人能力有限,错误在所难免.
如发现错误请不要吝啬,发邮件给博主更正内容,在此提前鸣谢.
Email: JentChang@163.com (来信请注明文章标题,如果附带链接就更方便了)
你也可以在下方的留言板留下你宝贵的意见.