python关联分析sklearn_如何用python的sklearn的机器学习,实现简单线性回归分析?...
(本文为小白的练手文分享,大神请忽略,阅读本文需7分钟左右,请多指教点赞哈谢谢!)Python的sklearn库提供了方便的机器学习算法,能很快实现一个简单的一元线性回归,具体有以下几个步骤:提出问题理解数据数据清洗构建模型评估下面将根据一个简单的案例,分析“学习时间”与“分数”之间的关系,两者相关性如何?是否存在线性关系?回归曲线的拟合度怎么样?首先准备数据。from collections i
(本文为小白的练手文分享,大神请忽略,阅读本文需7分钟左右,请多指教点赞哈谢谢!)
Python的sklearn库提供了方便的机器学习算法,能很快实现一个简单的一元线性回归,具体有以下几个步骤:提出问题
理解数据
数据清洗
构建模型
评估
下面将根据一个简单的案例,分析“学习时间”与“分数”之间的关系,两者相关性如何?是否存在线性关系?回归曲线的拟合度怎么样?
首先准备数据。
from collections import OrderedDict
import pandas as pd
# 定义数据集
examData={
'学习时间':[0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,
2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50],
'分数':[10, 22, 13, 43, 20, 22, 33, 50, 62,
48, 55, 75, 62, 73, 81, 76, 64, 82, 90, 93]
}
# 生产有序字典
examDataOrder=OrderedDict(examData)
# 生产pandas数据表
examDF=pd.DataFrame(examDataOrder)
# 打印前5行
examDF.head()
1.提出问题
数据如上,简单打印前5行,更直观的看看是什么样子:
可以看出,这是由20行、2列构成的数据表,比较规整。对这个只有2个变量的数据,我想到的问题是,这俩之间有没有联系?是否存在因果关系?进一步说,是否存在线性关系?
2,理解数据
2.1 查看相关系数R
如图所示,相关系数R=0.923985,说明相关程度很高。
2.2 绘制散点图
由于examDF是个二维数据,且相关系数很高,此时可绘制散点图,看看2个变量之间的相关关系和走势。
如上图所示,“学习时间”和“分数”呈现强烈的正相关的增长关系,下一步分析可考虑是否存在线性关系?若线性拟合,拟合优度怎么样?这是下一步的分析方向。
3,数据清晰
本例中的数据比较规整,经过上一步散点图验证,不需要数据清晰,略过。
4,构建模型
经过上一步的分析,两者存在强烈的正相关模型,可考虑用sklenrn进行机器学习训练,并构建一元线性回归模型。
4.1 用train_test_split训练数据
对原来的20个数据,按照8:2的比例进行了拆分,训练数据train占16个,测试数据test占4个。
接下来绘制train_test散点图,如下:
4.2 构建线性回归模型
根据上面train_test_split得出来的训练、测试数据,创建线性回归模型并用train数据进行训练:
然而却出现了报错:
报错信息中显示,需要一个2维的数据却只得到了1维数组,下面的提示中说“如果只有1个特征,请用reshape将数据形式改为(-1,1)的形式”,即只有1列的形式,如下:
如上所示,这回训练模型成功了,接下来求最佳拟合线:
绘制最佳拟合线:
5,评估模型
决定系数R平方是检验回归线拟合程度的重要指标,表示有多少的y波动可以由回归线来描述,如下:
如上,模型model的决定系数R平方等于0.8,表示绝大多数的波动都可被描述,则表示回归线的拟合度很高。
下面在一张图上绘制训练数据、测试数据和最佳拟合线,如下:
综上,可得出分析结论:
(1)“学习时间”和“分数”具有强烈的正线性相关关系,相关系数约为0.92;
(2)两者关系可以用函数“y=9.16062528319+15.96828274x”来进行预测,准确度为85%。
6.学习心得一定要一鼓作气,中间不能停!否则又要重新开始。
不能钻牛角尖!遇到了一些不懂的应以当前需要为准,python的每个库都有很多用法和功能,不可能一下全学会。逐次解决不懂的,以免被岔开而偏离了学习方向。
写一篇分享文的难度并不比学习本身小,一圈下来我发现写总结也很难,所以请看到这儿的朋友一定要以我为戒,不要拖拉,一次写完。
“完成比完美更重要”,这句来自Facebook的话一直鼓舞着我。有时候按时完成了,比追求完美而拖拖拉拉的更重要。
更多推荐
所有评论(0)