所谓机器学习和深度学习, 背后的逻辑都是数学, 因此数学基础在这个领域很是关键, 而统计学又是重中之重, 机器学习从某种意义上来讲就是一种统计学习。python
今天是几率统计基础的第二篇文章, 基于第一篇随机变量与随机事件进行整理, 首先理一理这里面的逻辑,第一篇的内容蕴涵了大部分几率论的知识(除了大数定律和中心极限定理这种理论性的支持, 后期有机会会补上)。而今天的这篇内容是在几率论的基础上往前一步, 属于数理统计的内容。几率论中, 咱们研究随机现象, 随机变量, 可是咱们是假设它们的分布已知, 好比已知某一随机变量服从什么分布, 在这个基础上研究性质, 特色和规律(数字特征啊, 随机变量分布啊等), 而数理统计中, 咱们研究随机变量的分布未知或者一部分未知, 要去作的就是经过从未知分布中抽取多个样本, 对这些数据进行统计分析, 从而研究随机变量的分布等。数组
大纲以下:app
数理统计的基础(基础概念, 统计量与抽样分布, 经常使用统计量)dom
描述性统计(数据集中趋势和离散趋势, 分布特征, 偏度与峰度)
数理统计基础
前面已经分析了数理统计是基因而经过从未知分布中抽取多个样本, 对这些数据进行统计分析进而去分析随机变量的规律和特色, 因此在这里面依然会涉及到一些基本的概念。机器学习
基础概念ide
这里的基础概念包括整体, 个体, 整体容量, 样本, 简单随机样本, 若是这些概念都知道, 就能够跳过了哈哈。函数
在数理统计中, 整体就是研究对象的全体, 一般用一个随机变量表示, 组成整体的每一个基本单元叫个体, 而整体中包含的个体总数就是整体容量。学习
咱们研究的就是这个未知分布的整体的统计规律, 因此咱们须要从这里面随机抽取一部分个体进行统计,利用几率论的知识去分析推断。因此从整体中随机抽取一部分个体,称为取自的容量为的样本。来个栗子吧:spa
简单随机样本:知足如下两个条件的随机样本称为容量是的简单随机样本:3d
表明性:每一个与同分布
独立性:是相互独立的随机变量。
样本是具备两重性,即当在一次具体地抽样后它是一组肯定的数值。但在通常叙述中样本也是一组随机变量,由于抽样是随机的。
通常地,用,, 表示随机样本,它们取到的值记为,称为样本观测值。通常情形下, 两次观测, 样本值是不一样的。
样本做为随机变量,有必定的几率分布,这个几率分布称为样本分布。显然,样本分布取决于整体的性质和样本的性质。
统计量与抽样分布
数理统计的任务是采集和处理带有随机影响的数据,或者说收集样本并对之进行加工,以此对所研究的问题做出必定的结论,这一过程称为统计推断。从样本中提取有用的信息来研究整体的分布及各类特征数就是构造统计量的过程, 所以,统计量是样本的某种函数。
好比10个灯泡的平均寿命是统计量。
经常使用的统计量
1. 样本均值
设 是整体 XXX 的一个简单随机样本,称为样本均值。一般用样本均值来估计整体分布的均值和对有关整体分布均值的假设做检验。均值这个numpy实现就是np.mean()
2. 样本方差
设是整体的一个简单随机样本,为样本均值,称为样本方差。一般用样本方差来估计整体分布的方差和对有关整体分布均值或方差的假设做检验。numpy的话就是np.var()
3. k阶样本原点矩
设是整体的一个简单随机样本,称
为样本的阶原点矩(能够看到时,至关于样本均值),一般用样本的无阶原点矩来估计整体分布的阶原点矩。
4. k阶样本中心矩
设是整体的一个简单随机样本,为样本均值,称
为样本的阶中心矩,一般用样本的阶中心矩来估计整体分布的阶中心矩。
5. 顺序统计量
这个numpy的话就是np.max(), np.min()
三种重要的抽样分布
在使用统计量进行统计推断的时候经常须要知道它的分布, 统计量的分布称为抽样分布, 有三个很是重要的统计量的分布咱们须要知道, 由于在参数估计和检验假设等其实都有这三个分布的影子或者依赖于这三个分布, 这三个分布就是分布、分布和分布。
1. 分布
设是来自整体的样本, 则称统计量
服从自由度为的分布, 记为。自由度指的独立变量的个数。几率密度函数长这样:
其中
2.分布
设,且相互独立,则称随机变量
服从自由度为的分布。它的几率密度函数:
几率密度函数图像以下:
3.分布
设且独立,则称随机变量
的分布, 记
上面这些分布在参数估计的时候, 会用到。固然分布自己可能比较复杂, 尤为是几率密度函数, 到时候会有表可查。
描述性统计
数据集中趋势的度量
1. 平均数
是表示一组数据集中趋势的量数,是指在一组数据中全部数据之和再除以这组数据的个数。
2. 中位数
是指在一组数据,按顺序排列后,居于中间位置的数。中位数描述数据中心位置的数字特征,对于对称分布的数据,均值与中位数比较接近;对于偏态分布的数据,均值与中位数不一样。中位数不受异常值的影响,具备稳健性。
3. 频数
指同一观测值在一组数据中出现的次数(掷骰子中,一共掷了20次,出现数字5的次数)
4. 众数(mode)
就是一组数据中,出现次数最多的那个数(几个数)。下图为均值 VS 中位数 VS 众数
5. 百分位数
百分位数是中位数的推广,将数据按从小到大排列后,对于它的分位点定义为
其中,表示的整数部分。因此,0.5分位数(第50百分位数)就是中位数。0.25分位数称为第一四分位数, 记为, 0.75分位数称为第三四分位数, 记为, 这三个分位数在统计中颇有用的。这个百分位数最多见的就是咱们说的箱线图了:
这个箱线图能够看到数据的下面几个性质:
中心位置:中位数所在的位置是数据集的中心
散布程度:所有数据落在以内, 在区间,,,的数据个数各占1/4。区间较短时表示落在该区间的点较为集中, 反之较为分散。
对称性:若中位数位于箱子的中间位置,则数据分布较为对称。若离的距离较离的距离大,则表示数据分布向左倾斜,反之数据右倾斜,且能看出分布尾部的长短。
箱线图特别适用于比价两个或者两个以上数据集的性质。固然箱线图也能够帮助咱们检测是否存在异常值(不寻常的过大或者太小), 第一四分位数和第三四分位数之间的距离记为IQR, 也就是四分位数间距, 若数据小于IQR或者数据大于IQR,就疑似异常
好了, 关于上面的这些内容,下面看一波python实现了。
首先是列表的元素求均值, 中位数, 众数, 频数:因为众数numpy中没有直接实现的函数, 因此能够调用scipy包的stats或者本身实现:
# 实现众数 但这个不能返回多个众数, 若是有多个众数的话, 须要获得一个众数的次数, 而后根据频数返回多个。def mode(lst):if not lst:returnreturn max(lst, key=lambda v: lst.count(v))a = [1,2,4,5,3,12,12,23,43,52,11,22,22,22]a_mean = np.mean(a) #均值a_med = np.median(a) #中位数a_mode = stats.mode(a)[0][0] # 众数 也是只能返回一个a_mode1 = mode(a)print("a的平均数:",a_mean)print("a的中位数:",a_med)print('a的众数', a_mode, a_mode1)# 频数b = {k: a.count(k) for k in set(a)}b # {1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 43: 1, 12: 2, 11: 1, 52: 1, 22: 3, 23: 1}# 基于频数这个, 再写一个求众数的, 这个能够返回多个def mode_duo(d):if len(d) == 0:returnmax_values = max(d.values()) # 找到了众数对应的次数return [key for key in d if d[key]==max_values]a = [1,2,4,5,3,12,12,23,43,52,11,22,22,22, 1, 1]b = {k: a.count(k) for k in set(a)}mode_duo(b) # 1 22## 固然还能够转成Series而后求众数, 有多个的话也能够都返回来, 这个是最简单的方式pd.Series(a).mode()
下面看看分位点的状况, 把a转成Series, 用describe()函数就能够看到分位点:
pd.Series(a).describe()## 结果:count 16.000000mean 14.750000std 15.316658min 1.00000025% 2.75000050% 11.50000075% 22.000000max 52.000000dtype: float64## 还能够借助plt画出箱型图import matplotlib.pyplot as pltplt.boxplot(pd.Series(a))
下面咱们再看看如何根据IQR去掉异常值:异常值能够截尾, 也能够直接去掉:
"""这里包装了一个异常值处理的代码,能够随便调用"""def outliers_proc(data, col_name, scale=1.5):"""用于截尾异常值, 默认用box_plot(scale=1.5)进行清洗param:data:接收pandas数据格式col_name: pandas列名scale: 尺度"""data_col = data[col_name]Q1 = data_col.quantile(0.25) # 0.25分位数Q3 = data_col.quantile(0.75) # 0,75分位数IQR = Q3 - Q1data_col[data_col < Q1 - (scale * IQR)] = Q1 - (scale * IQR)data_col[data_col > Q3 + (scale * IQR)] = Q3 + (scale * IQR)return data[col_name]num_data['power'] = outliers_proc(num_data, 'power')
上面是截尾异常值, 接收的是pandas的一列, 由于有时候异常值多了的话暴力删除可能不太好。固然下面的代码直接删除掉异常值, 接收的是一个DataFrame, 而后判断有几列都出现异常的时候才删除这个样本。
# 检测异常值并将其舍弃,返回删除的列def detect_and_remove_outliers(df): """这个方法按列检查异常值,并保存所在的行,若是某个行有两个以上的异常值,就删除该行""" outliers = [] col = list(df) #checking interquartile range IQR for all columns for c in col: Q1 = df[c].quantile(0.25) # 0.25分位数 Q3 = df[c].quantile(0.75) IQR = Q3 - Q1 outliers.extend(df[(df[c] Q3 + (1.5 * IQR) )].index) #returning keys for count of occurrences in the list outlier key value pairs return list(k for k,v in Counter(outliers).items() if v >2) remove_list = detect_and_remove_outliers(data)data_remove = data.drop(remove_list, axis=0)
数据离散趋势的度量
表示数据分散(离散,差别)程度的特征量有方差,标准差,极差以及变异系数等。
1. 方差
用来计算每个变量(观察值)与整体均数之间的差别。实际工做中,整体均数难以获得时,应用样本统计量代替整体参数,经校订后,样本方差计算公式:样本方差的开平方成为样本标准差。
2. 极差
数据越分散,极差越大。3. 变异系数是刻画数据相对分散性的一种度量。变异系数只在平均值不为零时有定义,并且通常适用于平均值大于零的状况。变异系数也被称为标准离差率或单位风险。当须要比较两组数据离散程度大小的时候,若是两组数据的测量尺度相差太大,或者数据量纲的不一样,变异系数能够消除测量尺度和量纲的影响。
4. 四分位数差
这个上面整理过了, 样本上、下四分位数之差称为四分位差(或半极差)。
它也是度量样本分散性的重要数字特征,特别对于具备异常值的数据,它做为分散性具备稳健性。
下面是方差, 标准差, 变异系数的numpy实现。
a = [1,2,4,5,3,12,12,23,43,52,11,22,22,22]a_var = np.var(a) #方差a_std1 = np.sqrt(a_var) #标准差a_std2 = np.std(a) #标准差a_mean = np.mean(a) #均值a_cv = a_std2 /a_mean #变异系数print("a的方差:",a_var)print("a的方差:",a_std1)print("a的方差:",a_std2)print("a的变异系数:",a_cv)
5. 偏度与峰度
偏度(skewness):也称为偏态,是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。直观看来就是密度函数曲线尾部的相对长度。偏度刻画的是分布函数(数据)的对称性。关于均值对称的数据其偏度系数为0,右侧更分散的数据偏度系数为正,左侧更分散的数据偏度系数为负。样本偏度系数以下:
正态分布的偏度为0, 两侧尾部长度对称。
左偏
右偏
峰度(peakedness;kurtosis):说明的是分布曲线在平均值处峰值高低的特征数。直观看来,峰度反映了峰部的尖度。样本的峰度是和正态分布相比较而言,若是峰度大于三,峰的形状比较尖,比正态分布峰要陡峭。反之亦然。峰度刻画的是分布函数的集中和分散程度。
峰度系数以下:
下面是一波python实现:
data = list(np.random.randn(10000)) #⽣生成标准正态分布的随机数(10000个)plt.hist(data, 1000, facecolor='g', alpha=0.5) # alpha表示透明度plt.show()s = pd.Series(data) #将数组转化为序列列print('偏度系数',s.skew()) # 0.0024936359680932723print('峰度系数',s.kurt()) # -0.05970174780792892
结果以下:
写到最后
数理统计是从抽样统计的角度去估计样本的整体分布或未知的规律, 首先介绍了数理统计里面的基本概念, 例如整体,个体, 样本等, 而后是统计量与抽样分布, 介绍了经常使用的统计量像均值, 方差, 标准差,中心距,原点矩等。而后介绍了三个很是重要的抽样分布卡方, T和F。最后是描述性统计这块,介绍了数据集中趋势度量, 这里面包括平均数,中位数, 众数, 频数,百分位数等并给出了numpy实现, 而后是离散趋势度量, 方差, 标准差, 极差,四分位点的内容, 而后是峰度和偏度的介绍。