python数据预处理 :数据降维

数据为什么要降维

数据降维能够下降模型的计算量并减小模型运行时间、下降噪音变量信息对于模型结果的影响、便于经过可视化方式展现归约后的维度信息并减小数据存储空间。所以,大多数状况下,当咱们面临高维数据时,都须要对数据作降维处理。python

数据降维有两种方式:特征选择,维度转换git

特征选择

特征选择指根据必定的规则和经验,直接在原有的维度中挑选一部分参与到计算和建模过程,用选择的特征代替全部特征,不改变原有特征,也不产生新的特征值。
特征选择的降维方式好处是能够保留原有维度特征的基础上进行降维,既能知足后续数据处理和建模需求,又能保留维度本来的业务含义,以便于业务理解和应用。对于业务分析性的应用而言,模型的可理解性和可用性不少时候要有限于模型自己的准确率、效率等技术指标。例如,决策树获得的特征规则,能够做为选择用户样本的基础条件,而这些特征规则即是基于输入的维度产生。github

维度转换

这个是按照必定数学变换方法,把给定的一组相关变量(维度)经过数学模型将高纬度空间的数据点映射到低纬度空间中,而后利用映射后变量的特征来表示原有变量的整体特征。这种方式是一种产生新维度的过程,转换后的维度并不是原来特征,而是以前特征的转化后的表达式,新的特征丢失了原有数据的业务含义。 经过数据维度变换的降维方法是很是重要的降维方法,这种降维方法分为线性降维和非线性降维两种,其中经常使用的表明算法包括独立成分分析(ICA),主成分分析(PCA),因子分析(Factor Analysis,FA),线性判别分析(LDA),局部线性嵌入(LLE),核主成分分析(Kernel PCA)等。web

使用python作降维处理

import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.decomposition import PCA

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

# 看一下数据是
df.head()


     RI	     Na	 Mg	Al	    Si	    K	    Ca	    Ba	    Fe	  Type
0	1.52101	13.64	4.49	1.10	71.78	0.06	8.75	0.0	0.0	1
1	1.51761	13.89	3.60	1.36	72.73	0.48	7.83	0.0	0.0	1
2	1.51618	13.53	3.55	1.54	72.99	0.39	7.78	0.0	0.0	1
3	1.51766	13.21	3.69	1.29	72.61	0.57	8.22	0.0	0.0	1
4	1.51742	13.27	3.62	1.24	73.08	0.55	8.07	0.0	0.0	1

# 有完好失值
df.isna().values.any()
# False 没有缺失值

# 获取特征值
X = df.iloc[:, :-1].values
# 获取标签值
Y = df.iloc[:,[-1]].values
# 使用sklearn 的DecisionTreeClassifier判断变量重要性
# 创建分类决策树模型对象
dt_model = DecisionTreeClassifier(random_state=1)
# 将数据集的维度和目标变量输入模型
dt_model.fit(X, Y)
# 获取全部变量的重要性
feature_importance = dt_model.feature_importances_
feature_importance
# 结果以下
# array([0.20462132, 0.06426227, 0.16799114, 0.15372793, 0.07410088, 0.02786222, 0.09301948, 0.16519298, 0.04922178])
# 作可视化
import matplotlib.pyplot as plt

x = range(len(df.columns[:-1])) 
plt.bar(left= x, height=feature_importance)
plt.xticks(x, df.columns[:-1])

在这里插入图片描述
可见Rl、Mg、Al、Ba的重要性比较高,通常状况下变量重要性得分接近80%,基本上已经能够解释大部分的特征变化。算法

PCA降维dom

# 使用sklearn的PCA进行维度转换
# 创建PCA模型对象 n_components控制输出特征个数
pca_model = PCA(n_components=3)
# 将数据集输入模型
pca_model.fit(X)
# 对数据集进行转换映射
pca_model.transform(X)
# 得到转换后的全部主成分
components = pca_model.components_
# 得到各主成分的方差
components_var = pca_model.explained_variance_
# 获取主成分的方差占比
components_var_ratio = pca_model.explained_variance_ratio_
# 打印方差
print(np.round(components_var,3))
# [3.002 1.659 0.68 ]
# 打印方差占比
print(np.round(components_var_ratio,3))
# [0.476 0.263 0.108]