zoukankan      html  css  js  c++  java
  • 统计学(检验、分布)的 python(numpy/pandas/scipy) 实现

    1. t 检验:两个分布的差异

    多维数据集的每一个属性列都可理解为一个特征的实例。两个分布的距离:每一个属性列代表的特征跟标签列之间的相关性。

    t 检验用 t 分布理论来推论差异发生的概率,以比较两个分布的平均数之间的差异是否显著。主要用于样本含量小(n<30),总体标准差 σ 未知的正态分布。

    独立样本 t 检验统计量如下计算:

    t=X¯1X¯2S12n1+S22n2,Sx2=(xμ)2n1

    尤其注意,这里的方差是无偏估计(np.std(x, ddof=1)

    # 通过字典构造 DataFrame
    data = {'Category': ['cat2', 'cat1', 'cat2', 'cat1', 
                         'cat2', 'cat1', 'cat2', 'cat1', 'cat1', 'cat1', 'cat2'],
            'values': [1, 2, 3, 1, 2, 3, 1, 2, 3, 5, 1]}
    
    data_df = DataFrame(data)
    # 计算各自的均值
    >> data_df.groupby('Category').mean()
    cat1      2.666667
    cat2      1.600000
    
    cat1 = data_df[data_df['Category'] == 'cat1']
        # data_df.Category == 'cat1'
    cat2 = data_df[data_df['Category'] == 'cat2']
    
    from scipy.stats import ttest_ind
    # 计算二者的 t 检验统计量,及对应的 p-value
    >> ttest_ind(cat1['values'], cat2['values'])
    Ttest_indResult(statistic=1.4927289925706944, pvalue=0.16970867501294376)
    
    • scipy 下的 t-test 计算方法

      def t_test(x1, x2):
          n1, n2 = x1.size, x2.size
          mu1, mu2 = np.mean(x1), np.mean(x2)
          s1, s2 = np.std(x1, ddof=1), np.std(x2, ddof=1)
          num = np.abs(mu1 - mu2)
          denom = np.sqrt((((n1-1)*s1**2 + (n2-1)*s2**2)/(n1+n2-2))*(1/n1+1/n2))
          with np.errstate(divide='ignore'):
              return num / denom
  • 相关阅读:
    通过注册表读取设置字体
    StretchBlt
    PatBlt
    如何用MaskBlt实现两个位图的合并,从而实现背景透明
    输出旋转字体
    用字体开透明窟窿
    输出空心字体
    光滑字体
    画贝塞尔曲线
    一些点运算函数
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9421003.html
Copyright © 2011-2022 走看看