一、特征降维含义
- 指在某些特定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程。因为在进行训练的时候,我们都是使用特征进行学习。如果特征本身存在问题或者特征之间相关性较强,对于算法学习预测影响较大,防止冗余信息。
二、特征降维的两种方式
方法一:特征选择
- 数据中包含冗余或相关变量(或特征、属性、指标等),旨在从原有特征中找出主要特征
- 方法:
- Filter(过滤式):主要考虑特征本身特点、特征与特征与目标值之间的关联
a. 方差选择法:低方差特征过滤(方差越小,特征不明显,就不是能够衡量特征的指标)
b. 相关系数:就是统计学中所学的相关系数知识,特征与特征之间的相关程度 - Embedded(嵌入式):算法自动选择特征,特征值与目标值之间的关联
a. 决策树:信息熵、信息增益
b. 正则化:L1,L2
c. 深度学习:卷积等
涉及API(Embedded等算法学习阶段再了解,这里主要是说明Filter型中的方差选择法和相关系数法)
sklearn.feature_selection.VarianceThreshold(threshold= 0.0)
- 删除所有低方差特征
- VarianceThreshold.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]
返回值:训练集差异低于threshold的特征将被删除。默认是保留所有非零方差特征,即删除所有样本中具有相同值的特征。
- 相关系数法
pyhon中的scipy下有专门计算相关系数的工具,导入包即可,当然也可以通过散点图观察是否具有相关关系,对于这一部分的处理可以参考多元回归中的多重共线性的处理方式
from scipy.stats import pearsonr
pearsonr(data["变量1"],data["变量2"])
import pandas as pd
from sklearn.feature_selection import VarianceThreshold
from scipy.stats import pearsonr
def variance_demo():
"""
低方差过滤
"""
data = pd.read_csv("data.txt")
"取出非目标列"
data = data.iloc[:, :3]
transfer = VarianceThreshold(threshold=5)
data_new1 = transfer.fit_transform(data)
print("data:\n",data_new1,data_new1.shape)
"""
相关关系
"""
data_new2 = pearsonr(data["编码"],data["里程数"])
print("相关系数\n",data_new2)
return
if __name__ == '__main__':
variance_demo()
方法二:主成分分析(PCA)
- 定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量
- 作用:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息
- 应用:回归分析或者聚类分析当中
涉及API
sklearn.decomposition.PCA(n_compents=None)
- 将数据分解为较低维数空间
- n_compents:
小数:表示保留百分之多少的信息
整数:减少到多少特征 - PCA.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后指定维度的array
import pandas as pd
from sklearn.decomposition import PCA
def pca_demo():
data = pd.read_csv('data.txt')
data = data.iloc[:,:3]
transfer = PCA(n_components=2)
data_new = transfer.fit_transform(data)
print("data_new\n",data_new)
return
if __name__ == '__main__':
pca_demo()