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

今天小编就为你们分享一篇python数据预处理 :数据共线性处理详解,具备很好的参考价值,但愿对你们有所帮助。一块儿跟随小编过来看看吧
何为共线性:python

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

共线性产生缘由:程序员

变量出现共线性的缘由:github

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

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

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

多变量之间存在线性的关系。例如y表明访客数,用x表明展现广告费用,那么两者的关系极可能是y=2*x + bapp

如何检验共线性:svg

检验共线性:学习

容忍度(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()

只有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技术,分享一些学习的方法和须要留意的小细节在这里插入图片描述