天天看点

数据分析-回归

@回归

回归(Regression)这一概念最早由英国生物统计学家高尔顿和他的学生皮尔逊在研究父母亲和子女的身高遗传特性时提出“子女的身高趋向于高于父母的身高的平均值,但一般不会超过父母的身高。”-- 《遗传的身高向平均数方向的回归》

如今,我们做回归分析时所讨论的“回归”和这种趋中效应已经没有任何瓜葛了,它只是指源于高尔顿工作的那样——用一个或多个自变量来预测因变量的数学方法。

在一个回归模型中,我们需要关注或预测的变量叫做因变量,我们选取的用来解释因变量变化的变量叫做自变量。

1、回归算法

1) 线性回归

linear_model.LinearRegression

一元线性回归

当自变量只有1个时,假设𝑦=𝑤0+𝑤1* 𝑥+𝜀,其中𝑤0为截距,𝑤1为回归系数,𝜀 为随机误差项(noise),假设 𝜀~𝑁(0, 𝜎^2 ),则随机变量𝑦~𝑁(𝑤0+𝑤1 𝑥, 𝜎^2)

给定样本集合D={(𝑥1, 𝑦1 ), …, (𝑥𝑛, 𝑦𝑛 )},目标是找到(𝑤0,𝑤1),使得所有样本点尽可能与直线𝑦=𝑤0+𝑤1*𝑥近。

目标函数:

数据分析-回归

求导,令导数等于零,将观测值Xi,Yi分别带入,最小二乘求解最优的𝑤0,𝑤1。

多元线性回归

当自变量只有n个时(n>1),n维空间的直线可以表示为𝑦=𝑤0+𝑤1* 𝑥1+w2x2+…+wnxn+𝜀

给定样本集合D={(𝑥11,…,xn1, 𝑦1 ), …, (𝑥1k,…,xnk, 𝑦k )},目标是找到(𝑤0,𝑤1,…,wn),使得所有样本点尽可能与直线𝑦=𝑤0+𝑤1* 𝑥1+w2x2+…+wnxn近。

目标函数:

数据分析-回归

其中x为n维向量(x1,…,xn)

数据分析-回归

2) 岭回归

linear_model.Ridge

岭回归在最小二乘法的目标函数上加上一个对𝒘的惩罚函数,避免过拟合。

其目标函数为

数据分析-回归

求导可得:

数据分析-回归

3) LASSO回归

linear_model.Lasso

LASSO 是一种系数压缩估计方法,它的基本思想是通过追求稀疏性自动选择重要的变量

LASSO 的目标函数:

数据分析-回归

LASSO没有解析表达式,常用的求解算法包括坐标下降法、LARS算法和ISTA算法等

4)弹性网络回归

linear_model.ElasticNet

弹性网络回归综合岭回归与LASSO回归。

数据分析-回归

5) 贝叶斯岭回归

linear_model.BayesianRidge

贝叶斯回归链接

6)RANSAC

linear_model.RANSACRegressor

当数据集中有较多的离群值,使用RANSAC算法针对离群值做处理,根据数据子集(所谓的内点)拟合回归模型。

RANSAC算法流程:

1)随机选择一定数量的样本作为内点拟合模型

2)用模型测试其他所有的点,把落在给定范围内的点放入内点集

3)调整模型中使用的所有内点

4)用内点重新拟合模型

5)评估模型预测结果与内点集相比较的误差

6)如果性能达到自定义的阈值或指定的迭代次数,则终止,否则返回步骤1

7) K近邻回归

neighbors.KNeighborsRegressor

K近邻回归链接

8)支持向量回归

svm.SVR

推荐链接:

支持向量回归

9)决策树回归

tree.DecisionTreeRegressor

推荐链接:

决策树回归

2、方法与属性

方法

fit() # 拟合

predict() #预测

score() #评价 R方 score(X_test,y_test)

属性

coef_ #回归系数

intercept_ #截距

3、评价

3.1 coefficient of determination

决定系数也称为拟合优度,决定系数越大,自变量对因变量的解释程度越高,拟合优度就越好,最高值为1。

通常使用𝑅^2进行模型评价。

𝑅^2

=解释变化/总变化

=1–未解释的变化/总变化

数据分析-回归

其中:总平方和(实际值与均值的差)

数据分析-回归

残差平方和(实际值与预测值的差)

数据分析-回归

R方统计有一个主要缺陷。当回归模型中自变量增加时,其值要么保持不变,要么随着新的自变量的增加而增加。

当自变量足够多时总会得到模型拟合良好,而实际却可能并非如此。

因此引入调整R方。

数据分析-回归

其中:

n表示数据集中的数据点数量

k表示自变量的个数

R代表模型确定的R方值

3.2 均方误差(mean squared error):

数据分析-回归

3.3 平均绝对误差(mean absolute error):

数据分析-回归

3.4 其它评价方法

数据分析-回归

3.5 sklearn实现

平均绝对误差:

metrics.mean_absolute_error

均方误差

metrics.mean_squared_error

均方对数误差

metrics.mean_squared_log_error

中值绝对误差

metrics.median_absolute_error

决定系数R^2

metrics.r2_score

参数:

(真实值,预测值)

4、多项式回归

在线性回归中,我们是寻找一条直线来尽可能的拟合数据。但是我们在大部分情况下并不满足简单的线性回归的。当自变量与因变量不是线性(直线)关系时,可采用多项式回归(Polynomial regression)。

(升维)

x = np.random.uniform(-3, 3, size = 100)
y=x*x*3+x*4+5+np.random.normal(0, 1, size = 100)
from sklearn.preprocessing import PolynomialFeatures
#(degree=2),增加二次项特征
#eg1:
# x  ,  y(标签/因变量)
#增加新的特征(degree=2)  x*x
# x ,  x*x,  y
#eg2:
#x1 ,x2, x3,  y(标签/因变量)
#增加   x1*x1,x2*x2,x3*x3,x1*x2,x1*x3,x2*x3二次项(degree=2)
#x1,x2,x3,x1*x1,x2*x2,x3*x3,x1*x2,x1*x3,x2*x3
poly = PolynomialFeatures(degree=2) # 添加特征(升维)
poly.fit(x)
X2 = poly.transform(x)
#X2为增加2次项后的数据
# 训练
lin_reg = LinearRegression()
lin_reg.fit(X2, y)
y_pred = lin_reg.predict(X2)
plt.scatter(x, y)
plt.scatter(x, y_pred, color = 'r')
plt.show()