回归分析(五)—— 其他回归分析

主要内容
回归分析概述
一元线性回归分析
多元线性回归
逻辑回归
其他回归分析

五、其他回归分析

多项式回归

线性回归的局限性是只能应用于存在线性关系的数据中,但是在实际生活中,很多数据之间是非线性关系,虽然也可以用线性回归拟合非线性回归,但是效果会变差,这时候就需要对线性回归模型进行改进,使之能够拟合非线性数据。多项式回归模型是线性回归模型的一种,此时回归函数关于回归系数是线性的。由于任一函数都可以用多项式逼近,因此多项式回归有着广泛应用。

研究一个因变量与一个或多个自变量间多项式的回归分析方法,称为多项式回归(Polynomial Regression)。如果自变量只有一个时,称为一元多项式回归;如果自变量有多个时,称为多元多项式回归。在一元回归分析中,如果因变量y与自变量x的关系为非线性的,但又找不到适当的函数曲线来拟合,则可以采用一元多项式回归。在这种回归技术中,最佳拟合线不是直线,而是一个用于拟合数据点的曲线。
多项式回归的最大优点是可以通过增加x的高次项对观测点进行逼近,直到满意为止。多项式回归在回归分析中占有重要地位,因为任意函数都可以分段用多项式逼近。

(1)准备数据

import numpy as np
import matplotlib.pyplot as plt
x = np.random.uniform(-3,3,size=100)  # 产生100个随机数
X = x.reshape(-1,1)  # 将x变成矩阵,1行1列的形式
y = 0.5 * x**2 + x + 2 + np.random.normal(0,1,size=100)
# 数据中引入噪声
plt.scatter(x,y)
plt.show()

在这里插入图片描述
(2)线性回归

from sklearn.linear_model import LinearRegression
# 线性回归
lin_reg = LinearRegression()
lin_reg.fit(X,y)
y_predict = lin_reg.predict(X)
plt.rcParams['font.family']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.title('线性回归')
plt.scatter(x,y)
plt.plot(x,y_predict,color='r')
plt.show()

在这里插入图片描述
(3)多项式回归

from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2)
# 设置最多添加几次幂的特征项
poly.fit(X)
x2 = poly.transform(X)
from sklearn.linear_model import LinearRegression
# 接下来的代码和线性回归一致
lin_reg2 = LinearRegression()
lin_reg2.fit(x2,y)
y_predict2 = lin_reg2.predict(x2)
plt.scatter(x,y)
plt.plot(np.sort(x),y_predict2[np.argsort(x)],color='r')
plt.title('多项式回归')

在这里插入图片描述
岭回归

岭回归(Ridge Regression)是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价,获得回归系数更为符合实际、更可靠的回归方法,对病态数据的耐受性远远强于最小二乘法。
岭回归主要适用于过拟合严重或各变量之间存在多重共线性的情况,它可以解决特征数量比样本量多的问题,另外,岭回归作为一种缩减算法可以判断哪些特征重要或者不重要,有点类似于降维,缩减算法可以看作是对一个模型增加偏差的同时减少方差。但是岭回归方程的R平方值会稍低于普通回归分析,但回归系数的显著性往往明显高于普通回归,在存在共线性问题和病态数据偏多的研究中有较大的实用价值。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Ridge,RidgeCV
# Ridge岭回归,RidgeCV带有广义交叉验证的岭回归
data=[
    [0.07,3.12],[0.41,3.82],[0.99,4.55],[0.73,4.25],[0.98,4.56],
    [0.55,3.92],[0.34,3.53],[0.03,3.15],[0.13,3.11],[0.13,3.15],
    [0.31,3.47],[0.65,4.12],[0.73,4.28],[0.23,3.48],[0.96,4.65],
    [0.62,3.95],[0.36,3.51],[0.15,3.12],[0.63,4.09],[0.23,3.46],
    [0.08,3.22],[0.06,3.19],[0.92,4.63],[0.71,4.29],[0.01,3.08],
    [0.34,3.45],[0.04,3.16],[0.21,3.36],[0.61,3.99],[0.54,3.89]]
