如果特征多,信息量少,噪声高。此时需要特征降维,一般有两种方式。
1. 特征选择
一般是人为筛选,主要方法:过滤式(方差阈值 VarianceThreshold),嵌入式(正则化,决策树),包裹式。
这里介绍一下方差阈值:假设某特征的特征值只有0和1,并且在所有输入样本中,95%的实例的该特征取值都是1,那就可以认为这个特征作用不大。如果100%都是1,那这个特征就没意义了。当特征值都是离散型变量的时候这种方法才能用,如果是连续型变量,就需要将连续变量离散化之后才能用。
python代码如下:
from sklearn.feature_selection import VarianceThreshold
from sklearn.decomposition import PCAdef var():"""特征选择-删除低方差的特征:return: None"""# 默认参数选择是删除方差为0的特征,也就是相同的特征,这个选择按照效果来var = VarianceThreshold(threshold=0.0)data = var.fit_transform([[0,3,4,5], [0,1,4,3], [0,1,1,3]])print(data)return None
运行结果:
可见全为0的特征消除了
2. PCA(Principal Component Analysis)主成分分析
高维数据可能相关度比较大,比如之间的关系有缩放,加减。PCA是一种分析和简化的技术,损失少量信息来达到降维的目的。
实际工作中可以削减回归分析或者聚类分析中的特征数量。一般是特征数量达到上百的时候,考虑降维问题,PCA之后数据也会改变,数量也会减少。
python代码如下:
def pca():"""特征选择-主成分分析进行特征降维:return: None"""# 百分比范围(0.9-0.95比较常用)或者特征保留个数pac = PCA(n_components = 0.9)# 结果的值并没有实际意义,是新的数据data = pac.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])print(data)return Noneif __name__ == "__main__":pca()
运行结果:
数量类型:离散型数据:记录不同类别个体的数目所得到的数据,又称计数数据,所有这些数据全部是整数,区间内不可分。(多用于分类)
连续型数据:变量可在某一个范围内取值,区间可分。(多用于回归)