Python贝叶斯回归分析住房负担能力数据集
原文链接:http://tecdat.cn/?p=11664
我想研究如何使用pymc3在贝叶斯框架内进行线性回归。根据从数据中学到的知识进行推断。
贝叶斯规则是什么?
本质上,我们必须将我们已经知道的知识与世界上的证据相结合,以告诉我们有关世界状况的信息。
这是一个例子。假设存在这种罕见疾病,每10,000人中就有1人随机感染这种疾病。换句话说,您有0.01%的机会患上这种疾病。 幸运的是,有一项测试可以99%的正确识别出患有这种疾病的人,如果没有这种疾病,它也可以正确地说出您99%没有患这种疾病。您参加了测试,结果为阳性。你应该多担心?
好吧,让我们从逻辑上考虑一下。我们知道,每10,000人中就有1人患此病。假设有10,000人。他们中的9,999人没有疾病,但其中1%的人会得到阳性结果。因此,即使只有1人实际患有这种疾病,也有约101人获得了阳性结果。这意味着即使结果为阳性,您也只有101分的几率实际患上该病(或大约1%的几率)。
数学描述 :
看起来很简单。实际上,这很简单。该公式仅需要一些概率分布的知识。但是实际上,右边的分母通常意味着我们将要计算很多真正的计算重积分。因此,贝叶斯统计被放弃了很多年。从某种意义上讲,它自然而然地脱离了概率论。如果我们只有擅长计算大量数字的东西,那么这类问题就可以解决。
计算机确实非常快地进行计算。实际上,我写这篇文章的时候,我那笨拙的旧笔记本电脑可以进行一些不错的贝叶斯统计,例如我们将要进行的贝叶斯回归。
代码
这是进行贝叶斯回归所需的知识。通常,我们想到这样的回归:
e是正态分布的误差。
因此,我们假设:
与先验:
因此,如果我们拥有X和Y的数据,则可以进行贝叶斯线性回归。
代码
因此,我们要使用的数据集是《 美国住房调查: 2013年住房负担能力数据 》数据集。
我们感兴趣的是住房负担如何随着年龄而变化。AGE1包含户主的年龄。BURDEN是一个变量,它告诉我们住房费用相对于收入有多大。为简单起见,我们仅关注这两个变量。我们想知道的是,随着年龄的增长,住房负担会变得更容易吗?特别是,我们想知道斜率系数是否为负,并且由于我们处于贝叶斯框架中,因此该概率为负的概率是多少?
因此,让我们从一些先决条件开始,我们将导入所需的库和数据。我们还将进行一些数据清理。
import pandas as pdimport pymc3import matplotlib.pyplot as pltdf=pd.read_csv('/home/ryan/Documents/thads2013n.txt',sep=',')df=df[df['BURDEN']>0]df=df[df['AGE1']>0]
好吧,这很简单。现在,让我们构建上面讨论的模型。让我们做一个散点图,看看数据是什么样子。
plt.scatter(df['AGE1'],df['BURDEN'])plt.show()
结果如下:
数据看起来住房负担天文数字很高,很容易超过收入的10倍。
现在,我们不必为此担心太多。这是构建和运行模型的代码:
pm.traceplot(trace)plt.show()
看起来与我们上面的模型完全一样,不同之处在于我们还有一个正态分布的截距额外的beta。最后一行是实际为我们运行模型的内容。现在我们的模型已经训练好了,我们可以继续做一些推论工作了。继续运行,然后在运行时执行其他操作。在较旧的笔记本电脑(例如我的笔记本电脑)上,这可能需要花费大量时间。通常,您将需要在GPU上的云中进行这些计算。在笔记本电脑上运行花了47分钟。完成运行后,会看到类似以下内容:
可以看到,我们有斜率和截距的后验分布以及回归的标准偏差。
但是就像我一开始就想知道的那样,住房负担会随着年龄的增长而减少吗?我的想法是,也许是的。随着人们的建立,他们的住房成本将相对于收入下降。这将等于年龄变量的负斜率系数。运行以下代码,则可以找出斜率系数为负的确切概率。
print(np.mean([1 if obj<0 else 0 for obj in trace['x']]))
该系数为负的概率约为13.8%。
- 位运算的方法,大结
- 位运算的方法,小结
- Golang语言--多线程求和
- AlphaGo Zero代码迟迟不开源,TF等不及自己推了一个
- nyoj---快速查找素数
- 转--Golang图像处理工具库,图像相似度计算,图像二值化
- HDUOJ----湫湫系列故事——减肥记I
- HDUOJ----Eddy's research I
- 【亚马逊加盟对抗谷歌联盟ONNX】微软Facebook深度学习开源联盟再添盟友
- HDUOJ--8球胜负
- HDUOJ--点球大战
- Golang语言社区--使用百度API获取经纬度
- HDUOJ---The number of divisors(约数) about Humble Numbers
- HDUOJ----最少拦截系统
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- WSL——windows上的linux子系统
- 【python-opencv】读取、显示、保存视频
- 超级账本——Hyperledger Fabric
- 【python-opencv】绘图(目标检测框及其置信度等)
- 哈希表:哈希值太大了,还是得用set
- 哈希表:今天你快乐了么?
- 简单二分法查找(binary search)
- 【python-opencv】鼠标作为画笔
- npm 依赖管理中被忽略的那些细节
- 哈希表:map等候多时了
- 简单了解异步通信
- 哈希表:其实需要哈希的地方都能找到map的身影
- 哈希表:这道题目我做过?
- 哈希表:解决了两数之和,那么能解决三数之和么?
- 双指针法:一样的道理,能解决四数之和