【小白学机器学习39】如何用numpy生成总体,生成样本samples

目录

1 目的:研究 样本和总体之间的关系

2 先生成1个理论总体

2.0  下面是关于这一步的完整代码

2.1 一般情况下,我们先生成一个符合正态分布的总体

2.1.1 设置总体 ,或者说生成一个总体

2.2 为什么一定要是一个符合正态分布的总体?

2.2.1 事实上,一般我们很难得到自然界的总体,或者说根本不可能。

2.2.2 我们可以设置一些人造的总体和样本,也是符合样本和总体的关系

2.2.3 那为什么是一定正态分布?

2.2.4 假设为正态分布的好处

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

2.3.1 用图形验证

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

2.3.3  如何确定h0假设?

2.4 从总体中取得样本

2.4.1 用np.random.choice(总体, size=, replace=) 从总体中取得样本

2.4.2 取样1次 sample,或者N次取样 samples(相当于做了n次取样!)

2.4.3 重复取样问题 replace=False = 不放回抽样

2.4.4 样本的容量问题

3 改进一个数据量更多的总体,然后从中取得样本容量稍大的样本

3.0 这一段的完整代码

3.1  总体population的改动

3.2  samples 样本的改动

3.3 额外看了samples 样本数组的均值


1 目的:研究 样本和总体之间的关系

  • 总体:population
  • 样本:sample:
  • 目标:下面想做一个关于样本和总体的试验,也就是从总体里取出1个样本,多个样本,验证样本的参数和总体的参数之间的关系。

2 先生成1个理论总体

2.0  下面是关于这一步的完整代码

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(99)   #设置确定的随机种子,保证每次随机的结果都相同

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

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

plt.plot(array1)

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


##
# 假设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()


#fig2=plt.figure(num=2,figsize=(3, 3))  #新开一个画布
plt.subplot(2,3,3)
for i in range(1,10):
    array3=np.random.choice(array1,size=5,replace=True)
    print(array3)
    plt.plot(array3)

2.1 一般情况下,我们先生成一个符合正态分布的总体

2.1.1 设置总体 ,或者说生成一个总体

  • 先用np.random.normal() 生成一个符合正态分布的数组array
  • 但是这个数组,是否符合正态分布呢?

2.2 为什么一定要是一个符合正态分布的总体?

2.2.1 事实上,一般我们很难得到自然界的总体,或者说根本不可能。

  • 理论上,关于自然界的各种总体我们是不可知,至少是不可全知道的
  • 简单的理由:
  1. 样本数量太大
  2. 样本数量多的无限
  3. 认识全部样本的成本很高很高
  4. 等等
  • 深层次的理由:
  1. 哲学的原因,kant, 我们只能认识物自体/存在的现象,但无法认识物自体本身。

2.2.2 我们可以设置一些人造的总体和样本,也是符合样本和总体的关系

  • 人造的总体数据,从中的取样samples
  • 也是符合自然总体和样本之间的关系的
  • 我们虽然无法直接认识自然总体和样本之间的关系的。
  • 但是我们可以直接认识  人造的总体数据 →取样samples 之间的关系,进而更深的理解自然总体和样本之间的关系。

2.2.3 那为什么是一定正态分布?

  • 首先也不一定是正态分布
  • 也可能是
  1. 正态分布,
  2. 幂律分布
  3. 等等
  • 即使不是正态分布,也要假设总体服从某种分布!

2.2.4 假设为正态分布的好处

  • 正态分布分布很广泛,一般情况下:一个总体服从正态分布的概率最高
  • 当然有些明确的情况下,符合其他分布的概率更好
  • 总体符合正态分布时,其残差也会符合正态分布,后面更好处理

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

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

2.3.1 用图形验证

  • 如果用 plt.plot()  看是否正态分布不那么直观,如果在均值附近波动则是
  • 如果用 plt.hist()  频度图更适合看出是否正态分布
  • 虽然这个样本总体才10个数,但是是用np.random.normal() 生成的数组,确实是符合正态分布的。但是用频度图或者散点图来看,虽然像。但是也不是特别明显/典型。直接的原因还是数据量太少吧。

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

  • 下面的代码中
  •  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 符合正态分布。
# 假设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.3  如何确定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 从总体中取得样本

2.4.1 用np.random.choice(总体, size=, replace=) 从总体中取得样本

  • array3=np.random.choice(array1,size=5,replace=True)

2.4.2 取样1次 sample,或者N次取样 samples(相当于做了n次取样!)

取样1次

array3=np.random.choice(array1,size=5,replace=True)

取样n次

for i in range(1,10):
    array3=np.random.choice(array1,size=5,replace=True)

