当前位置: 首页 > news >正文

【小白学机器学习41】如何从正态分布的总体中去抽样?比较不同的取样方差的差别

目录

1 目标:使用2种方法,去从正态分布的总体中去抽样,获得样本

1.1 step1: 首先,逻辑上需要先有符合正态分布的总体population

1.2 从总体中取得样本,模拟抽样的过程

2 从正态分布抽样的方法1

3  从正态分布抽样的方法2

4 完整代码

5 如果从总体里多次取样,用不同的方法多次取样的差别

5.1 使用np.random.choice() 从一个总体数组里多次取样

5.2  直接在循环里,每次取样一次 sp.stats.norm.rvs(loc,scale,size)

5.3  循环里生成1个sp.stats.norm,循环里每次.rvs(size)

5.4 比较3个多次循环后,多次取样的均值的均值


1 目标:使用2种方法,去从正态分布的总体中去抽样,获得样本

import numpy as np
import pandas as pd
import scipy as sp

1.1 step1: 首先,逻辑上需要先有符合正态分布的总体population

  • 都需要先生成一个 符合正态分布的 “总体population”
  • 我们设置的总体
  • 可以是无限的,或者是有限但是数量较大
  • 但是必须设置的是,总体的参数,mean=?  std=?
  • np.random.normal(loc=0, scale=1, size=1000)
  • sp.stats.norm.rvs(loc=0,scale=1,size=10)

1.2 从总体中取得样本,模拟抽样的过程

  • np.random.choice(array1,size=10,replace=False)
  • sp.stats.norm.rvs(loc=0,scale=1,size=10)

2 从正态分布抽样的方法1

  • # 先用np.random.normal一个正态分布的随机数组 ,然后再用np.random.choice()去抽样
  • array1=np.random.normal(loc=0, scale=1, size=1000)
  • array2=np.random.choice(array1,size=10,replace=False)
     

3  从正态分布抽样的方法2

  • # 直接使用sp.stats.norm.rvs() 从正态分布的总体中去生成样本,抽样
  • array3=sp.stats.norm.rvs(loc=0,scale=1,size=10)


4 完整代码

import numpy as np
import pandas as pd
import scipy as sp
from matplotlib import pyplot as plt
import seaborn as sns
%precision 3# 从正态分布抽样的方法1
# 先用np.random.normal一个正态分布的随机数组 ,然后再用np.random.choice()去抽样
np.random.seed(100)   #设置确定的随机种子,保证每次随机的结果都相同array1=np.random.normal(loc=0, scale=1, size=1000)
array2=np.random.choice(array1,size=10,replace=False)
print(array2)
print(np.mean(array2))
print()# 直接使用sp.stats.norm.rvs() 从正态分布的总体中去生成样本,抽样
array3=sp.stats.norm.rvs(loc=0,scale=1,size=10)
print(array3)
print(np.mean(array3))
print()

5 如果从总体里多次取样,用不同的方法多次取样的差别

5.1 使用np.random.choice() 从一个总体数组里多次取样

  • 1>---生成一个总体的正态分布,且生成数量
  • array1=sp.stats.norm.rvs(loc=0,scale=1,size=1000)
  • 2>多次取样时,每次从之前的总体里,选择一定数量作为样本
  • array2=np.random.choice(array1,size=10,replace=False)
  • 最后,多次取样的均值 mean(array2)=-0.01827
import numpy as np
import pandas as pd
import scipy as sp
from matplotlib import pyplot as plt
import seaborn as sns
#%precision 3np.random.seed(100)
count1=999
#生成一个总体的正态分布,且生成数量
array1=sp.stats.norm.rvs(loc=0,scale=1,size=1000)
#print(array1)sample_mean_array=np.zeros(count1)for i in range(0,count1,1):#每次从之前的总体里,选择一定数量作为样本array2=np.random.choice(array1,size=10,replace=False)sample_mean_array[i]=np.mean(array2)#print(sample_mean_array)
print(f"取样{count1}次的均值={np.mean(sample_mean_array)}")

5.2  直接在循环里,每次取样一次 sp.stats.norm.rvs(loc,scale,size)

  • 在循环体内部
  • 每次循环时,都取样一次
  •  array1=sp.stats.norm.rvs(loc=0,scale=1,size=10)
  • 最后,多次取样的均值 mean(array2)=-0.00136

