如何对一个变量数据进行正则判定_数值数据与数值数据的分析

e83ceac0fb4939d31313eeaee20bf99f.png

数值型数据的分析通常采用相关分析和回归分析。

一、相关分析

相关分析检验两个变量是否存在线性关系。通过散点图可以初步判断两者关系,然后计算相关系数,并检验相关系数的显著性。可参考

xls:Pearson, Spearman, Kendall 三大相关系数简单介绍​zhuanlan.zhihu.com
cde2d1ebd43564248480774af4e7d34a.png

二、简单线性回归

线性回归是研究数值型自变量对数值型因变量的影响,并得到回归模型。

前提假设

  1. 自变量与因变量存在线性关系;
  2. 自变量是固定的;
  3. 误差项服从正态分布,均值为0,不同自变量的对应的误差项方差相等;
  4. 因变量服从正态分布,方差等于误差项方差;
  5. 所有样本独立。

计算

目标损失函数

均方误差

选择相对较好的模型的顺序:方差小,偏差小 > 方差小,偏差大 > 方差大,偏差小 > 方差大,偏差大。

方差小,偏差大 之所以在实际中排位相对靠前,是因为它比较稳定。尤其当样本量与总体量相差较大,为了在预测新数据的稳定,更追求方差小的模型。

模型检验

  • F检验确定模型的显著性
  • t检验确定系数的显著性,一元回归中t检验等同F检验
  • 残差图或残差概率图检验残差是否方差相等且正态。残差-x 的散点图应该在水平带之间,且标准化残差在-2~2之间
  • 用VIF检验多重共线性,VIF>10 严重共线性
  • dubin_watson 检验残差自相关性,异方差。d=2则基本没有自相关关系,d靠近0存在正的相关关系,d靠近4则有负的相关关系。

判定系数

表示拟合程度,由于自变量个数影响残差平方和,因此在多元回归中更适合采用调整的
from sklearn.metrics import mean_squared_error as MSE
# 线性回归
model_LR = linear_model.LinearRegression()
model_LR.fit(x, y)
ypred = model_LR.predict(x)
model_LR.summary()
model_LR.score(x, y)  # 返回判定系数R^2,拟合程度
MSE(y, ypred)

# 判断多重共线性,直接计算相关系数或求方差膨胀系数VIF
coef = np.corrcoef(x)
from statsmodels.stats.outliers_influence import variance_inflation_factor

x1=np.column_stack((x,np.ones(x.shape[0])))
vif = [variance_inflation_factor(x.values,i) for i in x.shape[1]]


三、广义线性回归

回归一般是预测样本的值,通常情况下样本值是连续的。而广义线性回归是对简单线性回归的拓展,能预测连续值也能进行分类,比如逻辑回归。而且经典的线性回归假设比较严格,广义线性回归针对不满足的假设有匹配的方法。比如多重共线性、异方差等。

在广义线性模型中,要求Y和X满足指数分布簇。即

其中

是线性回归中的

模型损失函数即负的最大似然函数。通过对数似然函数对各参数求梯度,并利用梯度下降法求得模型参数。

a. 伯努利分布-->逻辑回归

model_LOGIT = linear_model.LogisticRegression()
model_LOGIT.fit(x, y)
model_LOGIT.summary()
ypred = model_LOGIT.predict(x)  # 返回label
yprob = model_LOGIT.predict_proba(x)  # 返回概率
model_LOGIT.score(x, y)  # 返回平均准确度
MSE(y, ypred)

b. 多项分布-->softmax 回归

多项分布是二项分布的推广,状态是两个或两个以上,可理解为多分类问题。

将因变量类别向量化,假设为k类,则每一类可以为k维0-1向量。

因此

==>

c. 岭回归

正则化项(Regularization)相当于对模型参数施加惩罚,压缩了参数的范围,限制了模型的复杂度,从而有助于缓解模型过拟合问题。正则项一般采用一,二范数,使得模型更具有泛化性,同时可以解决线性回归中自变量共线性问题

岭回归是在线性回归的基础上对损失函数进行L2正则,

前提

将可能存在共线性的变量特征尽量转换到一个范围,可进行中心化和标准化处理。

建模步骤:输入不同的α值,对比岭迹图,寻找最合适的α。标准化回归系数趋于稳定时的最小α值。K值越小则偏差越小,但方差越大。

# 岭回归
alphas=np.linspace(-10,-2,100)
coefs = []
for a in alphas:
    model_RR = linear_model.Ridge(alpha=a, fit_intercept=True, normalize=False)
    model_RR.fit(x, y)
    coefs.append(model_RR.coef_)
