监督学习——多变量线性回归实例:GAD7焦虑症程度预测(python sklearn实现+spss modeler实现)
数据准备:
项目目的:熟悉数据分析项目流程,完成焦虑症数据GAD7数据分析
项目材料:数据表GAD7.xlsx、数据说明GAD7.json
我们选取两个特征变量:受教育程度及年薪。目标变量:焦虑症程度。
受教育程度可选选项0-6依次为小学,中学,高中,大学专科,大学本科,硕士研究生,博士研究生。
年薪可选选项0-5依次为0-4万,5-10万,11-20万,21-40万,41-80万,超过80万。
焦虑症程度0-21逐渐增强。
部分数据集: (总22203条数据)
一、sklearn实现
1.导入包
#导入包
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
2.导入数据
#变量初始化
X=[]
Y=[]
#导入数据
def get_data(file_name):datafile = u'C:\\Users\\HP\\Desktop\\GAD7a.xlsx'#文件所在位置,u为防止路径中有中文名称,此处没有,可以省略data = pd.read_excel(datafile,header=0)data=np.array(data)#数组切片对变量进行赋值Y=data[:,2:]X=data[:,0:data.shape[1]-1]print(X.shape)#打印X的维度return X,Y
X,Y=get_data('GAD7a.xlsx')
X的维度:
3.作图展示
#作图展示
ax = plt.figure().add_subplot(111, projection = "3d")
ax.scatter(X[:, 0], X[:, 1],Y, c = "b", marker = 'o', s = 10)
ax.set_xlabel("education")
ax.set_ylabel("income")
plt.show()
由图形展示散点的密集程度来看,教育程度在2.3.4阶段,年薪在0.1阶段的人群患有焦虑症频率较高。
4.建模与训练
# 建立模型
model = LinearRegression()
# 开始训练
model.fit(X,Y)
5.结果展示
# 斜率
print("coefficients: ", model.coef_)
w1 = model.coef_[:,0]
w2 = model.coef_[:,1]# 截距
print("intercept: ", model.intercept_)
b = model.intercept_# 测试
X = [[5, 5]]
predict = model.predict(X)
print("predict: ", predict)
由上述的最佳拟合线的截距和回归系数可以算出其线性回归线方程:y = 6.63 + (-0.03)×受教育程度 + (-0.2)×年薪。由此可知,对于给定了年薪,如果受教育程度增加一个点,对应焦虑症程度将减少0.03个点。对于给定了教育程度,如果年薪增加一个点,对应焦虑症程度将减少0.2个点。
接下来对数据集进行预测与模型测评。同样使用predict与score函数来获取所需要的预测值与得分。
6.回归结果作图
Y=np.mat(Y)#数组转化为矩阵
X=np.mat(X)#数组转化为矩阵
ax = plt.figure().add_subplot(111, projection = "3d")
ax.scatter(X[:, 0], X[:, 1], Y, c = "b", marker = 'o', s = 10)
x0 = X[:, 0]
x1 = X[:, 1]
x0, x1 = np.meshgrid(x0, x1)
b = model.intercept_
z = b + w1 * x0 + w2 * x1
ax.plot_surface(x0, x1, z, color = "r")ax.set_xlabel("education")
ax.set_ylabel("income")
ax.set_zlabel("risk")
plt.show()
7.回归检验
score = model.score(X,Y)
print(score)
#对线性回归进行预测
Y_pred = model.predict(X)
print(Y_pred)
plt.plot(range(len(Y_pred)),Y_pred,'b',label="predict")
#显示图像
plt.show()
8.模型优化
数据归一化处理:当特征数据的范围相差比较大时,我们可以把数据进行归一化处理,即在创建模型时增加normalize=True参数:mdoel=LinearRegression(normalize=True
当然,数据归一化处理只会加快算法收敛速度,优化算法训练的效率,无法提升算法的准确性。
优化模型准确性:当数据针对训练样本的评分较低,即数据对训练数据的拟合成本比较高,这是个典型的欠拟合现象,方法一是挖掘更多输入特征,方法二是增加多项式特征。我们通过增加多项式特征,其实就是增加模型的复杂度。
#创建多项式模型的函数
def polynomial_model(degree=1):polynomial_feature=PolynomialFeatures(degree=degree,include_bias=False)linear_regression=LinearRegression(normalize=True)pipeline=Pipeline([("polynomial_feature",polynomial_feature),("linear_regression",linear_regression)])return pipeline
#使用二阶多项式来拟合数据
model=polynomial_model(degree=2)
9.总结
由于第一次使用python进行多元线性回归的代码实现,过程中出现了很多bug,使用sklearn库可以直接调用许多算法,十分方便,但重点还是要理解算法的数学内涵,具体参考笔记监督学习——多变量线性回归(梯度下降算法),从得分情况来看,第一个模型的拟合效果一般,明显需要优化模型的准确性。模型优化的更多方法后续会再写一篇。
总结一下代码过程中遇到的bug。
1.ValueError: Found input variables with inconsistent numbers of samples: [22203, 1]
出现这种错误是因为在训练的过程中,X和Y的长度必须一致。
可以采用如下代码来检查维度
print(X.shape)
print(y.shape)
2.ValueError: Input contains NaN, infinity or a value too large for dtype(‘float32’)
起初数据集中含有缺失值没有处理
3.list indices must be integers or slices, not tuple
数据集没有转化为矩阵!
总代码:
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
X=[]
Y=[]
#导入数据
def get_data(file_name):datafile = u'C:\\Users\\HP\\Desktop\\GAD7a.xlsx'#文件所在位置,u为防止路径中有中文名称,此处没有,可以省略data = pd.read_excel(datafile,header=0)data=np.array(data)#数组切片对变量进行赋值Y=data[:,2:]X=data[:,0:data.shape[1]-1]print(X.shape)#打印X的维度return X,Y
X,Y=get_data('GAD7a.xlsx')
#作图展示
ax = plt.figure().add_subplot(111, projection = "3d")
ax.scatter(X[:, 0], X[:, 1],Y, c = "b", marker = 'o', s = 10)
ax.set_xlabel("education")
ax.set_ylabel("income")
plt.show()
# 建立模型
model = LinearRegression()
# 开始训练
model.fit(X,Y)
# 斜率
print("coefficients: ", model.coef_)
w1 = model.coef_[:,0]
w2 = model.coef_[:,1]# 截距
print("intercept: ", model.intercept_)
b = model.intercept_# 测试
X = [[5, 5]]
predict = model.predict(X)
print("predict: ", predict)
Y=np.mat(Y)#数组转化为矩阵
X=np.mat(X)#数组转化为矩阵
ax = plt.figure().add_subplot(111, projection = "3d")
ax.scatter(X[:, 0], X[:, 1], Y, c = "b", marker = 'o', s = 10)
x0 = X[:, 0]
x1 = X[:, 1]
x0, x1 = np.meshgrid(x0, x1)
b = model.intercept_
z = b + w1 * x0 + w2 * x1
ax.plot_surface(x0, x1, z, color = "r")ax.set_xlabel("education")
ax.set_ylabel("income")
ax.set_zlabel("risk")
plt.show()
参考资料:https://blog.csdn.net/will_zhan/article/details/83096318
二、spss实现
未完待续
监督学习——多变量线性回归实例:GAD7焦虑症程度预测(python sklearn实现+spss modeler实现)相关推荐
- html 二维表_焦虑症自测表,自测你的焦虑程度
SAS焦虑症自测表 焦虑,大概已经成为了当下最显著的一种时代病. 好像也没什么突发事件,怎么就焦虑得睡不好觉? 明明吃穿不愁了,为什么还是莫名地担心忧虑? 其实自己知道外面很安全,可是为什么一到公共场 ...
- 【机器学习-学习笔记】单/多变量线性回归、多项式回归、逻辑回归、过拟合、正则化
https://blog.csdn.net/m511655654/article/details/81507857 问题 描述 表达式描述 表达式 单变量线性回归 只含有一个特征/输入变量 一元一次表 ...
- 机器学习之多变量线性回归(Linear Regression with multiple variables)
机器学习之多变量线性回归(Linear Regression with multiple variables) 1. Multiple features(多维特征) 在机器学习之单变量线性回归(Lin ...
- 吴恩达机器学习(第四章)——多变量线性回归
第四章-多变量线性回归 文章目录 第四章-多变量线性回归 多功能 多元梯度下降法 梯度下降算法 特征缩放 学习率 特征与多项式回归 正规方程 正规方程的概念 公式的推导 梯度下降法 VS 正规方程 奇 ...
- 吴恩达机器学习 -- 多变量线性回归
5.1 多维特征 前一周所讲是单变量线性回归,即 ,是只有一个变量 的假设函数,现在对房价预测模型有了更多的参考特征,比如楼层数,卧室的数量,还有房子的使用年限.根据这些特征来预测房价.此时的变量有多 ...
- 吴恩达机器学习笔记二之多变量线性回归
本节目录: 多维特征 多变量梯度下降 特征缩放 学习率 正规方程 1.多维特征 含有多个变量的模型,模型中的特征为(x1,x2,-xn), 比如对房价模型增加多个特征 这里,n代表特征的数量, x(i ...
- 吴恩达|机器学习作业1.1多变量线性回归
1.1.多变量线性回归 1)题目: 在本部分的练习中,需要预测房价,输入变量有两个特征,一是房子的面积,二是房子卧室的数量:输出变量是房子的价格. 数据链接: https://pan.baidu.co ...
- 焦虑症患者,整天心神不宁,忧心忡忡怎么办?
整天心神不宁,忧心忡忡,而且很多时候并没有任何原因,那么可以说这就是典型的焦虑症状,如果这种焦虑症状长时间持续存在,那就很可能要去诊断焦虑症了.其实焦虑症是我们国家最常见的精神疾病,虽然不严重,但那种 ...
- CS229学习笔记(2)多变量线性回归
一. 多变量线性回归 1.多维特征 我们对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为(x1,x1,-,xn)\left(x_{1}, x_{1}, \ldot ...
最新文章
- sequelize 连接2个数据库_数据库激荡 40 年,NoSQL、NewSQL谁能接棒?
- 关于MySqlConnection的一个特殊异常
- linux centos ppp限速,Centos7限速和测速
- Building JavaScript Games for Phones Tablets and Desktop(6)- 响应玩家输入
- 简要概述网络I/O与并发
- php对接抖音快手小红书短视频去水印接口的代码
- Windows补丁修复- Microsoft Windows HTTP.sys远程代码执行漏洞 (MS15-034)(CVE-2015-1635)
- vmware共享文件夹不显示
- 有什么能测试安卓硬件的软件吗,手机硬件检测工具有哪些 总有一款适合你
- 马科维茨均值方差模型
- 汉医健康:“互联网+医疗健康”让患者更有“医”靠
- 反相畴的基础知识和一篇论文
- vue实现关注与取消关注的按钮
- 股票精灵接口的脚本策划
- 华为手机开机卡在开机画面,该怎么解决呢?
- java的反射机制~~!
- finalize的作用
- SVA 断言 note
- pomelo分布式聊天服务器详解
- ICC2 CTS STEP