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

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

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

课程地址: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文档可以用,会告诉每个参数可以用,会告诉具有哪些属性和返回值。

相关文章
|
编译器 C#
C#之十七 局部类型
C#之十七 局部类型
33 0
|
3月前
|
机器学习/深度学习 数据处理 Python
深入理解双变量(二元)正态投影:理论基础、直观解释与应用实例
本文探讨了统计学与机器学习中的二元投影技术,它基于二元正态分布,用于预测一个变量在给定另一变量值时的期望值。文章分为三部分:首先介绍了二元正态投影的基本公式及其在回归中的应用;接着通过直观解释和模拟展示了不同相关性下变量间的关系;最后运用投影公式推导出线性回归的参数估计,并通过实例说明其在预测房屋价格等场景中的应用。附录中详细推导了二元线性投影的过程。二元投影作为一种强大工具,在数据分析中帮助简化复杂问题并揭示数据背后的规律。
56 1
深入理解双变量(二元)正态投影:理论基础、直观解释与应用实例
|
6月前
|
算法 数据可视化 数据挖掘
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例(上)
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例
|
6月前
|
存储 算法 Windows
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例(下)
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例
|
5月前
|
缓存 JavaScript
计算属性和方法有什么区别?怎样选择
计算属性和方法有什么区别?怎样选择
|
6月前
|
前端开发 数据挖掘 数据建模
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例(中)
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例
|
6月前
|
编解码 算法 数据可视化
【视频】时间序列分类方法:动态时间规整算法DTW和R语言实现
【视频】时间序列分类方法:动态时间规整算法DTW和R语言实现
|
6月前
|
编译器 C++ 开发者
【C++11保姆级教程】继承构造函数和花括号等式初始化器(brace-or-equal initializers)
【C++11保姆级教程】继承构造函数和花括号等式初始化器(brace-or-equal initializers)
251 0
|
6月前
|
程序员 C++
【C++14保姆级教程】带默认成员初始化器的聚合类
【C++14保姆级教程】带默认成员初始化器的聚合类
107 0
|
算法 C++ 容器
关系类算法函数
关系类算法函数