model_RR.score(x, y)
ypred = model_RR.predict(x)
MSE(y, ypred)
# 画岭迹图
ax = plt.gca()

ax.plot(alphas, coefs)
ax.set_xscale('log')
ax.set_xlim(ax.get_xlim()[::-1])  # reverse axis
plt.xlabel('alpha')
plt.ylabel('weights')
plt.title('Ridge coefficients as a function of the regularization')
plt.axis('tight')
plt.show()

d.Lasso回归

提高线性回归模型的精度, L1正则导致惩罚(或等于约束估计的绝对值之和)值使一些参数估计结果等于零,即当α越大,对参数压缩越大,参数就可能为0。这样可选择特征变量,同时虽然增加了模型偏差,但是大大降低了方差。

通常用模型的BIC, AIC来选择正则化权重α。

由于目标函数不可导,无法用梯度下降或牛顿法求解,而是采用最小角回归或坐标下降法。

# Lasso回归
model_Lasso = linear_model.Lasso(alpha=1, fit_intercept=True, normalize=False)
model_Lasso.fit(x,y)
y_pred = model_Lasso.predict(x)
model_Lasso.score(x, y)
MSE(y, y_pred)

e.Elastic回归

ElasticNet是Lasso和Ridge回归技术的混合体。它使用L1来训练并且L2优先作为正则化矩阵。当有多个相关的特征时,Lasso 会随机挑选他们其中的一个,而ElasticNet则会选择两个,继承循环状态下Ridge的一些稳定性。但在高度相关变量的情况下,它会产生群体效应。

# ElasticNet回归
model_Elastic = linear_model.ElasticNet(alpha=1, l1_ratio=0.5,fit_intercept=True, normalize=False)
model_Elastic.fit(x,y)
y_pred = model_Elastic.predict(x)
model_Elastic.score(x, y)
MSE(y, y_pred)

四、非线性回归

d79d97187c16c69bf4f168ee7e797a6c.png

a.对数线性回归

很多情况下,自变量和因变量没有直接的线性关系,而变量通过某种转化,比如对数变化后,二者就存在线性关系,那么就可以用线性回归进行计算。

对数线性模型

线性对数模型

对数对数模型
# 对数回归
model_ln = linear_model.LinearRegression()
model_ln.fit(np.log(x), y)
ypred = model_ln.predict(np.exp(x))
model_ln.score(np.exp(x), y)

b.指数回归

将自变量进行指数化,相当于新的自变量

# 指数回归
model_exp = linear_model.LinearRegression()
model_exp.fit(np.exp(x), y)
ypred = model_exp.predict(np.exp(x))
model_exp.score(np.exp(x), y)

c.倒数回归

# 倒数回归
model_d = linear_model.LinearRegression()
model_d.fit(1/x, 1/y)

d.S曲线回归

==>

# S曲线回归
model_s = linear_model.LinearRegression()
model_s.fit(np.exp(-x), 1/y)

e.多项式回归

多项式回归是指因变量不止与一次幂自变量相关,还与多次幂自变量相关,甚至还有自变量之间的交互作用相关。一般不采用三次以上幂的形式。相当于升维。在实际操作中,通常先把数据归一化,然后升维,再线性分析。

# 多项式回归
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScaler

def PolynomialRegression(degree):
    # degree 是最高次幂,将所有变量做1,2,...,degree次排列升维度
    return Pipeline([
        ('poly', PolynomialFeatures(degree=degree)),
        ('std_scale', StandardScaler()),
        ('lin_reg', linear_model.LinearRegression())
    ])

model_poly = PolynomialRegression(degree=2)
model_poly.fit(x, y)
ypred = model_poly.predict(x)
MSE(y, ypred)

五、协方差分析

协方差分析也称“共变量(数)分析”,是方差分析的引申和扩大。协变量是指与因变量有回归关系,对分类自变量的影响有干扰作用的自变量。比如说两组数据基线有差别,在进行对照实验后,实验后的结果需要考虑基线差别的这个因素。

协方差分析基本原理是将线性回归与方差分析结合起来,调整各组平均数和 F 检验的实验误差项,检验两个或多个调整平均数有无显著差异。

协方差分析本质还是用最小二乘法计算,因此在python中只要修改公式

from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
model = ols('y~x1+x2',data=df).fit() # 其中x1是分类变量且表示为string格式,x2是数值变量;若x1是整数格式,修改为C(x1)
model.params
model.summary()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值