import numpy as np
import pandas as pd
import scipy as sp
from matplotlib import pyplot as plt
import seaborn as sns
%precision 3np.random.seed(100)
count1=999sample_mean_array=np.zeros(count1)
for i in range(0,count1,1):#直接每次循环时生存一个新的生态分布,作为样本array1=sp.stats.norm.rvs(loc=0,scale=1,size=10)sample_mean_array[i]=np.mean(array1)#print(sample_mean_array)
print(f"取样{count1}次的均值={np.mean(sample_mean_array)}")

5.3  循环里生成1个sp.stats.norm,循环里每次.rvs(size)

  • 1>---#生成一个总体的正态分布,先不生成数量
  • population1=sp.stats.norm(loc=0,scale=1)
  • 2>---每次循环时,取1次数量,作为样本
  • array1=population1.rvs(size=10)
  • 最后,多次取样的均值 mean(array2)=-0.00136
import numpy as np
import pandas as pd
import scipy as sp
from matplotlib import pyplot as plt
import seaborn as sns
%precision 3np.random.seed(100)
count1=999#生成一个总体的正态分布,先不生成数量
population1=sp.stats.norm(loc=0,scale=1)
sample_mean_array=np.zeros(count1)for i in range(0,count1,1):#每次循环时,取1次数量,作为样本array1=population1.rvs(size=10)sample_mean_array[i]=np.mean(array1)#print(sample_mean_array)
print(f"取样{count1}次的均值={np.mean(sample_mean_array)}")

5.4 比较3个多次循环后,多次取样的均值的均值

  • 用random.choice在确定的总体里多次取样,其均值的均值 mean(array2)=-0.01827
  • 另外两种方法,多次取样的均值 mean(array2)=-0.00136
  • |-0.01827|>>|-0.00136|
  • 数量级的差别,第一种方法的均值的均值 大了第2种10倍!
  • 而总体的均值,是我们自己设计,都是0,sp.stats.norm(loc=0,scale=1)
  • 说明第一种方法最差,后两种方法差不多
  • 因此,以后注意,少用第一种方法从样本里取样!(除非总体确定了已经是固定的)

  • 原因,怀疑,第一次random.choice() 取样是在一个确定数量/数量固定的 总体population里进行取样,因此其 多次样本的均值 偏离 总体均值比较远。
  • 后两个方差,便宜总体均值不远,更合理。


http://www.mrgr.cn/news/78893.html

相关文章:

  • LeetCode 64. 最小路径和(HOT100)
  • vue2+svg+elementui实现花瓣图自定义el-select回显色卡图片
  • 网络命令配置
  • Spring Boot开发——整合MyBatis的几种SQL写法
  • Linux中dos2unix详解
  • 中断基础概念 与 Linux底半部实现机制总结
  • 3分钟快速掌握——c语言【流程控制】if else选择语句,for while循环,goto语句
  • java基础概念46-数据结构1
  • Linux命令进阶·如何切换root以及回退、sudo命令、用户/用户组管理,getent命令以及解决创建用户不显示问题和Ubuntu不显示用户名只显示“$“符号问题
  • 爬虫专栏第二篇:Requests 库实战:从基础 GET 到 POST 登录全攻略
  • 长安汽车嵌入式面试题及参考答案
  • 开源鸿蒙system ability manager关键属性解析
  • 爬虫专栏第一篇:深入探索爬虫世界:基础原理、类型特点与规范要点全解析
  • linux网络抓包工具
  • PyQt6思维导图和实例(登录帝国时代)
  • Linux 35.6 + JetPack v5.1.4@DeepStream安装
  • echarts的双X轴,父级居中的相关配置
  • IDEA 配置鼠标悬浮后显示方法注释 javaDoc
  • EasyMedia播放rtsprtmp视频流(flvhls)
  • 运输层总结
  • Win10+Ubuntu20.04双系统重装Ubuntu22.04单系统
  • Hive学习基本概念
  • 在全志 T113-S3 开发板上运行 AWTK
  • Rust : 生成日历管理markdown文件的小工具
  • 人体热释电传感器
  • 从最浅层剖析C语言————第六节(深入了解数组传参、嵌套调用以及链式访问)