2.4.3 重复取样问题 replace=False = 不放回抽样

  • replace=False = 不放回抽样
  • replace=True= 放回抽样
  • 一般来说,
  1. 主要看,抽样是否对总体有影响
  2. 如果 样本数量/总体数量= 比值很小,那么 放回抽样 约= 不放回抽样,差别不大
  3. 如果样本数量/总体数量= 比值较大,那么不放回抽样,总体会随着抽样的进行,总体逐渐变小,从而剩下的数量里,抽样的概率实际上在发生变化!
  4. 这也就是抽样影响了总体,这种不放回抽样会对应 超几何分布的道理!而不是二项分布或正态分布

2.4.4 样本的容量问题

  • 这段代码里,样本数量=5
  • 用折线图看不出啥,如果用hist看频率还能好点
  • 样本容量尽量大,样本才会更接近总体


 

3 改进一个数据量更多的总体,然后从中取得样本容量稍大的样本

3.0 这一段的完整代码

代码,主要是基于对第2部分的修改

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(99)   #设置确定的随机种子,保证每次随机的结果都相同
# 
# 先生成一个正态分布的随机数组

array1=np.random.normal(loc=0, scale=1, size=100)
#print(array1)
print()
plt.subplot(2,2,1)
plt.plot(array1)

#用频度图hist才能更容易看出是否正态分布
plt.subplot(2,2,2)
plt.hist(array1)

##
# 假设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()

#新开一个画布, plt.plot显示效果不好,但是plt.hist有点正态的感觉,毕竟多样本多曲线也就是频率图的叠加
array100=np.array([])


plt.subplot(2,2,3)
for i in range(1,15):
    array3=np.random.choice(array1,size=10,replace=True)
    mean3=np.mean(array3)
    print(mean3,end=",")
    #np.append(array100,mean3)
    array100=np.append(array100,mean3)
    print(array3)
    plt.hist(array3)
 
print(array100)
plt.subplot(2,2,4)
plt.hist(array100)

3.1  总体population的改动

  • 用 np.random.norm() 生成的 总体数量到了100
  • 这样无论是 plot 还是hist 都明显看到符合正态分布
  • 用ktest也是检验OK

3.2  samples 样本的改动

  • np.random.choice(array1,size=10,replace=True)
  • 用np.random.choice() 生成的样本数量马,从5修改为了10
  • 明显看到,用hist图,统计多个样本的频度,也更像正态分布

3.3 额外看了samples 样本数组的均值

  • 虽然只有15个样本 (重复取样15次)
  • 但是样本数量的均值明的hist有了点正态分布的样子
  • 如果直接改参数,做100次试验(重复取样100次),这个图更像,下面是对比

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/927790.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是sfp,onu,​为什么PON(​俗称“光猫”​)模块使用SC光纤接口

在现代网络设备中&#xff0c;我们经常会看到SFP或SFP接口的身影&#xff0c;这些接口有时被简称为光口&#xff0c;但这个称呼并不严谨。有些厂商则称之为多功能口或多用途口&#xff0c;然而这对于不了解的人来说可能还是一头雾水。SFP&#xff0c;即Small Form-Factor Plugg…

Java个人博客系统项目文档

项目名称 Java个人博客系统 项目概述 该博客系统是一个多功能的Java应用程序。该系统支持用户发布新文章、浏览他人文章、管理个人文章收藏和删除不再需要的文章。通过该博客系统&#xff0c;用户可以享受一个安全、便捷的在线写作和阅读体验。 运行环境 编程语言&#xff1…

飞凌嵌入式受邀亮相OpenHarmony人才生态大会2024

2024年11月27日&#xff0c;OpenHarmony人才生态大会2024在武汉洲际酒店举行。在这场汇聚了行业精英、技术大咖及生态伙伴的年度盛会上&#xff0c;飞凌嵌入式作为OpenHarmony社区的重要成员受邀出席&#xff0c;并展示了其在OpenHarmony 4.1系统适配方面的最新成果。 在大会的…

SpringMVC:入门案例

从此开始&#xff0c;我们步入SpringMVC的学习。 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架 先来看一下web程序是如何工作的&#xff1a; 因为是异步调用&#xff0c;所以后端不需要返回view视图&#xff0c;将其去除前端如果通过异步调用的方式进行交互&#xff0…

【Java基础】笔记

