zoukankan      html  css  js  c++  java
  • Python机器学习(六十四)SciPy 统计

    scipy.stats模块包含了统计工具以及概率分析工具。

    分布: 直方图和概率密度函数

    给定随机过程的观测值,其直方图是随机过程的概率密度函数PDF的估计量:

    示例

    import numpy as np
    
    samples = np.random.normal(size=1000)
    bins = np.arange(-4, 5)
    bins
    
    histogram = np.histogram(samples, bins=bins, normed=True)[0]
    bins = 0.5*(bins[1:] + bins[:-1])
    bins
    
    from scipy import stats
    pdf = stats.norm.pdf(bins)  # norm是一个分布对象
    
    import matplotlib.pyplot as plt
    plt.plot(bins, histogram) 
    plt.plot(bins, pdf) 
    
    # plt.savefig('./st1-1.png') # 保存要显示的图片
    plt.show()

    输出

    scipy stats 图1

    如果我们知道随机过程属于一个给定的随机过程家族,比如正态过程,我们就可以对观测值进行最大似然拟合来估计潜在分布的参数。这里我们将一个正态过程与观察到的数据进行拟合:

    loc, std = stats.norm.fit(samples)
    print(loc, std)

    输出

    0.0030534094701394794   1.0143664443890137

    分布对象
    scipy.stats.norm是一个分布对象: scipy.stats中的每个分布都表示为一个对象。例如:正态分布对象,还有PDF, CDF等等。

    平均值、中位数和百分位数

    均值是样本的平均值:

    np.mean(samples) 

    中位数是样本的中间值:

    np.mean(samples) 

    中位数也是百分位数50,因为50%的观察值低于它:

    stats.scoreatpercentile(samples, 50) 

    同样,我们可以计算百分位数90:

    stats.scoreatpercentile(samples, 90)   

    统计检验

    统计检验是一种决策指标。例如,如果我们有两组观测值,假设是高斯过程产生的,我们可以用T检验来判断两组观测值的均值是否存在显著差异:

    a = np.random.normal(0, 1, size=100)
    b = np.random.normal(1, 1, size=10)
    stats.ttest_ind(a, b) 

    输出

    Ttest_indResult(statistic=-1.497229887954618, pvalue=0.1372503797899352)

    产生的输出包括:

    • T统计值/statistic: 是一个数字,其符号与两个随机过程的差值成正比,其大小与该差值的显著性有关。
    • p值/pvalue: 两个过程相同的概率。如果它接近1,这两个过程几乎肯定是相同的。越接近于零,这些过程就越有可能有不同均值。
  • 相关阅读:
    JS兼容性总结
    [妙味DOM]第五课:事件深入应用
    关于iOS开发的学习
    世界经典——乔布斯
    梦想改变世界
    乔布斯在斯坦福大学的演讲
    10步让你成为更优秀的程序员
    程序员的八个级别
    程序员的学习和积累
    哈佛大学二十条训言
  • 原文地址:https://www.cnblogs.com/huanghanyu/p/13170675.html
Copyright © 2011-2022 走看看