机器学习数学|偏度与峰度及其python实现

机器学习中的数学

觉得有用的话,欢迎一起讨论相互学习~Follow Me

原创文章,如需转载请保留出处

本博客为七月在线邹博老师机器学习数学课程学习笔记

  • 对于随机变量X,X的K阶原点矩为 \[E(X^{k})\]
  • X的K阶中心矩为 \[E([X-E(X)]^{k})\]
  • 期望实际上是随机变量X的1阶原点矩,方差实际上是随机变量X的2阶中心矩
  • 变异系数(Coefficient of Variation):标准差与均值(期望)的比值称为变异系数,记为C.V
  • 偏度Skewness(三阶)
  • 峰度Kurtosis(四阶)

偏度与峰度

利用matplotlib模拟偏度和峰度

计算期望和方差

import matplotlib.pyplot as plt
import math
import numpy as np
def calc(data):
    n=len(data) # 10000个数
    niu=0.0 # niu表示平均值,即期望.
    niu2=0.0 # niu2表示平方的平均值
    niu3=0.0 # niu3表示三次方的平均值
    for a in data:
        niu += a
        niu2 += a**2
        niu3 += a**3
    niu /= n
    niu2 /= n
    niu3 /= n
    sigma = math.sqrt(niu2 - niu*niu)
    return [niu,sigma,niu3]
  • \[niu=\bar{X_{i}}即期望\]
  • \[niu2=\frac{\sum_{i=1}^{n}X_{i}^{2}}{n}\]
  • \[niu3=\frac{\sum_{i=1}^{n}X_{i}^{3}}{n}\]
  • sigma表示标准差公式为\[\sigma=\sqrt{E(x^{2})-E(x)^{2}}\] \[用python语言表示即为sigma = math.sqrt(niu2 - niu*niu)\]
  • 返回值为[期望,标准差,\(E(x^{3})\)]
  • PS:我们知道期望E(X)的计算公式为\[E(X)=\sum_{i=1}^{n}p(i)x(i)-----(1)\]这里我们X一个事件p(i)表示事件出现的概率,x(i)表示事件所给予事件的权值.
  • 我们直接利用\[E(x)=\bar{X_{i}}----(2)\] 表示期望应当明确
  1. (2)公式中\(X_{i}是利用numpy中的伪随机数生成的,其均值用于表示期望\)
  2. 此时(1)公式中对事件赋予的权值默认为1,即公式的本来面目为\[E(x)=\bar{(X_{i}*1)}\]

计算偏度和峰度

def calc_stat(data):
    [niu, sigma, niu3]=calc(data)
    n=len(data)
    niu4=0.0 # niu4计算峰度计算公式的分子
    for a in data:
        a -= niu
        niu4 += a**4
    niu4 /= n

    skew =(niu3 -3*niu*sigma**2-niu**3)/(sigma**3) # 偏度计算公式
    kurt=niu4/(sigma**4) # 峰度计算公式:下方为方差的平方即为标准差的四次方
    return [niu, sigma,skew,kurt]

利用matplotlib模拟图像