List和ArrayList区别 public class Arrays_BugDemo {public static void main(String[] args){/** List 是一个固定大小的列表&#xff0c;虽然可以进行查询操作&#xff0c;但不支持添加、删除或修改元素。* 如果需要一个可以动态修改的列表&#xff0c;可以使用 ArrayList 进…

思维导图+实现一个登录窗口界面

QQ2024122-205851 import sys from PyQt6.QtGui import QIcon, QPixmap, QMovie from PyQt6.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton, QLabel, QVBoxLayout# 封装我的窗口类 class LoginWidget(QWidget):# 构造函数def __init__(self):# 初始化父类su…

InterHub:为自动驾驶提供密集互动事件的自然驾驶轨迹数据集

InterHub 是一个为自动驾驶领域设计的自然驾驶轨迹数据集&#xff0c;它通过深入挖掘自然驾驶记录中的密集互动事件而构建。 InterHub 的特点在于其形式化的方法&#xff0c;这使得数据集能够精确描述和提取多智能体之间的互动事件&#xff0c;揭示了现有自动驾驶解决方案的局限…

VSCode修改资源管理器文件目录树缩进(VSCode目录结构、目录缩进、文件目录外观)workbench.tree.indent

文章目录 方法点击左下角小齿轮点击设置点击工作台&#xff0c;点击外观&#xff0c;找到Tree: Indent设置目录树的缩进 方法 点击左下角小齿轮 点击设置 点击工作台&#xff0c;点击外观&#xff0c;找到Tree: Indent设置目录树的缩进 "workbench.tree.indent"默认…

idea 自动导包,并且禁止自动导 *(java.io.*)

自动导包配置 进入 idea 设置&#xff0c;可以按下图所示寻找位置&#xff0c;也可以直接输入 auto import 快速定位到配置。 Add unambiguous imports on the fly&#xff1a;自动帮我们优化导入的包Optimize imports on the fly&#xff1a;自动去掉一些没有用到的包 禁止导…

阅读笔记--知识蒸馏

1.一些基本概念 教师模型&#xff08;Teacher Model&#xff09;&#xff1a;预训练复杂神经网络&#xff0c;高精度&#xff0c;计算存储开销大。学生模型&#xff08;Student Model&#xff09;&#xff1a;简单参数少推理快的模型&#xff0c;目标从教师模型获取知识&#…

永磁同步电机谐波抑制算法(11)——基于矢量比例积分调节器(vector PI controller,VPI controller)的谐波抑制策略

1.前言 相比于传统的谐振调节器&#xff0c;矢量比例积分调节器&#xff08;vector PI controller&#xff0c;VPI controller&#xff09;多一个可调零点&#xff0c;能够实现电机模型的零极点对消。因此VPI调节器也被广泛应用于交流控制/谐波抑制中。 2.参考文献 [1] A. G…

你还没有将 Siri 接入GPT对话功能吗?

由于各种原因&#xff0c;国内ios用户目前无缘自带 AI 功能&#xff0c;但是这并不代表国内 ios 无法接入 AI 功能&#xff0c;接下来手把手带你为iPhone siri 接入 gpt 对话功能。 siri 接入 chatGPT 暂时还无法下载 ChatGPT app&#xff0c;或者没有账号的读者可以直接跳到…

【Point-LIO】基于Ubuntu20.04的ROS1平台的Point-LIO部署Mid-360激光雷达

0、前言 1、代码拉取 2、代码编译运行 文件结构 编译流程&#xff1a; 1、先编译livox_ros_driver2 2、编译整个工程文件 3、运行launch文件&#xff08;livox_ros_driver2&#xff09; 成功启动&#xff1a; 3、实物运行 看得出来&#xff0c;在rviz出了问题&am…

使用 Monaco Editor 实现 ECharts 变量使用功能

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

实验七 用 MATLAB 设计 FIR 数字滤波器

实验目的 加深对窗函数法设计 FIR 数字滤波器的基本原理的理解。 学习用 Matlab 语言的窗函数法编写设计 FIR 数字滤波器的程序。 了解 Matlab 语言有关窗函数法设计 FIR 数字滤波器的常用函数用法。 掌握 FIR 滤波器的快速卷积实现原理。 不同滤波器的设计方法具有不同的优…

泷羽sec-burp功能介绍(1) 学习笔记

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

Unity 模拟百度地图,使用鼠标控制图片在固定区域内放大、缩小、鼠标左键拖拽移动图片

效果展示&#xff1a; 步骤流程&#xff1a; 1.使用的是UGUI&#xff0c;将下面的脚本拖拽到图片上即可。 using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems;public class CheckImage : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragH…

Wend看源码-Durid

项目地址 GitHub - alibaba/druid: 阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品&#xff0c;为监控而生的数据库连接池 简介 Druid连接池是阿里巴巴开源的数据库连接池项目&#xff0c;自2011年开源以来&#xff0c;它因其卓越的…

基于单片机的WIFI、语音、储存、时钟、闹钟、定位系统

所有仿真详情导航&#xff1a; PROTEUS专栏说明-CSDN博客 目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DS1302时钟模块&#xff0c;通过LCD1602显示实时时间&#xff0c;也可以储存时间在AT2DC02中&#xff0c…

什么是GAN?

一、基本概念 生成对抗网络&#xff08;Generative Adversarial Network&#xff0c;GAN&#xff09;是一种由两个神经网络共同组成深度学习模型&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;。这两个网络通过对抗的方式…