首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

机器学习系列-线性回归

笔者介绍

曾担任零售企业项目负责人,负责企业数据化转型,数据化管理;曾服务中国移动,负责客服部门产品推荐模型组组长;现于某金融投资公司大数据中心,负责风控数据建设,风控建模工作。在除工作外,也喜欢在DC、DF、天池、Kaggle参加一些比赛。机器学习方面,有一定经验,愿与各位分享我的所见所闻所想,与各位共同进步。

什么是线性回归?

线性回归其实是利用统计上的规律,探究因变量和自变量之间的依赖关系。

当我们需要预估一个数值,比如我们现在要买房,我们怎么知道这个房大概价值是多少?买了会不会亏?

先建立假设:影响房价的因素只有面积。

那我们需要知道这个地区的单位面积价格吧?那我们需要通过建立房价公式:房价 = 面积*关系系数(单位面积价格)

线性回归所作的事情实际上就是找出这样的关系系数。

一元回归、多元回归是什么?

简单理解一元就是一个自变量、多元就是多个自变量就可以了。

做线性回归要注意什么?

做线性回归要注意的有几点:

数据异常值,异常值会对拟合造成影响,影响学习效率;

缺失值,公式很明显是数值运算,你得告诉计算机缺失当作什么吧?

数据正态性,需要进行正态检验,没有正态性的变量,可能拟合效果会很差,可进行标准化处理。

相关性,自变量和因变量要有较高的相关性,相关性弱怎么做?拿这片地区的水费价格去预测房价?可能吗?

共线性,指自变量之间的共线性,如果变量之间存在共线性,则结果会很不稳定,后续会讲解;

数据准备

关于异常值,缺失值,标准化的处理,在上一篇文章https://www.toutiao.com/i6643036024052122115/提及。

异常值检测

异常值检验,一般如下情况进行剔除:

变量>均值+3*标准差或变量

变量> 75分位点值+1.5*极差或变量< 25分位点值-1.5*极差极差=75分为点值-25分为点值

变量离群,比如用模型法求。

关于异常值的检测,后续会有其他分享,在这里不再拓展。

正态性检验

介绍两种方法:1、主观画图判断法;2、Q-Q图法;3、K-S检验。

主观画图判断,画出直方图查看:

直方图

Q-Q图,散点落在线段附近:

from scipy import stats

stats.probplot(df, dist="norm", plot=plt)

plt.show()

q-q图

K - S检验,p值大于0.05,很可能为正态分布

from scipy import stats

stats.kstest(df, 'norm', (df.mean(), df.std()))

K-S检验

相关性检验

先说一下相关性,相关性就是衡量变量之间的关系。

范围:[-1,1]

衡量标准是:越靠近+1或者-1则表示相关性越强,越靠近0则表示相关性越弱,一般取

|相关系数|>0.6的变量。

其中,Cov(X,Y)为X与Y的协方差,Var[X]为X的方差,Var[Y]为Y的方差

我们假设,房价跟房子面积,小区人口有关系;

生成如下数据集

线性回归数据集

相关系数检验:

df.corr()

相关系数

我们希望自变量与因变量之间的关系尽可能强(price-area、price-people),自变量之间的关系尽可能弱(area-people)。如果自变量之间的关系太强(共线性),从矩阵计算的角度,可能该解无唯一解,因为数据集矩阵非满秩,不可求逆运算。从变量间关系看,比如人口数量会影响房屋面积的大小建设,所以?交叉影响下,这个相关系数是动态变化的。

回归拟合

回归拟合的方法有两种:最小二乘法,梯度下降法

最小二乘法,实际就是通过真实值减去拟合值,获得使残差最小的参数组合,这里不进行推导,直接给出结果:

θ= (XTX)−1XTY

梯度下降法,往斜率较大的方向每次下降一个值,当残差不再减少,则停止。

下文基于sklearn进行线性回归预测:

price - area散点图

from sklearn.linear_model import LinearRegression #加载sklearn线性回归包

X = pd.DataFrame(df.area)

y = df.price

reg = LinearRegression().fit(X, y) # 训练数据 通过fit传入数据,模型对象为reg

print('score:',reg.score(X, y)) #获得评估结果R2 越接近与1越好

print('常数项:',reg.intercept_,'系数项:',reg.coef_)

plt.plot(np.arange(100,200,10),(reg.coef_*np.arange(100,200,10)+reg.intercept_),'b--')

plt.scatter(df.area,df.price,color='red',marker='x')

plt.show()

拟合结果

回归检验指标

解释方差分数

平均绝对误差

均方误差

均方对数误差平均值

中位数绝对误差

R²分数,决定系数

通常来说回归结果的检验,有如上方法,由于时间原因,这些方法不能再这里一一讲解,后续会有专题进行分享。

本次分享到此为止,后续将继续分享,如对您有帮助,请关注并转发支持谢谢。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190111G0FDP600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券