聚类算法(三)

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)
发布了104 篇原创文章 · 获赞 33 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/WangTaoTao_/article/details/104044428