在Coursera看Ng的视频时,因为不想用MATLAB和Octave,改用了Python实现,由于用到了pandas这个模块(moudle)中的.describe()
方法,对它输出值(见下面代码段)中的分位数(25%,50%,75%)没太弄懂,再查阅各种资料之后,做一个简单的总结。
1 | 1, 2, 3]) s = pd.Series([ |
中位数
首先需要把数据集从小到大排列(从大到小也行,取决于实际需求)。
1、若样本个数n为奇数,那么只需要取中间值(第n/2个)就是数据集的中位数。
e.g.数据集[1,2,3],则中位数为2
2、若n为偶数,则取中间两个数的平均值作为中位数
e.g.[1,2,3,4],则中位数为(3+2)/2=2.5
中位数相对简单且好理解,其往往运用在数据集中某个样本出现明显异常值时。比如[1,2,3,4,1000000],这时候如果去中位数是3,但如果取平均数,就会产生巨大误差。
四分位数(25%,50%,75%)
四分位数是作为中位数的拓展,关于如何计算四分位数我发现了两种不同的计算方法,得出的数值会存在差异。wiki上说对于该值的选取仍然存在争议,但是无论用那种方法,都能够将数据集划分,从而进一步分析数据变量的趋势。
解法一:分步法(自己取的)
这个方法很简单,就是先排序然后取中位数(50%),然后以中位数为分界线,把数据集切分为两部分再分别取中位值(25%,75%)
1、若样本个数n为奇数
比如[1,2,3]
50%分位:(1+3)/2=2;
25%分位:(1+2)/2=1.5;
75%分位:(2+3)/2=2.5;
这个例子举的有点不好,带小数点了,但是意思理解就行,就是取中位数—划分—取中位数
2、若样本个数n为偶数
[1,2,3,4,5,6,7,8]
50%分位:(4+5)/2=4.5;
25%分位:(2+3)/2=2.5;
75%分位:(6+7)/2=6.5;
而在pandas中也是用这种方法计算的,wiki词条中的例子也是。
解法二:
这个方法有点麻烦。
1、若样本个数n为奇数
首先确定四分位的位置。
设置下四分位数、中位数和上四分位数,记为Q1、Q2、Q3
Q1位置=(n+1)/4 (25%分位)
Q2位置=2(n+1)/4 (50%分位)
Q3位置=3(n+1)/4 (75%分位)
e.g.[13、13.5、13.8、13.9、14、14.6、14.8、15、15.2、15.4、15.7]
Q1位置=(11+1)/4=3
Q2位置=2(11+1)/4=6
Q3位置=3(11+1)/4=9
对应的分位值这分别为13.8、14.6、15.2
2、若样本个数n为偶数
依然先确定位置Q1、Q2、Q3,这里直接用一个例子来说明,[14、15、16,16、17、18、18、19、19、20、2l,21、22、22、23、24、24、25、26、26],例子中n=20。
Q1位置=(20+1)/4=5.25,这里可以看到位于[5]、[6]位置是17和18,则Q1=17+(18-17)*(5.25-5)=17.25
同理可得:
Q2位置=2(20+1)/4=10.5,则Q2=20+(21-20)*(10.5-10)=20.5
Q3位置=3(20+1)/4=15.75,则Q3=23+(24-23)*(15.75-15)=23.75
参考资料
1、维基百科
2、MBA百科