#生成X和y矩阵
dataMat = np.array(data)
X = dataMat[:,0:1]  # 变量x
y = dataMat[:,1]  # 变量y
# 岭回归
# model = Ridge(alpha=0.5)
model = RidgeCV(alphas=[0.1,1.0,10.0])
# RidgeCV可以设置多个参数,算法使用交叉验证获取最佳参数值
model.fit(X,y)  # 线性回归建模
print('系数矩阵:',model.coef_)
print('线性回归模型:\n',model)
# print('交叉验证最佳alpha值',model.alpha_)  
# 只有在使用RidgeCV算法时才有效
# 使用模型预测
predicted = model.predict(X)
# 绘制散点图 参数:x横轴 y纵轴
plt.scatter(X,y,marker='o')
plt.plot(X,predicted,c='r')
# 绘制x轴和y轴坐标
plt.xlabel('x')
plt.ylabel('y')
# 显示图形
plt.show()

在这里插入图片描述
Lasso回归

岭回归无法剔除变量,而Lasso(Least Absolute Shrinkage and Selection Operator)回归模型,将惩罚项由L2范数变为L1范数,可以将一些不重要的回归系数缩减为0,达到剔除变量的目的。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import r2_score
# def main()
# 产生一些稀疏数据
np.random.seed(42)
n_samples,n_features = 50,100
X = np.random.randn(n_samples,n_features)
# randn(...)产生的是正态分布的数据
coef = 3* np.random.randn(n_features)
# 每个特征对应一个系数
inds = np.arange(n_features)
np.random.shuffle(inds)
coef[inds[10:]] = 0
# 稀疏化系数--随机地把系数向量1x200的其中10个值变为0
y = np.dot(X,coef)
# 添加噪声:零均值,标准差为 0.01 的高斯噪声
y += 0.01 * np.random.normal(size=n_samples)
# 把数据划分成训练集和测试集
n_samples = X.shape[0]
X_train,y_train = X[:n_samples//2],y[:n_samples//2]
X_test,y_test = X[n_samples//2:],y[n_samples//2:]
# 训练 Lasso 模型
from sklearn.linear_model import Lasso
alpha = 0.1
lasso = Lasso(alpha=alpha)
y_pred_lasso = lasso.fit(X_train,y_train).predict(X_test)
r2_score_lasso = r2_score(y_test,y_pred_lasso)
print("R^2 on test data:%f"% r2_score_lasso)
plt.plot(lasso.coef_,color='gold',linewidth=2,label='Lasso coefficients')
plt.title("Lasso R^2:%f"% r2_score_lasso)
plt.show()

# R^2 on test data:0.518282

在这里插入图片描述
逐步回归

在处理多个自变量时,需要使用逐步回归(Stepwise Regression)。逐步回归中,自变量的选择是在一个自动的过程中完成的,其中包括非人为操作。
逐步回归是通过观察统计的值,如R-square,t-stats和AIC指标,来识别重要的变量并通过同时添加/删除基于指定标准的协变量来拟合模型。

逐步回归是通过观察统计的值,如R-square,t-stats和AIC指标,来识别重要的变量并通过同时添加/删除基于指定标准的协变量来拟合模型。

常用的逐步回归方法有:

标准逐步回归法做两件事情。即增加和删除每个步骤所需的预测。
向前选择法从模型中最显著的预测开始,然后为每一步添加变量。
向后剔除法与模型的所有预测同时开始,然后在每一步消除最小显著性的变量。

逐步回归的目的是使用最少的预测变量数来最大化预测能力,是处理高维数据集的方法之一。

如何正确选择回归模型

在多类回归模型中,基于自变量和因变量的类型,数据的维数以及数据的其它基本特征的情况下,选择最合适的技术非常重要。以下是选择正确的回归模型的关键因素:

1. 数据探索是构建预测模型的必然组成部分。在选择合适的模型时,比如识别变量的关系和影响时,它应该首选的一步。

2.比较适合于不同模型的优点,我们可以分析不同的指标参数,如统计意义的参数,R-square,Adjusted R-square,AIC,BIC以及误差项,另一个是Mallows’ Cp准则。这个主要是通过将模型与所有可能的子模型进行对比(或谨慎选择他们),检查在你的模型中可能出现的偏差。

3.交叉验证是评估预测模型最好的方法。在这里,将你的数据集分成两份(一份做训练和一份做验证)。使用观测值和预测值之间的一个简单均方差来衡量你的预测精度。

4.如果你的数据集是多个混合变量,那么你就不应该选择自动模型选择方法,因为你应该不想在同一时间把所有变量放在同一个模型中。

5.它也将取决于你的目的。可能会出现这样的情况,一个不太强大的模型与具有高度统计学意义的模型相比,更易于实现。

6.回归正则化方法(Lasso,Ridge和ElasticNet)在高维和数据集变量之间多重共线性情况下运行良好。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shi_jiaye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值