python做线性回归统计推断提取参数_概率分析方法与推断统计(来自我写的python书)...
在数据分析统计的场景里,常用的方法除了描述性统计方法外,还有推断统计方法,如果再从工作性质上来划分,推断统计包含了参数估计和假设验证这两方面的内容。而推断统计用到了很多概率统计方法,所以本小节在介绍推断统计的内容前,还将讲述一些常用的概率统计方法。
1 分析收盘价,绘制小提琴图
小提琴图综合了箱状图与核密度图的特性,从箱状图里能看出数据的各分位数,而从核密度图里,能看出样本数据的分布情况,即每个数值点上样本的密度。
从统计学的角度来分析,样本密度越大的数值区域,接下来的数据出现在这里的概率也就越大。在如下的ViolinplotDemo.py范例中,将通过matplotlib库的violinplot方法,绘制基于股票收盘价的小提琴图,同时也将对比性地绘制出箱状图,从中大家能直观地理解“核密度”的概念。
1import pandas as pd
2import matplotlib.pyplot as plt
3filename='D:\\work\\data\\ch9\\6007852019-06-012020-01-31.csv'
4df = pd.read_csv(filename,encoding='gbk',index_col=0)
5fig = plt.figure()
6plt.rcParams['font.sans-serif']=['SimHei']
7axViolin = fig.add_subplot(121)
8axViolin.violinplot(df['Close'],showmeans=True,showmedians=True)
9axViolin.set_title('描述收盘价的小提琴图')
10axViolin.grid(True) # 带网格线
11axBoxplot = fig.add_subplot(122)
12axBoxplot.boxplot(df['Close'])
13axBoxplot.set_title('描述收盘价的箱状图')
14axBoxplot.grid(True) # 带网格线
15plt.show()
在第4行里,从之前范例准备好的csv文件里得到了股票数据。在第7行和第11行里,通过add_subplot方法,绘制了两个子图。
在第一个子图里,通过violinplot方法,根据第一个参数df[‘Close’],绘制了基于股票收盘价的小提琴图,其中showmeans参数表示是否要绘制数据平均线,而showmedians参数则表示是否要绘制数据的中位线,即第50的百分位数。而在第二个子图里,则通过第12行的boxplot方法,绘制基于收盘价的箱状图,上述代码的运行效果如下图所示。
对比左右两个子图,能发现两者的中位线是一致的,而且左边小提琴图里,在约15.4的位置还有一条样本数据平均线的图。此外,小提琴图里,能看到从上往下蓝色区域宽窄不一,宽的区域表示其中样本分布较多,窄的区域则相反,从中能直观地看到收盘价数据的分布情况。
2 用直方图来拟合正态分布效果
正态分布是一种连续随机变量概率分布,它是很多分析统计方法的基础,比如包括回归分析等在内的多种方法均要求被分析的样本服从正态分布。
正态分布和直方图相似点在于,它们都能展示变量的分布情况,所以在如下的DrawNormal.py范例中,将先用直方图来拟合正态分布的效果,从中大家能直观地感受到正态分布,随后会再此基础上做进一步分析。
1# coding=utf-8
2import numpy as np
3import matplotlib.pyplot as plt
4fig = plt.figure()
5ax = fig.add_subplot(111)
6u = 0
7sigma = 1
8num = 1000000
9points = np.random.normal(u, sigma, num)
10#以直方图来拟合正态分布
11ax.hist(points, bins=1000)
12plt.show()
正态分布有两个关键参数,分别是期望μ和方差为σ^2(即σ的平方),在第6行和第7行里,分别定义这两个关键变量。在第9行里,通过numpy.random.normal方法,以两个关键参数,生成了1000000个符合正态分布的随机数,其中生成的个数有第3个参数num指定。
在准备好数据后,是通过第11行的hist方法,绘制了描述样本points分布情况的直方图,其中通过bins参数指定了直方图里的柱状图的个数。
运行本范例后,能看到如下图9.9所示的效果。从中能看到满足正态分布的随机样本具有如下的特性。
正态分布曲线呈钟状,是关于数学期望μ对称,数学期望可以理解成是该随机样本数的平均值,而中间的高度是由方差决定的。
从图上能看到这些随机数的分布情况,而0位置的分布最为密集,其中0是生成该正态分布随机数时指定的数学期望值。
而且,满足正态分布的随机变量样本集,大约68.3%的样本落在距数学期望值有1个标准差(即σ)的范围内,大约95.4%样本落在在距数学期望值有2个标准差(即2σ)的范围内,大约99.7%样本落在距数学期望值有3个标准差(即3σ)内的范围内。
3 验证序列是否满足正态分布
之前提到,很多数学统计规律和方法是基于正态分布的,也就是说,如果某组样本变量符合正态分布,那么就可以用到这些规律和方法来进行分析或预测工作。那么怎么检验序列是否满足正态分布呢?在scipy.stats模块里封装了normaltest方法,可以用它来检验,在如下的CheckNormal.py范例中,演示了通过该方法的用法。
1# coding=utf-8
2import numpy as np
3from scipy.stats import normaltest
4import pandas as pd
5u = 0
6sigma = 1
7num = 1000
8normalArray = np.random.normal(u, sigma, num)
9#验证是否是正态分布
10print(normaltest(normalArray))
11filename='D:\\work\\data\\ch9\\6007852020-01-012020-01-31.csv'
12df = pd.read_csv(filename,encoding='gbk',index_col=0)
13print(normaltest(df['Close']))
在第5行到第8里,指定了期望和方法,生成了1000个随机数,在第10行里,通过normaltest方法验证该序列是否符合正态分布。由于是生成随机数,所以每次结果不会相同,如下给出了其中一次的运行结果。
NormaltestResult(statistic=1.9905539749433805, pvalue=0.36962104996359296)
其中主要看pvalue,从统计学上看,这个数有三档意义,第一档是大于0.05,表示两者差别无显著意义。这里结果约为0.37,符合这一档。该取值在当前上下文中的含义是,该序列和正态分布序列间,差别无显著意义,即normalArray序列符合正态分布, 由于待检验的该序列本身就是以正态分布的方式生成的,所以这个结论无疑是正确的。
随后在第11行和第12行里,从csv文件里得到股票数据,并用第13行的normaltest方法验证收盘价是否满足正态分布,这行print语句的运行结果如下。
NormaltestResult(statistic=4.624089377177887, pvalue=0.09905850056321942)
虽然pvalue的值0.099比0.05大不了多少,但也能说明股票收盘价的序列满足正态分布。
4 参数估计方法
参数估计方法是推断统计的一种方法,该方法的理论基础是正态分布,也就是说,如果该方法的适用范围是满足正态分布的序列。参数估计可以再划分成点估计和区间估计,其中点估计的含义是用样本的参数来估计总量中的参数。
点估计的一个应用场景是抽样检验,其中可以用样本产品的“产品最大工作时间”参数来估计所有产品中的该数值。而区间估计要解决的问题是,根据事先制定的正确度与精确度参数,构造适当的区间范围。通俗地讲,通过区间估计能确定“有多少把握能确保某个样本在某个区间范围内”。
从上例中已经看到,收盘价是符合正态分布,而且它适用于“区间估计”的场景。在如下的IntervalEst.py范例中,将调用scipy.stats里的interval方法,以95%的置信度,给出该股收盘价的置信区间。
1# coding=utf-8
2from scipy import stats
3import pandas as pd
4filename='D:\\work\\data\\ch9\\6007852020-01-012020-01-31.csv'
5df = pd.read_csv(filename,encoding='gbk',index_col=0)
6print(stats.t.interval(0.95,len(df['Close'])-1,df['Close'].mean(),df['Close'].std()))
在前5行里,从csv文件里得到了指定股票在指定范围内的数据,在第6行里,通过调用了stats.t.terval方法,计算了df[‘Close’]的置信区间。
其中第1个参数表示置信度,第2个参数表示自由度,一般是样本数减1,第3个参数一般传入的是均值,第4个参数则表示标准差的计算方式。运行上述范例,能看到如下的输出结果。
(14.576210752919142, 16.423789119924283)
这表示在95%置信度的前提下,该序列的区间范围。
5 显著性验证
显著性验证是假设验证中的一种。假设验证的思想是,先对样本数据做个假设,然后验证该假设对不对。
再具体一下,如果原假设是对的,而验证的结果却告诉你要放弃该假设,这叫第一类错误,在假设验证里把第一类错误出现的概率记成α。但如果原假设不对,而结果却要你接收该假设,这叫第二类错误,记作β。
一般只考虑出现第一类错误的最大概率α,而不考虑出现第二类错误的概率β,这样的假设检验就叫显著性检验,其中出错概率α叫显著性水平。在显著性验证里,α一般的取值有0.05、0.025和0.01这三种,对应地表示出现第一类错误的可能性必须低于5%、2.5%或1%。
根据样本的概率分布情况,常用的校验方法有t检验、z检验和F检验等,其中通过t检验可以检验服从正态分布的标准差未知的样本序列的均值。在如下的TTestDemo.py范例中,就将演示用t检验验证收盘价的均值。
1# coding=utf-8
2from scipy import stats
3import pandas as pd
4filename='D:\\work\\data\\ch9\\6007852020-01-012020-01-31.csv'
5df = pd.read_csv(filename,encoding='gbk',index_col=0)
6print(df['Close'].mean()) #15.499999936421712
7print(stats.ttest_1samp(df['Close'],15.5))
8print(stats.ttest_1samp(df['Close'],15.4))
9print(stats.ttest_1samp(df['Close'],15.7))
10print(stats.ttest_1samp(df['Close'],15.2))
11print(stats.ttest_1samp(df['Close'],16))
在第6行里,输出了股票收盘价的均值,约为15.5,在第7行到第11行里,提出了不同的关于收盘价均值的假设,并通过stats模块里的ttest_lsamp方法,对不同的假设进行了t检验。上述范例运行后的结果如下所示。
115.499999936421712
2Ttest_1sampResult(statistic=-5.716967037005381e-07, pvalue=0.9999995519184666)
3Ttest_1sampResult(statistic=0.8992005958223217, pvalue=0.38375142019051156)
4Ttest_1sampResult(statistic=-1.7984029067347544, pvalue=0.09370333462557079)
5Ttest_1sampResult(statistic=2.6976029308603886, pvalue=0.017337840975255838)
6Ttest_1sampResult(statistic=-4.496006409291847, pvalue=0.0005030226952314426)
上述输出结果的第1行表示序列的均值,从第2行到第6行的pvalue结果里,能看到对不同假设的验证结果,详细说明请参考下表里的内容。
待校验的均值
与正确均值的偏差
pvalue的取值
15.5
约为0
接近于1
15.4
约0.1
约0.38
15.7
约0.2
约0.09
15.2
约0.3
约0.01
16
约0.5
约0.0005
也就是说,如果待验证的均值越接近于真实的均值,那么pvalue的取值就越高,说明“该数值是正确均值”的假设成立的可能性就越高,反之pvalue取值就很低,比如针对“均值是16”的假设,成立的概率才约0.0005,就说明该假设基本不成立。
请大家关注我的公众号:一起进步,一起挣钱,在本公众号里,会有很多精彩文章。
python做线性回归统计推断提取参数_概率分析方法与推断统计(来自我写的python书)...相关推荐
- 概率分析方法与推断统计(来自我写的python书)
在数据分析统计的场景里,常用的方法除了描述性统计方法外,还有推断统计方法,如果再从工作性质上来划分,推断统计包含了参数估计和假设验证这两方面的内容.而推断统计用到了很多概率统计方法,所以本小节在介绍推 ...
- python做线性回归统计推断提取参数_线性回归及其Python实现(最大似然法)
线性回归及其Python实现(最大似然法) 标签: Python 机器学习 本节内容总结于博主在牛客网机器学习特训营的笔记 参考资料:<机器学习实战> 目录 1.什么是线性回归(Linea ...
- python做游戏脚本被监测_一个监视CSDN论坛押宝游戏状态的python脚本
# -*- encoding:UTF-8 -*- #以指定的时间间隔获取CSDN押宝游戏的结果 #网址:http://community.csdn.net/Games/GamePawn.aspx?id ...
- 用python做什么类型的游戏_吃喝玩乐学Python:零基础做游戏
第一节:介绍 面向的人群:零基础学习Python. 一部手机做游戏. 想敲代码装装X. 只是来看作者瞎扯淡. -- 内容介绍:游戏制作驱动的Python学习 手把手教你从零开始用Python做游戏,电 ...
- Python的数据分析中超参数调优方法:网格搜索
[小白从小学Python.C.Java] [Python全国计算机等级考试] [Python数据分析考试必会题] ● 标题与摘要 Python的数据分析中 超参数调优方法:网格搜索 ● 选择题 以下说 ...
- python做线性回归_利用 python 进行线性回归
利用python进行线性回归 理解什么是线性回归 线性回归也被称为最小二乘法回归(Linear Regression, also called Ordinary Least-Squares (OLS) ...
- python自动化提取pdf表格_[Python] 自动化办公 多种提取PDF图片的方法
转载请注明:陈熹 chenx6542@foxmail.com (简书号:半为花间酒) 若公众号内转载请联系公众号:早起Python 这篇文章能学到的主要内容: 基于 fitz 库和正则搜索提取图片 基 ...
- python做三维图片挑战眼力_腾讯实习挑战赛30强WriteUp
我觉得前十应该没几个会写wp,毕竟好多人都做好了不去的准备,应坏蛋邀请,在这里放出前三的wp,除了两道逆向,其余AK. 30强挑战赛writeup 0x00 基础题 301.能看到吗? 右键,查看源码 ...
- python类方法需要传入cls参数_如何从Python 3.x中的类定义传递参数到元类?
这是如何从类定义向元类传递参数的python 3.x版本?问题,根据请求单独列出,因为答案与python 2.x明显不同. 在python 3.x中,如何将参数传递给元类的__prepare__.__ ...
最新文章
- 数据结构之【队列】的基本操作C语言实现
- EasyUI DataGrid根据字段动态合并单元格
- Windows快捷键集锦
- electronjs MySQL,javascript – 在Electron应用程序中使用sql.js.
- 从零开始学PowerShell(4)数据的选择、排序与格式化
- 【学习笔记】ListView初识
- 红黑所-1996-2011年中国黑客大事记
- 关于调制比、过调制、基波电压和母线电压的概念和关系总结
- 搜狗输入法中文状态下,打出来还是英文按住键盘Ctrl+shift+E就可以了
- 微信小程序 之 程序题
- Verilog基础语法--运算符【常用的几种】
- 四大亮点不容错过,TDengine 开发者大会全议程公布!
- 0~100之间所有数字的累计求和结果.python
- ShmooCon IX: Moloch: A New And Free Way To Index Your Packet Capture Repository
- 新的数据科学平台加速 Python 查询
- 简历还能这样写——程序员
- python点云可视化_3D可视化神器之Open3D
- 最详细的小程序用户授权教程
- 二进制、八进制、十进制、十六进制之间的转换(含小数的转换方法)
- 走近刘文彬师哥,走进SB英语
热门文章
- 【leetcode刷题笔记】Merge k Sorted Lists
- [Selenium]如何通过Selenium实现Ctrl+click,即按住Ctrl的同时进行单击操作
- js学习小计6-慎用return false;
- 建立图片服务器的注意事项
- 【SQL Server中SMO的简单使用】 (装载)
- Godaddy Windows主机组件支持情况
- 使用PostSharp进行AOP框架设计:一个简单的原型
- AI杂谈(2)请教支持向量机用于图像分类
- 入门机器学习(二十)--编程作业-异常检测和推荐系统(Python实现)
- 算法的概念与伪代码的使用