线性回归分析是数据挖掘里一个非常重要的方法,相信大家以前在高中或者大学时都学过一点点线性回归的概念。在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。听着有点复杂,简单来说,就是看一组零散的数据是否存在相关性。线性回归分析涉及到的数学理论知识比较复杂,本文不会涉及到这些数学理论知识,仅是介绍应用场景以及制作方法,请大家放心食用。
一、应用场景: 在开始之前,我们先来了解一下线性回归分析有什么用。线性回归分析在日常工作中运用非常广泛,通过线性回归,我们可以用模型去描述两组数据中是否存在相关性。例如在分析销售数据时,我们经常要对广告费用以及销售额的关系进行判断,评估广告费用对销售额的作用到底有多大,公司应不应该加大广告费投入,如果未来投入一定的广告费用,预测销售额可以达到多少…这一系列问题都可以通过线性回归分析去得出答案。
只要存在两组以上的数据,我们都可以利用线性回归的方法去对其进行检验。下面我利用Python去对线性回归分析的方法和过程进行详细的描述,力求以最简洁语言带你走进数据挖掘的神秘大门。
二、Python实现过程: 第一步:数据导入 首先要做的就是把本地的EXCEL或者CSV文件读取到Python里,我们可以引用pandas库去读取数据:
读取成功后,我们先来打印看一下数据是否和EXCEL里的是一致的:
第二步:计算相关系数 上面我们说过了,只要存在两组数据,我们就可以检验其是否存在相关性,在数学上通常是用皮尔逊相关系数来进行检验,这个数值越接近1,就代表两组数据越具有相关性,我们可以用corr这个函数来对广告费以及销售额进行检验:
接下来我们打印一下data1,大家可以看到相关系数的值已经算出来了,达到了0.93,非常接近1,说明这两组数据具有非常高的相关性:
第三步:画图 为了更加直观地对这两组数据进行呈现,我们可以画一个散点图,这时要引入另外一个库:matplotlib,首先把广告费用设置为X轴,把销售额设置为Y轴,然后再利用plot()函数进行画图,最后再利用利用show()进行图表呈现:
打印一下,我们看看图形的效果,从图中可以看中,这个散点图里面所有点的排列基本是在一条直线上的,拟合的非常紧密,说明广告费用与销售额是呈正相关的,广告费用越多,销售额也会随之增长,这也对我们上面计算出来的相关系数提供了一个非常好的佐证:
第四步:建立线性回归模型 线性回归的方程我们可以用y=ks+b这个公式来表示,其中x是自变量,y是因变量,k是斜率,b是直线在轴上的截距。接下来我们就可以对上面的这组数据去建立线性回归模型,这里要引用的是sklearn库,这个库是的主要作用是进行机器学习。首先先定义一个线性回归的对象LinearRegression(),然后再利用fit()函数对X、Y的值进行模型训练,最后要输出两个数据,一个是coef_,代表k值,另一个是intercept_,代表b值:
输出后的数据如下,k是17.3,b是291.9:
这里我们可以检验一下模型的拟合程度,这里可以用score()函数进行验证,这个代表的意思是,数值越接近1,代表这个模型的拟合程度就越好:
结果算出来是0.879,说明模型的拟合程度非常好,可信度非常高,也就是可以投入到实际应用中去使用:
第五步:数据预测 从上面的步骤中我们得知了k和b的值,只要有x的值,那么就可以算出y的值是多少了,通常我们可以利用这个原理去对数据进行预测。这里可以利用predict()函数接入一个参数对数据进行预测,例如下面我们看看广告费在20万的时候,销售额预计会有多少:
最后算出来的销售额是638万:
三、后续建议 从python的实现过程来看,虽然通过写代码的形式可以把整个线性回归分析完美地实现了,但是毕竟大部分小伙伴都没有接触过这门编程语言,如果真要用python去做的话可能会难度比较大。那么有没有更加简洁一点的方法呢?答案是肯定的,下面我开始尝试用smartbi这个工具对上面的流程进行简化。
进入数据挖掘的界面后,可以看到左边的工具栏上有很多组件,这个就是ETL的工作界面。ETL在数据清洗上运用比较广泛,可以把很多复杂、不规则的数据源治理的井然有序。如果把ETL和数据挖掘结合起来,必然可以大幅提高数据分析的效率。
第一步要做的是先把数据源读取到ETL的界面里,我们可以把EXCEL文件这个组件拖拽进来,并把上面的广告费用的EXCEL文件读取进来:
如果EXCEL文件中存在着多个sheet,还需要把读取Excel sheet这个组件拖拽进来,并读取您的目标sheet:
读取完成后,可以先对数据源进行预览:
我们先来计算一下广告费用与销售额的相关系数怎么算出来的,在统计分析中我们可以看到相关性分析的组件,把它拖拽进来,并与上面的组件进行相连:
鼠标选中相关系分析,在右边的待选列里把销售额和广告费用选中,并移动到右边:
最后我们看一下执行后的输出效果,点击广告费用与销售额中间的区域,可以看到相关性系数是0.94,这个数据和我们上面用Python算出来的结果是一致的:
由于篇幅有限,散点图、数据预测等其他功能实现的方法就不多做介绍了,有兴趣的小伙伴可以自行去研究一下。
|