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


Posted in Python onFebruary 24, 2020

何为共线性:

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

共线性产生原因:

变量出现共线性的原因:

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

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

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

多变量之间存在线性的关系。例如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 相关文章推荐
python的正则表达式re模块的常用方法
Mar 09 Python
Python的Scrapy爬虫框架简单学习笔记
Jan 20 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
python 使用正则表达式按照多个空格分割字符的实例
Dec 20 Python
Python 实现域名解析为ip的方法
Feb 14 Python
django获取from表单multiple-select的value和id的方法
Jul 19 Python
Flask框架中request、请求钩子、上下文用法分析
Jul 23 Python
python修改文件内容的3种方法详解
Nov 15 Python
Python如何通过百度翻译API实现翻译功能
Apr 02 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
Apr 23 Python
Python 实现PS滤镜的旋涡特效
Dec 03 Python
Python使用socket去实现TCP客户端和TCP服务端
Apr 12 Python
使用python实现多维数据降维操作
Feb 24 #Python
python数据预处理 :数据抽样解析
Feb 24 #Python
Python找出列表中出现次数最多的元素三种方式
Feb 24 #Python
Python流程控制常用工具详解
Feb 24 #Python
深入浅析Python 函数注解与匿名函数
Feb 24 #Python
python数据预处理方式 :数据降维
Feb 24 #Python
python实现PCA降维的示例详解
Feb 24 #Python
You might like
php使用json_encode对变量json编码
2014/04/07 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
2016/03/09 PHP
php 类中的常量、静态属性、非静态属性的区别
2017/04/09 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
对laravel in 查询的使用方法详解
2019/10/09 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
namespace.js Javascript的命名空间库
2011/10/11 Javascript
js 声明数组和向数组中添加对象变量的简单实例
2016/07/28 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
2017/01/21 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
React组件生命周期详解
2017/07/03 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
[02:56]DOTA2上海特锦赛小组赛解说FreeAgain采访花絮
2016/02/27 DOTA
python批量修改文件后缀示例代码分享
2013/12/24 Python
Django内容增加富文本功能的实例
2017/10/17 Python
OpenCV 模板匹配
2019/07/10 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
Python datetime包函数简单介绍
2019/08/28 Python
python 求10个数的平均数实例
2019/12/16 Python
python 正则表达式参数替换实例详解
2020/01/17 Python
Python 读取xml数据,cv2裁剪图片实例
2020/03/10 Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
2020/05/29 Python
Python数据相关系数矩阵和热力图轻松实现教程
2020/06/16 Python
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
无工作经验者个人求职信范文
2013/12/22 职场文书
治超工作实施方案
2014/05/04 职场文书
2014年党员整改措施范文
2014/09/21 职场文书
沈阳故宫导游词
2015/01/31 职场文书
python析构函数用法及注意事项
2021/06/22 Python
详解TypeScript的基础类型
2022/02/18 Javascript
Python+Selenium自动化环境搭建与操作基础详解
2022/03/13 Python