何为共线性:

共线性问题指的是输入的自变量之间存在较高的线性相关度。共线性问题会导致回归模型的稳定性和准确性大大降低,另外,过多无关的维度计算也很浪费时间

共线性产生原因:

变量出现共线性的原因:

数据样本不够,导致共线性存在偶然性,这其实反映了缺少数据对于数据建模的影响,共线性仅仅是影响的一部分

多个变量都给予时间有共同或相反的演变趋势,例如春节期间的网络销售量和销售额都相对与正常时间有下降趋势。

多个变量存在一定的推移关系,但总体上变量间的趋势一致,只是发生的时间点不一致,例如广告费用和销售额之间,通常是品牌广告先进行大范围的曝光和信息推送,经过一定时间传播之后,才会在销售额上做出反映。

多变量之间存在线性的关系。例如y代表访客数,用x代表展示广告费用,那么二者的关系很可能是y=2*x + b

如何检验共线性:

检验共线性:

容忍度(Tolerance):容忍度是每个自变量作为因变量对其他自变量进行回归建模时得到的残差比例,大小用1减得到的决定系数来表示。容忍度值越小说明这个自变量与其他自变量间越可能存在共线性问题。

方差膨胀因子 VIF是容忍度的倒数,值越大则共线性问题越明显,通常以10作为判断边界。当VIF<10,不存在多重共线性;当10<=VIF<100,存在较强的多重共线性;当VIF>=100, 存在严重多重共线性。

特征值(Eigenvalue):该方法实际上就是对自变量做主成分分析,如果多个维度的特征值等于0,则可能有比较严重的共线性。

相关系数:如果相关系数R>0.8时就可能存在较强相关性

如何处理共线性:

处理共线性:

增大样本量:增大样本量可以消除犹豫数据量不足而出现的偶然的共线性现象,在可行的前提下这种方法是需要优先考虑的

岭回归法(Ridge Regression):实际上是一种改良最小二乘估计法。通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价来获得更实际和可靠性更强的回归系数。因此岭回归在存在较强共线性的回归应用中较为常用。

逐步回归法(Stepwise Regression):每次引入一个自变量进行统计检验,然后逐步引入其他变量,同时对所有变量的回归系数进行检验,如果原来引入的变量由于后面变量的引入而变得不再显著,那么久将其剔除,逐步得到最有回归方程。

主成分回归(Principal Components Regression):通过主成分分析,将原始参与建模的变量转换为少数几个主成分,么个主成分是原变量的线性组合,然后基于主成分做回归分析,这样也可以在不丢失重要数据特征的前提下避开共线性问题。

人工去除:结合人工经验,对自变量进行删减,但是对操作者的业务能力、经验有很高的要求。

部分方法python代码实现

import numpy as np
import pandas as pd
from sklearn.linear_model import Ridge
from sklearn.decomposition import PCA
from sklearn.linear_model import LinearRegression

# 导入数据
df = pd.read_csv('https://raw.githubusercontent.com/ffzs/dataset/master/boston/train.csv')

# 切分自变量
X = df.iloc[:, 1:-1].values

# 切分预测变量
y = df.iloc[:, [-1]].values

# 使用岭回归处理
import matplotlib.pyplot as plt
plt.figure(figsize=(8,6))
n_alphas = 20
alphas = np.logspace(-1,4,num=n_alphas)
coefs = []
for a in alphas:
  ridge = Ridge(alpha=a, fit_intercept=False)
  ridge.fit(X, y)
  coefs.append(ridge.coef_[0])
ax = plt.gca()
ax.plot(alphas, coefs)
ax.set_xscale('log')
handles, labels = ax.get_legend_handles_labels()
plt.legend(labels=df.columns[1:-1])
plt.xlabel('alpha')
plt.ylabel('weights')
plt.axis('tight')
plt.show()

python数据预处理 :数据共线性处理详解

只有nox有些许波动。

# 主成分回归进行回归分析
pca_model = PCA()
data_pca = pca_model.fit_transform(X)

# 得到所有主成分方差
ratio_cumsum = np.cumsum(pca_model.explained_variance_ratio_)
# 获取方差占比超过0.8的索引值
rule_index = np.where(ratio_cumsum > 0.9)
# 获取最小的索引值
min_index = rule_index[0][0]
# 根据最小索引值提取主成分
data_pca_result = data_pca[:, :min_index+1]
# 建立回归模型
model_liner = LinearRegression()
# 训练模型
model_liner.fit(data_pca_result, y)
print(model_liner.coef_)
#[[-0.02430516 -0.01404814]]

以上这篇python数据预处理 :数据共线性处理详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

标签:
python,数据,共线性

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com

评论“python数据预处理 :数据共线性处理详解”

暂无“python数据预处理 :数据共线性处理详解”评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。