高阶与分类变量实例 | 学习笔记

简介: 快速学习高阶与分类变量实例

开发者学堂课程【人工智能必备基础:概率论与数理统计:高阶与分类变量实例】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/545/detail/7437


高阶与分类变量实例

内容介绍

一、 高阶回归

二、 分类变量

 

一、高阶回归:

代码讲解:现要构造 Y=5+2·X+3·X^2,首先把当前式子构造出来,样本个数值是 50,x 指定成 np. linspace,从 0 到 10 间选 50 个数,因多了 x 方项,就将 x 方项添加进入,原始的数据还是 x,再加 e。所以这里第一列是 e,第二例是 x,第三列是 x 方。构造完数据后,先去构造 β,在讲高阶时,用 x 代表 x 方来求解。代码如下:

In [31]: #Y=5+2·X+3·X^2
nsample = 50
x = np. linspace(0, 10,nsample )

X = np. column_ stack((x, x**2))

X = sm.add_ constant (X)

代码讲解:指定β是真实值,是 5、2、3。加上np. random. normal (size=nsample),再加上 np.dot(X, beta) + e(误差项),y = np.dot(X, beta) + e的 y 是真实值,model 做最小二乘法,然后 .fit,得出最终结果。再算 params(表示最终的系数值)。就可分别得出 β0=5、β1=2、β2=2.97,与实际的结果值没差太大。代码如下:

In [32]: beta = np. array([5, 2, 3])
e = np. random. normal (size=nsample)
y = np.dot(X, beta) + e
model = sm. OLS(y, X)
results = model. fit()
results. Params

0ut[32]: array([ 4. 93210623, 2. 16604081, 2. 97682135])

In [33]: results. summary()

代码讲解:当前R方值是非常精确的,R-squared:    1000,对于当前式子来说。都将系数值展示出来,检验的结果都进行详细地展示。代码如下:

Covariance Type:  nonrobust

coef  std err     t  P>|t|  [0.025  0.975]

const 4.9321 0.330 14.935 0.000 4.268  5.596

x1   2.1660  0.153 14.182 0.000 1.859 2.473

x2   2.9768  0.015 201.548 0.000 2.947 3.007

Omnibus:    3.204  Durbin-Watson:  1.838

Prob(Omnibus): 0.202 Jarque-Bera(JB):1.916

Skew: -0.232              Prob(JB):0.384

Kurtosis: 2.161          Cond.No.     142

下面就是结果,R 方值非常接近于 1,是因为这个东西的拟合效果好。你的数据越多,指定的误差浮动范围越小,结果越好。

image.png

做高阶时需指定好当前的方程,难点在于需要怎样的方程进行表达。

 

二、分类变量

假设分类变量有 3 个取值 (a,b,c) ,比如考试成绩有 3 个等级,分别是优,良,中,或者是优,中,差。跟之前数据不一样,之前数据可能是年龄,可能是收入,都是连续值。但对于现在的指标值是个分类变量,所以先将数据转换成哑变量。现有 3 个等级,可认为 A 档是 1,B 档是 2,C 档是 3。先将数据格式进行转换,转成哑变量。哑变量中,有几种取值,长度就等于几。在哪个位置取值哪个位置就是1,其他位置就是 0。a 是第一个值,现有 a,b,c,3 个选项。所以构造的长度必然是等于 3。a 就是 (1,0.0) ,因为构造当前位置是 a。当前的位置是 b,b 的位置为 0,b (0,1,0),当前的位置是 c,c 的位置为 0,c(0,0,1), 这个时候就需要 3 个系数 β0, β1, β2,分别表示 3 种可能的取值。也就是 β0x0+β1x1+β2x2。

代码讲解:首先 nsample = 50,先去构造全是 0 的,因为需要将当前数据构造出来,指定成一个 int。如果将 int 去掉,就是 0.0,表示已指定完成。代码如下:
In [38]: nsample = 50
groups = np. zeros (nsample, int)
groups
out[38]: array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0.0,0,0,0]

代码讲解:前 20 个等于 0,中间 20 个等于 1,后面 20 个等于 2。现有 3 中不同取值。在 statsmodel 当中,有 categorical 模块,需将构造好的数据传入就会转换成 categorical 类型。代码如下:
In [39]: groups[20:40] = 1
groups[40:] = 2
dumay= s= categorical(groups, drop= True)

