【小白学机器学习40】用各种方法去验证总体的数据

目录

[1 先生成一个符合正态分布的总体](#1 先生成一个符合正态分布的总体)

[2 用各种方法去验证总体的数据](#2 用各种方法去验证总体的数据)

[2.1 这个总体合适吗?是个正态分布吗?](#2.1 这个总体合适吗?是个正态分布吗?)

[2.2 用图形验证](#2.2 用图形验证)

[2.3 用假设检验验证是否符合正态分布](#2.3 用假设检验验证是否符合正态分布)

[2.3.1 使用.kstest来进行K-S检验](#2.3.1 使用.kstest来进行K-S检验)

[2.3.2 如何确定h0假设?](#2.3.2 如何确定h0假设?)

[2.4 用正态分布的pdf图,去和总体的hist频度图叠加对比](#2.4 用正态分布的pdf图,去和总体的hist频度图叠加对比)

[2.4.1 叠加2个图](#2.4.1 叠加2个图)

[2.4.2 可见pdf和hist 拟合的很好](#2.4.2 可见pdf和hist 拟合的很好)

[3 下面是全部的代码](#3 下面是全部的代码)


1 先生成一个符合正态分布的总体

  • 先用np.random.normal() 生成一个符合正态分布的数组array

  • 但是这个数组,是否符合正态分布呢?

    array1=np.random.normal(loc=0, scale=1, size=1000)

2 用各种方法去验证总体的数据

2.1 这个总体合适吗?是个正态分布吗?

  • 理论上是符合的,因为我们就是用np.random.normal() 生成的
  • 但是因为2个原因
  1. 因为我们是随机取的,有可能随机性比较大,取得有点偏
  2. 因为我们取得10个数据模拟正态数据,数据量也会比较少

array1=np.random.normal(loc=0, scale=1, size=1000)

2.2 用图形验证

  • 如果用 plt.plot() 看是否正态分布不那么直观,如果在均值附近波动则是
  • 如果用 plt.hist() 频度图更适合看出是否正态分布
  • 因为取了1000个数据,所以, plt.plot() plt.hist() 看起来都能看出来比较像正态分布

2.3 用假设检验验证是否符合正态分布

2.3.1 使用.kstest来进行K-S检验

  • 下面的代码中
  • array1=np.random.normal()
  • 可以使用scipy.stats.kstest来进行K-S检验,对data进行正态分布的验证
  • sp.stats.kstest(data, 'norm') 会返回2个结果:ks_statistic, p_value
  • 尤其是 p_value 就是检验的概率,需要和显著度进行α比较

判断标准

  • h0假设,这个数组符合正态分布
  • 如果p_value() 小于α,就认为是小概率事件,就拒绝h0假设,认为data 不符合正态分布。
  • 如果p_value() 大于α,就不是小概率事件,就接受h0假设,认为data 符合正态分布。
python 复制代码
# 假设data是你需要验证的数组
data =array1
# 使用scipy.stats.kstest来进行K-S检验,对data进行正态分布的验证
ks_statistic, p_value = sp.stats.kstest(data, 'norm')
# 设定显著性水平α,一般取0.05
alpha = 0.05
# 根据p值判断是否接受原假设(数据来自正态分布)
if p_value < alpha:
    print("数据不符合正态分布")
else:
    print("数据符合正态分布")  

array2=np.random.choice(array1,size=5,replace=False)
print(array2)
print()

2.3.2 如何确定h0假设?

sp.stats.kstest(data, 'norm')

关于分布的假设检验,H0的假设一定是服从这个分布,h1假设一定是不符合。

为什么呢?

  • 我感觉是因为h0假设属于这个分布才好往下推导和计算,
  • 因为假设检验本身就是h1不好验证(h1=不是正态,有可能是各种分布,更复杂)
  • 其否命题h0(是正态,就一种确定的分布,而且这种分布只需要知道均值和方差) 更好验证。
  • 因此,这种有关数学和分布的假设检验,
  1. h0假设:往往是那个好计算的假设,比如符合正态分布,两数相等等这种作为h0假设

  2. h1假设,往往是那些不好计算的,比如,不是XX分布但是什么分布呢?

为什么不是看弃真错误是否更严重呢

  • 因为第1类错误=弃真错误=第1类错误,也就是我们设置的显著度α=弃真概率
  • 因为我们是从 设置显著度α 为出发点,那么我们肯定认为 弃真错误概率要越小越好,只是因为第1类错误和2类错误有此消彼长关系,所以也不能追求 弃真概率α无限小,在一个可接受的范围内如5%,1%这以下就可以了。
  • 弃真错误也就是h0 是对的但是我们错误的判断h0是假的,为什么会这样呢?
  • 因为我们本次(假设h0为真时,往下推导)检验出来的概率很小,是个小概率事件,不太可能发生,小于显著度α,因为我们顶着α的弃真错误的可能性,认为h0为假。
  • 所以理论上即使我们这次检验出来的概率小于α,可以拒绝h0, 还是有α的理论上的可能性,我们犯了弃真错误。
  • 所以,包含社会价值的假设检验里h0 往往是那个 弃真错误需要尽量低的作为h0
  1. h0 假设是假币,
  2. h0 假设新药无效,
  3. h0 假设传染口罩是阳性

2.4 用正态分布的pdf图,去和总体的hist频度图叠加对比

2.4.1 叠加2个图

  • 用一个正态分布的pdf图,去和总体的hist频度图去,叠加对比
  • 注意:sp.stats.norm.pdf(x=array6,loc=pop_mean1,scale=pop_std1)
  • pdf曲线的参数,x就是横轴范围,loc是均值,scale是标准差std

画出一个特殊的正态分布的pdf曲线,其均值,方差=总体的均值,方差

array6=np.arange(start=-5,stop=5,step=0.1)

array7=sp.stats.norm.pdf(x=array6,loc=pop_mean1,scale=pop_std1)

我们直接用sp.stats.norm.pdf,生成一个正态分布的pdf曲线

但是这个概率曲线,特点是均值,方差=总体的均值,方差

然后,我们看看,这个pdf和总体的hist是否比较拟合

复制代码
#重新开启一个画布
fig2=plt.figure(num=2,figsize=(5, 5))
#plt.subplot(2,3,3)

# 画出一个特殊的正态分布的pdf曲线,其均值,方差=总体的均值,方差
array6=np.arange(start=-5,stop=5,step=0.1)
array7=sp.stats.norm.pdf(x=array6,loc=pop_mean1,scale=pop_std1)


#显示正态分布的pdf曲线
plt.plot(array6,array7)

#显示这个population整体的hist,叠一起看
#plt.hist(array1)
sns.distplot(array1,kde=False,norm_hist=True)
#sns.histplot(array1,kde=False)

2.4.2 可见pdf和hist 拟合的很好

3 下面是全部的代码

复制代码
import numpy as np
import pandas as pd
import scipy as sp
from matplotlib import pyplot as plt
import seaborn as sns
%precision 3

np.random.seed(100)   #设置确定的随机种子,保证每次随机的结果都相同

# 先生成一个正态分布的随机数组
#fig1=plt.figure(num=1,figsize=(3,3))
plt.subplot(1,2,1)

array1=np.random.normal(loc=0, scale=1, size=1000)
plt.plot(array1)

#fig3=plt.figure(num=3,figsize=(3,3))
plt.subplot(1,2,2)
plt.hist(array1)


##
# 假设data是你需要验证的数组
data =array1
# 使用scipy.stats.kstest来进行K-S检验,对data进行正态分布的验证
ks_statistic, p_value = sp.stats.kstest(data, 'norm')
print(f"这次的检查的p值= {p_value}")
# 设定显著性水平α,一般取0.05
alpha = 0.05
# 根据p值判断是否接受原假设(数据来自正态分布)
if p_value < alpha:
    print("数据不符合正态分布")
else:
    print("数据符合正态分布")  

    
#重新开启一个画布
fig2=plt.figure(num=2,figsize=(5, 5))
#plt.subplot(2,3,3)

# 画出一个特殊的正态分布的pdf曲线,其均值,方差=总体的均值,方差
array6=np.arange(start=-5,stop=5,step=0.1)
array7=sp.stats.norm.pdf(x=array6,loc=pop_mean1,scale=pop_std1)


#显示正态分布的pdf曲线
plt.plot(array6,array7)

#显示这个population整体的hist,叠一起看
#plt.hist(array1)
sns.distplot(array1,kde=False,norm_hist=True)
#sns.histplot(array1,kde=False)
相关推荐
无心水4 小时前
【分布式利器:腾讯TSF】10、TSF故障排查与架构评审实战:Java架构师从救火到防火的生产哲学
java·人工智能·分布式·架构·限流·分布式利器·腾讯tsf
小鸡吃米…10 小时前
机器学习 - K - 中心聚类
人工智能·机器学习·聚类
好奇龙猫11 小时前
【AI学习-comfyUI学习-第三十节-第三十一节-FLUX-SD放大工作流+FLUX图生图工作流-各个部分学习】
人工智能·学习
沈浩(种子思维作者)11 小时前
真的能精准医疗吗?癌症能提前发现吗?
人工智能·python·网络安全·健康医疗·量子计算
minhuan11 小时前
大模型应用:大模型越大越好?模型参数量与效果的边际效益分析.51
人工智能·大模型参数评估·边际效益分析·大模型参数选择
Cherry的跨界思维11 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
MM_MS11 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
ASF1231415sd11 小时前
【基于YOLOv10n-CSP-PTB的大豆花朵检测与识别系统详解】
人工智能·yolo·目标跟踪
水如烟12 小时前
孤能子视角:“意识“的阶段性回顾,“感质“假说
人工智能
Carl_奕然12 小时前
【数据挖掘】数据挖掘必会技能之:A/B测试
人工智能·python·数据挖掘·数据分析