三、降维
这里的维度指降低特征的数量
【这里的降维不是指数组的维度】
方式:
1. 特征选择
2. 主成分分析
3. 神经网络【之后补充,它也有降维的作用】
1.特征选择
特征选择原因
- 冗余:部分特征的相关度高,容易消耗计算性能
- 噪声:部分特征对预测结果有负影响
概念:
特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征, 特征在选择前和选择后可以改变值、也不改变值,但是选择后的特征维数肯 定比选择前小,毕竟我们只选择了其中的一部分特征。
主要方法(三大武器):
Filter(过滤式): VarianceThreshold 【用方差过滤,方差为0说明这个特征没有影响,可以删除的特征,没有什么代表性】
Embedded(嵌入式):正则化、决策树、神经网络
Wrapper(包裹式)【使用较少】
sklearn特征选择API:
sklearn.feature_selection.VarianceThreshold
VarianceThreshold语法:
1)VarianceThreshold(threshold = 0.0)
删除所有低方差特征
2)Variance.fit_transform(X,y)
X:numpy array格式的数据[n_samples,n_features]
返回值:训练集差异低于threshold的特征将被删除。
默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。
VarianceThreshold流程
1)初始化VarianceThreshold,指定阀值方差
2)调用fit_transform
def var():
"""
特征选择-删除低方差的特征
:return: None
"""
var = VarianceThreshold(threshold=0.0)#默认0.0 相同的删除
data = var.fit_transform([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]])
print(data)
return None
结果显示:
输出结果:
【方差的阈值根据实际情况取,0到个位数都是可能的】
2. 主成分分析【PCA】
本质:PCA是一种分析、简化数据集的技术
目的:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
作用:可以削减回归分析或者聚类分析中特征的数量
【应用场景较少,当特征数量达到上百的时候,就要考虑要不要使用PCA去降低特征数量,因为数据量也会改变,特征数量也会变少】
【更低的维度表示更高维度的信息,可能会有信息差异,但不会影响表达信息是什么】
【有些方法是必须使用PCA进行降维的处理】【后续补充】
高维度数据容易出现的问题:
特征之间通常是线性相关的,为此需要使用PCA去去掉线性相关的特征,因为他们可以通过缩放得到
图解PCA:
降为如下的一维,数据由五个点损失为3个点
降为如下的一维,也会造成数据的损失
PCA降维:
数据点没有减少,而且维度降低了,尽可能的保证信息不损失的情况下降低维度
公式: 【具体的后续会补充】
PCA语法:
sklearn.decomposition.PCA
1)PCA(n_components=None)
将数据分解为较低维数空间
n_components:可以是小数【0,1】(小数是指保证数据保存百分之多少,人为。定,这 个需要根据经验设定)或整数(指减少到的特征数量,因为一般不知道要到多少,所以使用 较少)
2)PCA.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后指定维度的array
PCA流程:
1)初始化PCA,指定减少后的维度
2)调用fit_transform
def pca():
"""
主成分分析进行特征降维
:return: None
"""
pca = PCA(n_components=0.9)
data = pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
print(data)
return None
if __name__ == "__main__":
pca()
结果显示:
输出结果为:
案例:
探究:用户对物品类别的喜好细分降维
数据信息如下所示:
instacart: 把用户分成几个类别 【用户--购买的物品类别】
步骤:
1)合并各张表到一张表中【考察pandas使用】
pd.merge()
prior:product_id,order_id
products: product_id, aisle_id
orders: order_id, user_id
aisles: aisle_id, aisle
2)实施