数据准备:

项目目的:熟悉数据分析项目流程,完成焦虑症数据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实现)相关推荐

  1. html 二维表_焦虑症自测表,自测你的焦虑程度

    SAS焦虑症自测表 焦虑,大概已经成为了当下最显著的一种时代病. 好像也没什么突发事件,怎么就焦虑得睡不好觉? 明明吃穿不愁了,为什么还是莫名地担心忧虑? 其实自己知道外面很安全,可是为什么一到公共场 ...

  2. 【机器学习-学习笔记】单/多变量线性回归、多项式回归、逻辑回归、过拟合、正则化

    https://blog.csdn.net/m511655654/article/details/81507857 问题 描述 表达式描述 表达式 单变量线性回归 只含有一个特征/输入变量 一元一次表 ...

  3. 机器学习之多变量线性回归(Linear Regression with multiple variables)

    机器学习之多变量线性回归(Linear Regression with multiple variables) 1. Multiple features(多维特征) 在机器学习之单变量线性回归(Lin ...

  4. 吴恩达机器学习(第四章)——多变量线性回归

    第四章-多变量线性回归 文章目录 第四章-多变量线性回归 多功能 多元梯度下降法 梯度下降算法 特征缩放 学习率 特征与多项式回归 正规方程 正规方程的概念 公式的推导 梯度下降法 VS 正规方程 奇 ...

  5. 吴恩达机器学习 -- 多变量线性回归

    5.1 多维特征 前一周所讲是单变量线性回归,即 ,是只有一个变量 的假设函数,现在对房价预测模型有了更多的参考特征,比如楼层数,卧室的数量,还有房子的使用年限.根据这些特征来预测房价.此时的变量有多 ...

  6. 吴恩达机器学习笔记二之多变量线性回归

    本节目录: 多维特征 多变量梯度下降 特征缩放 学习率 正规方程 1.多维特征 含有多个变量的模型,模型中的特征为(x1,x2,-xn), 比如对房价模型增加多个特征 这里,n代表特征的数量, x(i ...

  7. 吴恩达|机器学习作业1.1多变量线性回归

    1.1.多变量线性回归 1)题目: 在本部分的练习中,需要预测房价,输入变量有两个特征,一是房子的面积,二是房子卧室的数量:输出变量是房子的价格. 数据链接: https://pan.baidu.co ...

  8. 焦虑症患者,整天心神不宁,忧心忡忡怎么办?

    整天心神不宁,忧心忡忡,而且很多时候并没有任何原因,那么可以说这就是典型的焦虑症状,如果这种焦虑症状长时间持续存在,那就很可能要去诊断焦虑症了.其实焦虑症是我们国家最常见的精神疾病,虽然不严重,但那种 ...

  9. CS229学习笔记(2)多变量线性回归

    一. 多变量线性回归 1.多维特征 我们对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为(x1,x1,-,xn)\left(x_{1}, x_{1}, \ldot ...

最新文章

  1. sequelize 连接2个数据库_数据库激荡 40 年,NoSQL、NewSQL谁能接棒?
  2. 关于MySqlConnection的一个特殊异常
  3. linux centos ppp限速,Centos7限速和测速
  4. Building JavaScript Games for Phones Tablets and Desktop(6)- 响应玩家输入
  5. 简要概述网络I/O与并发
  6. php对接抖音快手小红书短视频去水印接口的代码
  7. Windows补丁修复- Microsoft Windows HTTP.sys远程代码执行漏洞 (MS15-034)(CVE-2015-1635)
  8. vmware共享文件夹不显示
  9. 有什么能测试安卓硬件的软件吗,手机硬件检测工具有哪些 总有一款适合你
  10. 马科维茨均值方差模型
  11. 汉医健康:“互联网+医疗健康”让患者更有“医”靠
  12. 反相畴的基础知识和一篇论文
  13. vue实现关注与取消关注的按钮
  14. 股票精灵接口的脚本策划
  15. 华为手机开机卡在开机画面,该怎么解决呢?
  16. java的反射机制~~!
  17. finalize的作用
  18. SVA 断言 note
  19. pomelo分布式聊天服务器详解
  20. ICC2 CTS STEP

热门文章

  1. APP内嵌H5开发常见问题及解决方案
  2. 实战绕过两层waf完成sql注入
  3. 揭开邮票界《一轮生肖猴》的神秘面纱
  4. 出一套 iOS 高级面试题
  5. 也许一个人直到实现梦想那一刻
  6. 带你走进逐浪新宋体的世界
  7. Linux 实行sh脚本出现 : 没有那个文件或目录
  8. 完成selec函数的TCP客户端
  9. 3Sum 3Sum Closest 4Sum
  10. [原创]戒盈祈愿(200509总结)——月记