(本文为小白的练手文分享,大神请忽略,阅读本文需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的话一直鼓舞着我。有时候按时完成了,比追求完美而拖拖拉拉的更重要。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