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

news2024/12/23 13:30:44

目录

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次),这个图更像,下面是对比

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“指标管理系统”是什么?企业如何搭建指标管理系统?

在当今数字化时代&#xff0c;数据已成为企业决策的重要依据。然而&#xff0c;海量数据中如何筛选出关键指标&#xff0c;并对其进行有效管理&#xff0c;成为了众多企业面临的难题。为此&#xff0c;指标管理系统应运而生&#xff0c;它旨在帮助企业规范化定义、统一管理和高…

网际协议(IP)与其三大配套协议(ARP、ICMP、IGMP)

网际协议&#xff08;Internet Protocol&#xff0c;IP&#xff09;&#xff0c;又称互联网协议。是OSI中的网络层通信协议&#xff0c;用于跨网络边界分组交换。它的路由功能实现了互联互通&#xff0c;并从本质上建立了互联网。网际协议IP是 TCP/IP 体系中两个最主要的协议之…

运维工作常用Shell脚本(Commonly Used Shell Scripts for Operation and Maintenance Work)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

机器学习8-决策树CART原理与GBDT原理

Gini 系数 和Gini 系数增益 CART决策树算法流程举例 该篇文章对于CART的算法举例讲解&#xff0c;一看就懂。 决策树(Decision Tree)—CART算法 同时也可以观看视频 分类树 GBDT原理举例 可以看如下示例可以理解GBDT的计算原理 用通俗易懂的方式讲解&#xff1a; GBDT算法及…

oracle中删除指定前缀的表

近期接手做的项目&#xff0c;发觉数据库中有许多多余的表。究其原因&#xff0c;应该是同事贪图方便&#xff0c;将过去做过的项目复制粘贴&#xff0c;然后修修改改。包括数据库也是克隆过来的&#xff0c;然后又没有删除本项目多余的表&#xff0c;结果经过几个轮回&#xf…

JAVA篇10 —— 常用类WrapperStringMathArraysSystemBigIntegerBigDecimal日期

欢迎来到我的主页&#xff1a;【一只认真写代码的程序猿】 本篇文章收录于专栏【小小爪哇】 如果这篇文章对你有帮助&#xff0c;希望点赞收藏加关注啦~ 目录 1 包装类 1.1 包装类和String 1.2 int&char包装类常用方法 2 String类 3 Math 类 4 Arrays类 5 System类…

tauri使用github action打包编译多个平台arm架构和inter架构包踩坑记录

这些error的坑&#xff0c;肯定是很多人不想看到的&#xff0c;我的开源软件PakePlus是使用tauri开发的&#xff0c;PakePlus是一个界面化将任何网站打包为轻量级跨平台软件的程序&#xff0c;利用Tauri轻松构建轻量级多端桌面应用和多端手机应用&#xff0c;为了实现发布的时候…

通义灵码走进北京大学创新课堂丨阿里云云原生 10 月产品月报

云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》&#xff0c;从趋势热点、产品新功能、服务客户、开源与开发者动态等方面&#xff0c;为企业提供数字化的路径与指南。 趋势热点 &#x1f947; 通义灵码走进北京大学创新课堂&#xff0c;与 400…

鸿蒙开发-HMS Kit能力集(地图服务、华为支付服务)

地图服务 Map Kit&#xff08;地图服务&#xff09;是鸿蒙生态下的一个地图服务&#xff0c;为开发者提供强大而便捷的地图能力&#xff0c;助力全球开发者实现个性化地图呈现、地图搜索和路线规划等功能&#xff0c;轻松完成地图构建工作。 Map Kit提供了千万级别的 Poi&…

【四轴】基于IIC通信读写MPU6050寄存器

1. 基本原理 在这篇【四轴】软件IIC通信的实现 – Dukis Blog博客中&#xff0c;我介绍了软件IIC的实现方式。而MPU6050&#xff0c;正是一种通过IIC进行通信的传感器外设。 1.1 什么是MPU6050 MPU6050 是 InvenSense 公司推出的一款6 轴惯性传感器模块&#xff0c;广泛应用于姿…

arkTS:使用ArkUI实现用户信息的持久化管理与自动填充(PersistentStorage)

arkUI&#xff1a;使用ArkUI实现用户信息的持久化管理与自动填充&#xff08;PersistentStorage&#xff09; 1 主要内容说明2 例子2.1 登录页2.1.1登陆页的相关说明2.1.1.1 持久化存储的初始化2.1.1.2 输入框2.1.1.3 记住密码选项2.1.1.4 登录按钮的逻辑2.1.1.5 注册跳转 2.1.…

基于SpringBoot+Vue的美妆购物网站

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

【SpringBoot+Vue】x-admin管理系统跟做

技术栈 前端技术说明Vue前端框架Vuex全局状态管理框架ElementUI前端UI框架Axios前端HTTP框架vue-element-admin项目脚手架 后端技术说明SpringBoot容器MVC框架MyBatisORM框架MyBatis-plusMyBatis增强工具Redis非关系型数据库 数据库准备 SET NAMES utf8mb4; SET FOREIGN_KE…

【Docker】Docker配置远程访问

配置Docker的远程访问&#xff0c;你需要按照以下步骤进行操作&#xff1a; 1. 在Docker宿主机上配置Docker守护进程监听TCP端口 Docker守护进程默认只监听UNIX套接字&#xff0c;要实现远程访问&#xff0c;需要修改配置以监听TCP端口。 ‌方法一&#xff1a;修改Docker服务…

LeetCode hot100(自用背诵、部分题目、非最优解)

点击题目可以跳转到LeetCode 哈希 两数之和 public int[] twoSum(int[] nums, int target) {int lengthnums.length;int[] ans new int[2];for (int i 0; i <length-1 ; i) {for (int j i1; j < length; j) {if(nums[i]nums[j]target){ans[0]i;ans[1]j;}}}return an…

Android -- 简易音乐播放器

Android – 简易音乐播放器 播放器功能&#xff1a;* 1. 播放模式&#xff1a;单曲、列表循环、列表随机&#xff1b;* 2. 后台播放&#xff08;单例模式&#xff09;&#xff1b;* 3. 多位置同步状态回调&#xff1b;处理模块&#xff1a;* 1. 提取文件信息&#xff1a;音频文…

基础Web安全|SQL注入

基础Web安全 URI Uniform Resource Identifier&#xff0c;统一资源标识符&#xff0c;用来唯一的标识一个资源。 URL Uniform Resource Locator&#xff0c;统一资源定位器&#xff0c;一种具体的URI&#xff0c;可以标识一个资源&#xff0c;并且指明了如何定位这个资源…

ESG研究报告白皮书与ESG治理报告合集(2020-2023年)

一.资料范围&#xff1a;&#xff08;1&#xff09;ESG白皮书及指南;&#xff08;2&#xff09;ESG研究报告,&#xff08;3&#xff09;ESG治理报告分析&#xff08;4&#xff09;上市公司ESG报告&#xff08;知名企业&#xff09; 二、资料用途&#xff1a;可以分析研究企业E…

WPF指示灯的实现方式

WPF指示灯的实现方式 样式 XAML <Button x:Name"Btn1" Width"25" Height"25" Grid.Row"0" Grid.Column"1" Margin"10 5 5 5 "><Button.Template><ControlTemplate TargetType"Button"…

初识QT第一天

思维导图 利用Qt尝试做出原神登陆界面 import sys from PyQt6.QtGui import QIcon, QPixmap, QMovie from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QLineEdit# 封装原神窗口类 class Genshin(QWidget):# 构造函数def __init__(self):# 初始化父类…