降维: 减少特征,称之为降维(这里的维不再是 数组里面的维度了)
若现在有100个特征,减少一个 也可以称之为降维
1. 特征选择
原因:
1.冗余:部分特征相关度高,容易消耗计算性能
2.噪音: 部分特征对预测结果有影响
三大武器:
1. filter(过滤式): variance threshold (从方差的角度去过滤)
API:
sklearn.feature_selection.VarianceThreshold
variance = VarianceThreshold(threshold=0) ---- 删除所有低方差特性
variance.fit_transform(X)
X: numpy array数据格式
返回值:训练集低于threshold的特征被删除。默认值是保留非0方差特征,即删除样本中具有相同值特征
eg:
1 def Var(): # 方差过滤式 2 3 ''' 4 过滤式 5 :return:None 6 ''' 7 8 var = VarianceThreshold(threshold=0) 9 x = var.fit_transform([[1, 2, 3, 6], 10 [1, 6, 6, 8], 11 [1, 21, 6, 7]]) 12 print(x)
2. embedded(嵌入式): 正则化,决策树
3. wrapper(包裹式)
2.主成分分析(数据也会改变,特征数量也会减少 eg:两个特征差不多,就合并两个特征)
API: sklearn.decomposition
本质:PCA是一种分析,简化数据集的技术
目的:是数据维数压缩,尽可能降低原数据维数(复杂度),损失少量信息
作用:可以削减回归分析或者聚类分析中特征的数量
前提:特征数量达到上百, 考虑数据的简化
PCA(n_components=None) n_components=0.9 (n_components为保留多少的特征,一般在0.9-0.95)
将数据分解为低维数空间
PCA.fit_transform(X)
X: numpy array格式的数据[n_samples, n_features]
返回值: 转换后指定维度的array
def Pca(): pca = PCA(n_components=0.92) x = pca.fit_transform([[1, 2, 3, 6], [1, 6, 6, 8], [1, 21, 6, 7]]) print(x)
补充:
'''
在我们实践中我们需要下载数据然后
pd.read_csv('path')
假如需要分析的数据在不同的表格里面我们可以(找两个表相同的columns)把多个表合并成一个表 pd.merge(lift, right, on=[''])
在把特征放在列 可以使用交叉表(特殊的分组表)pd.crosstab(row, column)
'''