PCA 解决 多重共线性问题

学习链接:link
多重共线性是指自变量彼此相关的一种情况。当你拟合模型并解释结果时,多重共线性可能会导致问题。数据集的变量应该是相互独立的,以避免出现多重共线性问题。

线性回归中,多重共线性识别: 计算每一个自变量的 方差膨胀因子VIF.

我根据链接里,下载了钻石数据集,但是算出来的协方差矩阵有点不一样。根据90%的n_components_,我的结果只保留了一个特征。不知道是不是LabelEncode的时候的顺序不一致导致的问题。
而且这个数据集真正要对类别型变量进行编码的话,应该还要使用到OneHot编码吧。

下面是使用钻石数据集分析的代码,未完成:

# 使用kaggle钻石数据集探索PCA解决多重共线性
import pandas as pd
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
from sklearn.preprocessing import OneHotEncoder, LabelEncoder, LabelBinarizer, OrdinalEncoder
from sklearn.decomposition import PCA# 读取数据
diamonds_data = pd.read_csv(r"D:\someDatasetsForML\diamonds.csv", index_col=0)
pd.set_option('display.max_columns', 11)
print(diamonds_data.columns)# 对分类变量进行编码
# 这里就直接使用LabelEncoder
cols_to_encod = ['cut', 'color', 'clarity']  # 需要编码的列
for col in cols_to_encod:diamonds_data[col] = OrdinalEncoder().fit_transform(np.array(diamonds_data[col])[:,np.newaxis])# 由于price是标签,将它和z列交换一下位置,放到最后一列
data_price = diamonds_data['price']
diamonds_data.drop('price', axis=1, inplace=True)
diamonds_data = pd.concat([diamonds_data, data_price], axis=1)
print(diamonds_data)# 画出热力图,可视化观察每一个特征的相关性
# 先算出相关系数
corr_df = diamonds_data.corr()
# 设置bool索引mask
mask = np.zeros_like(corr_df, dtype=bool)
mask[np.triu_indices_from(diamonds_data, k=1)] = True
# 画出热力图
plt.figure(figsize=(12, 8), dpi=70)
cmap = sns.diverging_palette(220, 10, as_cmap=True)
sns.heatmap(corr_df, square=True, mask=mask, annot=True, cmap=cmap)
plt.show()
plt.close()
# 从热力图和协方差矩阵可以看出,有些自变量之间存在高度相关性。
# 可以直接删除掉有些相关特征,但是会造成信息的缺失。这里使用PCA降维解决。
pca = PCA(n_components=0.9)
pca.fit(diamonds_data)
print(pca.explained_variance_ratio_)print(diamonds_data['clarity'].unique())

下面是自己用鸢尾花数据集分析的代码:

# 使用kaggle钻石数据集探索PCA解决多重共线性
import pandas as pd
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
from sklearn.preprocessing import OneHotEncoder, LabelEncoder, LabelBinarizer, OrdinalEncoder,MinMaxScaler
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
from statsmodels.stats.outliers_influence import variance_inflation_factoriris_data = load_iris()
data = iris_data.data## 归一化,最大最小值
data = MinMaxScaler().fit_transform(data)## 计算协方差矩阵,画出热力图
corr_mat = np.corrcoef(data.T)
print(corr_mat)
#
# # 转换成df
# corr_df = pd.DataFrame(corr_mat, columns=iris_data.feature_names, index=iris_data.feature_names)plt.figure(figsize=(6, 4), dpi=80)
cmap = sns.diverging_palette(220, 10, as_cmap=True)
sns.heatmap(corr_mat, square=True, cmap=cmap, annot=True)
plt.show()# 计算VIF
vif_list = [variance_inflation_factor(data, i) for i in range(4)]
print("VIF:")
print(vif_list)# pca
pca = PCA(n_components=2)
data_pca2 = pca.fit_transform(data)
print('variance_ratio_:')
print(pca.explained_variance_ratio_)# 再次计算VIF
vif_list2 = [variance_inflation_factor(data_pca2, i) for i in range(2)]
print("vif_list2:")
print(vif_list2)