dummy
Out[391: array([[ 1.,   0.,    0.],

[1.,   0.,     0.],

(省略同上内容)

[0.,   1.,     0.],

[0.,   1.,     0.],

(省略同上内容)

[0.,   0.,     1.],

[0.,   0.,     1.],

(省略同上内容)

代码讲解:现 Y=5+2X+3Z1+6.Z2+9.Z3.(z1,z2,z3 分别表示 a,b,c),首先将 x 拿出,因刚才做了以上形式,所以要将上面的和 x 连接到一起,再加上常数项,都是一列 1。指定好实际的 β,5,2,3,6,9,然后加上一个 e,y 等于当前的实际值。代码如下:

In [43): #Y=5+2X+3Z1+6:22+9.Z3.
x = np.linspace(0, 20, nsample)

X = np. column _stack((x, dummy))

X =sm.add_ constant (X)
beta =[5, 2, 3, 6, 9]
y= np. random. normal (size=nsample)

Y=np. dot(X, beta) + e
result = sm. 0LS(y,X). fit()
result. summary ()

得到最终结果,得到一个 R 方值,和纠正过的 R 方值。纠正过的 R 方值普遍小于R 方,因为不想随着增加的变量去增大 α,得出的数据基本符合。
代码讲解:得到最终结果,现在虽然有个分类变量,但已将当前的指标值将它画出。

image.png

身高与体重

代码讲解:想构造个回归方程,将身高体重做一个回归方程。首先将身高和体重导入,这次用 Python 里另外的一个工具包,这个工具包包含了 plotly. graph_ objs as go 的东西。意思就是说,可以在界面做交互。接着过滤,因为认为身高小于 120 厘米的是离心点,接着画个散点图,用圆圈表示。代码如下:

In [4]:
import pandas as pd
import statsmodels. api as sm
from plotly. offline import init_ notebook _mode, iplot

import plotly. graph_ objs as go(可在界面中做些交互)
init_notebook_ mode(connected=True)

代码讲解:首先将身高的体重的数据读入,读完后做过滤,因为有些数据身高值是小于 120cm 的,就认为是离心点,所以进行了筛选。就是表示将身高大于 120cm拿出。代码如下:
Read CSV data
In [8]:data = pd. read_ csv(‘ weight. Csv’ )

data = data[data. height > 120]

代码讲解:画散点图,将x和y传进去,用一个圆圈进行表示。代码和散点图如下:
Generate scatterplot to determine fitness of linear regression
In [9]: trace = go. Scatter (x=data. height, y=data. weight, mode=’markers’ )
layout = go. Layout (
width=900,
height=500,
xaxis=dict(title=’Height’ , titlefont=dict (family=’ Consolas, monospace’, size=15)),

yaxis-dict(title=’Weight’, titlefont=dict (family=’ Consolas, monospace’ , size=15))

)

data2 = [trace]
fig = go. Figure (data=data2, layout=layout)
iplot(fig)

image.png

这个工具包,鼠标移动到哪,它就会将实际点拿出。现在看出身高的点的大致分布,可看出回归方程的样子。

直接根据之前讲的内容,直接用最小二乘法做。就得出结果值,发现都没有问题,可能 R 方值偏小,是正常现象,因为对于这个问题本身来说,有些值偏离程度大,所以 R 方值会偏小,为 0.59。

对结果进行画图,之后就是最终结果。红色的线就是回归方程,蓝色的点表示十几分数据。这样就将身高的体重的数据连在一起。

image.png

所以用 Python 里的工具包,只需要知道函数里面每个参数值是什么,这样就可以将当前任务解决。任何一个工具包都会有一个 API 文档,里面都会告诉有许多 API文档可以用,会告诉每个参数可以用,会告诉具有哪些属性和返回值。

相关文章
|
存储 编解码 算法
LDPC 在 5G-NR 中的标准进展之基本图 | 带你读《5G-NR信道编码》之十三
本章节将带读者走进5G LDPC 码基本图矩阵,带你了解LDPC有哪些基本图的设计。
LDPC 在 5G-NR 中的标准进展之基本图 | 带你读《5G-NR信道编码》之十三
|
存储 编解码 算法
准循环 LDPC 码(QC-LDPC) | 带你读《5G-NR信道编码》之九
本节将为你介绍准循环 LDPC 码(QC-LDPC)的基本内容。
14648 2
准循环 LDPC 码(QC-LDPC) | 带你读《5G-NR信道编码》之九
|
机器学习/深度学习 供应链 搜索推荐
深度学习之需求预测
基于深度学习的需求预测在商业、物流、医疗、能源等多个行业中发挥着重要作用,帮助优化资源分配、提升效率、降低成本。
1962 0
|
自然语言处理 Python
【Python自然语言处理】文本向量化的六种常见模型讲解(独热编码、词袋模型、词频-逆文档频率模型、N元模型、单词-向量模型、文档-向量模型)
【Python自然语言处理】文本向量化的六种常见模型讲解(独热编码、词袋模型、词频-逆文档频率模型、N元模型、单词-向量模型、文档-向量模型)
4158 0
|
自然语言处理 NoSQL Java
Neo4j导入思知OwnThink开源的知识图谱
导入OwnThink开源的亿级知识三元组到 Neo4j中
Neo4j导入思知OwnThink开源的知识图谱
|
Cloud Native Devops 持续交付
构建未来:云原生架构在企业数字化转型中的关键作用
【4月更文挑战第7天】 随着企业加速其数字化转型的步伐,云原生架构已经成为支持敏捷开发、自动化运维和微服务的关键平台。本文深入探讨了云原生技术如何赋予企业灵活性与创新能力,以及这些技术如何帮助组织更有效地响应市场变化和客户需求。通过分析容器化、微服务、DevOps和持续集成/持续部署(CI/CD)等核心技术,我们将揭示它们如何共同塑造着云计算的未来,并为企业提供竞争优势。
85 1
|
Web App开发 缓存 网络协议
HTTP/2服务端( nginx/tomcat)配置与测试
HTTP/2源于SPDY, 主要目标是解决HTTP 1.x的性能问题. 有别于HTTP/1.1在连接中的明文请求,HTTP/2与SPDY一样,将一个TCP连接分为若干个流(Stream),每个流中可以传输若干消息(Message),每个消息由若干最小的二进制帧(Frame)组成。这也是HTTP/1.1与HTTP/2最大的区别所在。
932 1
HTTP/2服务端( nginx/tomcat)配置与测试
|
编解码 算法
m基于码率兼容打孔LDPC码BP译码算法的matlab误码率仿真
m基于码率兼容打孔LDPC码BP译码算法的matlab误码率仿真
260 1
|
Shell
shell脚本一键搭建本地yum仓库(等待是我为你付出的代价)
shell脚本一键搭建本地yum仓库(等待是我为你付出的代价)
361 0
shell脚本一键搭建本地yum仓库(等待是我为你付出的代价)
|
数据可视化
R实战|卡方检验及其可视化
R实战|卡方检验及其可视化
974 0
R实战|卡方检验及其可视化