if __name__ == "__main__":
    data =  list(np.random.randn(10000)) # 满足高斯分布的10000个数
    data2 = list(2*np.random.randn(10000))  # 将满足好高斯分布的10000个数乘以两倍,方差变成四倍
    data3 =[x for x in data if x>-0.5] # 取data中>-0.5的值
    data4 = list(np.random.uniform(0,4,10000)) # 取0~4的均匀分布
    [niu, sigma, skew, kurt] = calc_stat(data)
    [niu_2, sigma2, skew2, kurt2] = calc_stat(data2)
    [niu_3, sigma3, skew3, kurt3] = calc_stat(data3)
    [niu_4, sigma4, skew4, kurt4] = calc_stat(data4)
    print (niu, sigma, skew, kurt)
    print (niu2, sigma2, skew2, kurt2)
    print (niu3, sigma3, skew3, kurt3)
    print (niu4, sigma4, skew4, kurt4)
    info = r‘$\mu=%.2f,\ \sigma=%.2f,\ skew=%.2f,\ kurt=%.2f$‘ %(niu,sigma, skew, kurt) # 标注
    info2 = r‘$\mu=%.2f,\ \sigma=%.2f,\ skew=%.2f,\ kurt=%.2f$‘ %(niu_2,sigma2, skew2, kurt2)
    info3 = r‘$\mu=%.2f,\ \sigma=%.2f,\ skew=%.2f,\ kurt=%.2f$‘ %(niu_3,sigma3, skew3, kurt3)
    plt.text(1,0.38,info,bbox=dict(facecolor=‘red‘,alpha=0.25))
    plt.text(1,0.35,info2,bbox=dict(facecolor=‘green‘,alpha=0.25))
    plt.text(1,0.32,info3,bbox=dict(facecolor=‘blue‘,alpha=0.25))
    plt.hist(data,100,normed=True,facecolor=‘r‘,alpha=0.9)
    plt.hist(data2,100,normed=True,facecolor=‘g‘,alpha=0.8)
    plt.hist(data4,100,normed=True,facecolor=‘b‘,alpha=0.7)
    plt.grid(True)
    plt.show()

  • 图形表示的是利用numpy随机数生成函数生成的随机数的统计分布,利用matplotlib.pyplot.hist绘制的直方图.即是出现数字的分布统计,并且是归一化到0~1区间后的结果.
  • 即横轴表示数字,纵轴表示在1000个随机数中横轴对应的数出现的百分比.若不使用归一化横轴表示数字(normed=False),纵轴表示出现的次数.
  • 若不使用归一化--纵轴表示出现次数

  • 关于matplotlib.pyplot.hist函数
n, bins, patches = plt.hist(arr, bins=10, normed=0, facecolor=‘black‘, edgecolor=‘black‘,alpha=1,histtype=‘b‘)
hist的参数非常多,但常用的就这六个,只有第一个是必须的,后面四个可选

arr: 需要计算直方图的一维数组

bins: 直方图的柱数,可选项,默认为10

normed: 是否将得到的直方图向量归一化。默认为0

facecolor: 直方图颜色

edgecolor: 直方图边框颜色

alpha: 透明度

histtype: 直方图类型,‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’

返回值 :

n: 直方图向量,是否归一化由参数normed设定

bins: 返回各个bin的区间范围

patches: 返回每个bin里面包含的数据,是一个list

关于matplotlib.pyplot.hist函数

时间: 2024-08-30 14:48:14

机器学习数学|偏度与峰度及其python实现的相关文章

机器学习经典算法详解及Python实现---朴素贝叶斯分类及其在文本分类、垃圾邮件检测中的应用

摘要: 朴素贝叶斯分类是贝叶斯分类器的一种,贝叶斯分类算法是统计学的一种分类方法,利用概率统计知识进行分类,其分类原理就是利用贝叶斯公式根据某对象的先验概率计算出其后验概率(即该对象属于某一类的概率),然后选择具有最大后验概率的类作为该对象所属的类.总的来说:当样本特征个数较多或者特征之间相关性较大时,朴素贝叶斯分类效率比不上决策树模型:当各特征相关性较小时,朴素贝叶斯分类性能最为良好.另外朴素贝叶斯的计算过程类条件概率等计算彼此是独立的,因此特别适于分布式计算.本文详述了朴素贝叶斯分类的统计学

机器学习经典算法具体解释及Python实现--线性回归(Linear Regression)算法

(一)认识回归 回归是统计学中最有力的工具之中的一个. 机器学习监督学习算法分为分类算法和回归算法两种,事实上就是依据类别标签分布类型为离散型.连续性而定义的. 顾名思义.分类算法用于离散型分布预測,如前面讲过的KNN.决策树.朴素贝叶斯.adaboost.SVM.Logistic回归都是分类算法.回归算法用于连续型分布预測.针对的是数值型的样本,使用回归.能够在给定输入的时候预測出一个数值.这是对分类方法的提升,由于这样能够预測连续型数据而不不过离散的类别标签. 回归的目的就是建立一个回归方程