PCA 解决 多重共线性问题相关推荐

  1. 用matlab解决多重共线性问题,多重共线性和非线性回归的问题

    前几天她和我说,在百度里有个人连续追着我的回答,三次说我的回答错了.当时非常惊讶,赶紧找到那个回答的问题,看看那个人是怎么说.最终发现他是说多重共线性和非线性回归的问题,他认为多个自变量进行不能直接回 ...

  2. 用matlab解决多重共线性问题,几种关于多重共线性回归问题的解决方法

    在多元线性回归模型经典假设中,其重要假定之一是回归模型的解释变量之间不存在线性关系,也就是说,解释变量X1,X2,--,Xk中的任何一个都不能是其他解释变量的线性组合.如果违背这一假定,即线性回归模型 ...

  3. 逻辑回归中解决多重共线性问题

    解释变量理论上的高度相关与观测值高度相关没有必然关系,有可能两个解释变量理论上高度相关,但观测值未必高度相关,反之亦然.所以多重共线性本质上是数据问题. 造成多重共线性的原因有一下几种: 1.解释变量 ...

  4. 多重共线性问题的几种解决方法

    在多元线性回归模型经典假设中,其重要假定之一是回归模型的解释变量之间不存在线性关系,也就是说,解释变量X1,X2,--,Xk中的任何一个都不能是其他解释变量的线性组合.如果违背这一假定,即线性回归模型 ...

  5. 线性回归的多重共线性问题及其解决

    Content 线性回归的多重共线性 1. 前提 2. 由损失函数推导ω(基于最小二乘法OLS) 3. 上述计算结果不成立 3.1 多重共线性的机器学习解释 3.2 多重共线性的解决 4. Ridge ...

  6. 多重共线性问题如何解决?

    ​ 一.多重共线性说明 多重共线性一般是指:如果有两个或者多个自变量高度相关(相关系数大于0.8),难以区分一个自变量对因变量的影响和作用,将自变量相关性产生的后果定义为多重共线性,一般提出多重共线性 ...

  7. 【Python计量】多重共线性的检验和解决

    文章目录 一.多重共线性的产生原因 二.多重共线性的检验 1.简单相关系数法 2.方差膨胀因子法(variance inflation factor,VIF) 三.多重共线性的解决 我们以伍德里奇&l ...

  8. R语言之多重共线性的判别以及解决方法

    多重共线性(Multicollinearity)是指线性回归模型中的解释变量之间由于存在精确相关关系或高度相关关系而使模型估计失真或难以估计准确. 1.可以计算X矩阵的秩qr(X)$rank,如果不是 ...

  9. excel计算二元线性回归_多重共线性及解决方法(附R语言代码)

    一.多重共线性及其危害 我有一组自变量: 它们满足下列关系: 那么我们称这四个变量间存在多重共线性. 这就意味着,一个变量可以被另外几个变量来解释,这就会带来两个后果 1.尽管系数估计的无偏性没有收到 ...

最新文章

  1. 点击通知栏后打开Activity,并传参
  2. python下载的文件放在哪里的-python实现下载文件的三种方法
  3. CTFshow 文件包含 web81
  4. 毕业后的五年拉开大家差距的原因在哪里?
  5. 《TOMCAT权威指南》摘抄
  6. Linux服务器重启失败,报错Readonly File system
  7. dsp广告和信息流广告区别_360展示广告与其他信息流平台的区别
  8. 面试官:Spring代理目标bean时为何通过TargetSource类型对目标bean封装?
  9. 详解学习C#的方法和步骤
  10. 仿照微信的效果,实现了一个支持多选、选原图和视频的图片选择器
  11. 基于docker搭建zookeeper集群、kafka集群(多台真机之间的集群)
  12. CF刷刷水题找自信 2
  13. 银河麒麟双击deb包无法安装
  14. Flymcu烧录出错
  15. 火狐浏览器模拟发送post请求
  16. 计算机管理格式化硬盘,如何将电脑硬盘格式化?笔记本硬盘格式化的操作方法...
  17. java生成密码生成
  18. Java连接打印机打印二维码
  19. 非常好用的一款在线甘特图工具
  20. 7-3 地下迷宫探索(30 分)(dfs)

热门文章

  1. Java学习路线-19:日期操作类Date、SimpleDateFormat
  2. 高考专科分数计算机,专科学校排名及分数线 200分能上专科吗
  3. 数据库事务ACID原则学习分享
  4. php透视图,第五十七课 利用透视尺绘制透视图-透视尺基本篇2-
  5. 子网掩码的两种计算方式
  6. 第一次作业——自我介绍+软工五问(热身运动)
  7. python爬虫__第一个爬虫程序
  8. 在线语音合成 讯飞 5-2-1
  9. 软件项目风险评估计划
  10. JAVA进程突然挂掉