特征降维
- 降维是指在某些限定的条件下,降低随机变量(特征)的个数,得到一组‘不相关’的主变量的过程
- 效果:特征与特征之间不相关
1、降维的两种方式
- 特征选择
- 主成分分析
2、什么是特征选择?
- 定义:数据中包含冗余或相关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征。
- 方法:
- Filter(过滤式):主要探究特征本身特点、特征与特征和目标值之间关联
方差选择法:低方差特征过滤
相关系数 - Embedded(嵌入式):算法自动选择特征(特征与目标值之间的关联)
决策树:信息熵、信息增熵
正则化:L1、L2
深度学习:卷积等
- Filter(过滤式):主要探究特征本身特点、特征与特征和目标值之间关联
- 模块:sklearn.feature_selection
3、过滤式+计算相关系数
1)低方差特征过滤
删除低方差的一些特征,前面讲过方差的意义、再结合方差的大小来考虑这个方式的角度
- 特征方差小:某个特征大多样本的值比较相近
- 特征方差大:某个特征很多样本的值都有差别
2)API
- sklearn.feature_selection.VarianceThreshold(threshold=0.0)
- 删除所有低方差特征
- Variance.fit_transform(X)
- X:numpy array格式的数据[n_samples,n_features]
- 返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。
- from scipy.stats import pearsonr
- x:(N,) array_like
- y:(N,) array_like returns:相关系数,p值
3)数据计算
from sklearn.feature_selection import VarianceThreshold
from scipy.stats import pearsonr
def variance_demo():
'''
过滤低方差特征
:return:
'''
# 1、获取数据
data = pd.read_csv('dating.txt')
data = data.iloc[:,:3]
# 2、实例化一个转换器类
transfer = VarianceThreshold(threshold=5)
# 3、调用fit_transform
data_new = transfer.fit_transform(data)
print('data_new:\n', data_new)
# 计算某两个变量之间的相关系数
r=pearsonr(data['pe_ratio'],data['pb_ratio'])
print(r)
return None
if __name__ == '__main__':
variance_demo()
4、什么是主成分分析?
- 定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量。
- 作用:是数据维度压缩,尽可能降低原数据的维度(复杂度),损失少量信息。
- 应用:回归分析或者聚类分析当中。
5、API
- sklearn.decomposition.PCA(n_components = None)
- 将数据分解为较低维空间
- n_components:
- 小数:表示保留百分之多少的信息
- 整数:减少到多少特征
- PCA.fit_transform(X) X:numpy array格式的数据[n_samples,n_features]
- 返回值:转换后指定维度的array
6、代码
from sklearn.decomposition import PCA
def pac_demo():
'''
PCA降维
:return:
'''
data=[[2,8,4,5],[6,3,0,8],[5,4,9,1]]
# 1、实例化一个转换器类
tansfer = PCA(n_components=2)
# 2、调用fit_transform
data_new = tansfer.fit_transform(data)
print('data_new:\n', data_new)
return None
if __name__ == '__main__':
pac_demo()
降维到2维
降维到3维