机器学习经典算法详解及Python实现--基于SMO的SVM分类器

原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector machine,简称SVM.通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解. (一)理解SVM基本原理 1,SVM的本质--分类 给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些

机器学习经典算法详解及Python实现--线性回归(Linear Regression)算法

(一)认识回归 回归是统计学中最有力的工具之一.机器学习监督学习算法分为分类算法和回归算法两种,其实就是根据类别标签分布类型为离散型.连续性而定义的.顾名思义,分类算法用于离散型分布预测,如前面讲过的KNN.决策树.朴素贝叶斯.adaboost.SVM.Logistic回归都是分类算法:回归算法用于连续型分布预测,针对的是数值型的样本,使用回归,可以在给定输入的时候预测出一个数值,这是对分类方法的提升,因为这样可以预测连续型数据而不仅仅是离散的类别标签. 回归的目的就是建立一个回归方程用来预测目

偏度和峰度的计算

偏度(skewness)和峰度(kurtosis): 偏度能够反应分布的对称情况,右偏(也叫正偏),在图像上表现为数据右边脱了一个长长的尾巴,这时大多数值分布在左侧,有一小部分值分布在右侧. 峰度反应的是图像的尖锐程度:峰度越大,表现在图像上面是中心点越尖锐.在相同方差的情况下,中间一大部分的值方差都很小,为了达到和正太分布方差相同的目的,必须有一些值离中心点越远,所以这就是所说的“厚尾”,反应的是异常点增多这一现象. 偏度的定义: 样本X的偏度为样本的三阶标准矩 其中$\mu$是均值,$\de

机器学习经典算法具体解释及Python实现--K近邻(KNN)算法

(一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值之间的距离,然后选取K(K>=1)个距离近期的邻居进行分类推断(投票法)或者回归.假设K=1.那么新数据被简单分配给其近邻的类.KNN算法算是监督学习还是无监督学习呢?首先来看一下监督学习和无监督学习的定义.对于监督学习.数据都有明白的label(分类针对离散分布,回归针对连续分布),依据机器学习产

机器学习经典算法详解及Python实现--聚类及K均值、二分K-均值聚类算法

摘要 聚类是一种无监督的学习(无监督学习不依赖预先定义的类或带类标记的训练实例),它将相似的对象归到同一个簇中,它是观察式学习,而非示例式的学习,有点像全自动分类.说白了,聚类(clustering)是完全可以按字面意思来理解的--将相同.相似.相近.相关的对象实例聚成一类的过程.机器学习中常见的聚类算法包括 k-Means算法.期望最大化算法(Expectation Maximization,EM,参考"EM算法原理").谱聚类算法(参考机器学习算法复习-谱聚类)以及人工神经网络算法

机器学习经典算法详解及Python实现--CART分类决策树、回归树和模型树

摘要: Classification And Regression Tree(CART)是一种很重要的机器学习算法,既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Regression Tree),本文介绍了CART用于离散标签分类决策和连续特征回归时的原理.决策树创建过程分析了信息混乱度度量Gini指数.连续和离散特征的特殊处理.连续和离散特征共存时函数的特殊处理和后剪枝:用于回归时则介绍了回归树和模型树的原理.适用场景和创建过程.个人认为,回归树和模型树

机器学习-朴素贝叶斯原理及Python实现

机器学习-朴素贝叶斯原理及Python实现 贝叶斯公式 P(A|B) = (P(B|A)P(A))/P(B) 举例:苹果10个,有2个黄色:梨10个,有6个黄色,求拿出一个黄色水果,是苹果的概率. 代入公式: P(苹果|黄色) = (P(黄色|苹果)P(苹果))/P(黄色) P(黄色) = (2+6)/20 = 2/5 P(苹果) = 10/20 = 1/2 = 0.5 P(黄色|苹果)=1/5 P(黄色|苹果)P(苹果) = P(黄色,苹果) = 1/5*1/2 = 1/10 = 0.1 P(