8.特征降维
1)降维:就是在某些限定条件下,降低随机变量个数,得到一组“不相关”主变量的过程。
2)降维的两种方式
- 特征选择
- 主成分分析
1.特征选择
1.1 定义:
数据中包含冗余或无关变量,从原有特征中找出主要特征。
1.2 方法:
- Filter(过滤式):主要探究特征本身特点、特征与特征和目标值之间的关系
- 方差选择法:低方差特征过滤
- 相关系数
- Embedded(嵌入式):算法自动选择特征(特征与目标值之间的关联)
- 决策树:信息熵、信息增益
- 正则化:L1、L2
- 深度学习:卷积等
2 低方差特征过滤
删除低方差的一些特征。
- 特征方差小:某个特征大多样本的值比较接近
- 特征方差大:某个特征大多样本的值都有差别
2.1 低方差特征过滤API
- sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
- 删除所有低方差特征
- Variance.fit_transfrom(X)
- X:array格式的数据
- 返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。
3 相关系数
- 主要实现方式
- 皮尔逊相关系数
- 斯皮尔曼相关系数
3.1 皮尔逊相关系数
反应变量之间相关关系密切程度的统计指标
- scipy.stats.pearsonr(x,y)
3.2 斯皮尔曼下相关系数
反应变量之间相关关系密切程度的统计指标
特点
-
斯皮尔曼相关系数表明 X (自变量) 和 Y (因变量)的相关方向。 如果当X增加时, Y 趋向于增加, 斯皮尔曼相关系数则为正
-
与之前的皮尔逊相关系数大小性质一样,取值 [-1, 1]之间
-
scipy.stats.spearmanr
4.主成分分析
-
定义: 高维数据转为低维数据的过程,在此过程中可能会舍弃原有数据,创造新的变量
-
作用:是数据维数压缩,尽可能降低原数据的维数,损失少量信息
-
应用:回归分析或者聚类分析当中
-
sklearn.decomposition.PCA(n_components=None)
- 将数据分解为较低维空间
- n_components:
- 小数:代表保留百分之多少的信息
- 整数:减少到多少特征
- PCA.fit_transform(X)
- 返回值:转换后指定维数的array
from sklearn.decomposition import PCA
def pac_demo():
'''
对数据进行PCA降维
'''
data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]
# 1.实例化一个PCA
transfer = PCA(n_components = 0.9)
# 2.调用fit_transform
data2 = transfer.fit_transform(data)
print("保留百分之90的信息,降维结果为:",data1)
# 1.实例化一个PCA
transfer = PCA(n_compoents = 2)
# 2.调用fit_transform
data2 = transfer.fit_transform(data)
print("降维到2维的结果:",data2)
return None
pac_demo()
5.案例:探究用户对物品类别的喜好分类
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# 1.获取数据
order_product = pd.read_csv("./data/instacart/order_products__prior.csv")
products = pd.read_csv("./data/instacart/products.csv")
orders = pd.read_csv("./data/instacart/orders.csv")
aisles = pd.read_csv("./data/instacart/aisles.csv")
# 2.数据的基本处理
# 2.1合并
tab = pd.merge(order_product, products, on=["product_id", "product_id"])
tab2 = pd.merge(tab1, orders, on=["order_id", "order_id"])
tab = pd.merge(tab2, aisles, on=["aisle_id", "aisle_id"])
# 2.2交叉表
tab = pd.crosstab(tab['user_id'],tab['aisle'])
# 2.3 数据截取
tab = tab[:1000]
# 3.特征工程 --pca
transfer=PCA(n_components=0.9)
data = transfer.fit_transform(tab)
# 4.机器学习k-means
estiomator = Kmeans(n_clusters=9,random_state=22)
estimator.fit_predict(data)
# 5.模型评估
silhouette_score(data,y_predict)