【机器学习】数据降维 No.5

此处维度主要指的是:特征的数量

降维主要有两种方式:1、特征选择,2、主成分分析

1、特征选择

(1)特征选择是什么?

特征选择就是单纯的从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值、也不改变值,但是选择后的特征维数肯定比选择前小。

(2)特征选择的原因

消除冗余:部分特征值的相关度高,容易消耗计算性能

     处理噪声:部分特征对预测结果有影响

(3)主要方法(主要介绍过滤式)

  • Filter(过滤式):VarianceThreshold

sklearn特征选择API:sklearn.feature_selection.VarianceThreshold

代码如下:

from sklearn.feature_selection import VarianceThreshold

def var():
    '''
    特征选择:删除低方差的特征
    :return: None
    '''
    var = VarianceThreshold(threshold=0.0)
    X = [[0,2,0,3],
         [0,1,4,3],
         [0,1,1,3]]
    data = var.fit_transform(X)

    print(data)
    return None


if __name__== "__main__":
    var()

执行结果中,删除了方差为0的特征

F:\Python\3.7\python.exe E:/PythonProject/Scripts/vector.py

[[2 0]

 [1 4]

 [1 1]]

Process finished with exit code 0

  • Embedded(嵌入式):正则化,决策树
  • Wrapper(包裹式)
  • 神经网络

2、主成分分析

(1)PCA(主成分分析)介绍

本质:PCA是一种分析、简化数据集的技术

目的:数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息

作用:可以削减回归分析或者聚类分析中的特征的数量。

例、如下图,将二维数据转化到一维

例、如下图,左侧图经过降维后得到右侧图

(2)sklearn主成分分析法API

sklearn.decomposition.PCA

n_components:为小数时候,表示百分比,在0-1之间,推荐在90%--95%;如果为整数,表示减少到的特征数量。通常使用小数表示更为合理。

from sklearn.decomposition import PCA

def pca():
    '''
    特征降维,使用主成分分析法
    :return: None
    '''
    X = [[2,8,4,5],
         [6,3,0,8],
         [5,4,9,1]]
    pca = PCA(n_components=0.9)  # 保留90%的特征信息
    data = pca.fit_transform(X)
    print(data)

    return None


if __name__== "__main__":
    pca()

结果:

F:\Python\3.7\python.exe E:/PythonProject/Scripts/vector.py

[[ 1.28620952e-15  3.82970843e+00]

 [ 5.74456265e+00 -1.91485422e+00]

 [-5.74456265e+00 -1.91485422e+00]]

 

Process finished with exit code 0

3、降维案例

探究:用户对物品类别的喜好细分降维

数据地址:https://www.kaggle.com/c/instacart-market-basket-analysis/data

from sklearn.decomposition import PCA
import pandas as pd

def Instacart_PCA():
    '''
    主成分分析:用户对物品类别的喜好细分降维
    :return: None
    '''

    # 读取四张表的数据
    prior = pd.read_csv("C:\\Users\\Administrator\\Desktop\\机器学习\\Instacart\\order_products__prior.csv")
    products = pd.read_csv("C:\\Users\\Administrator\\Desktop\\机器学习\\Instacart\\products.csv")
    orders = pd.read_csv("C:\\Users\\Administrator\\Desktop\\机器学习\\Instacart\\orders.csv")
    aisles = pd.read_csv("C:\\Users\\Administrator\\Desktop\\机器学习\\Instacart\\aisles.csv")

    # 合并四张表到一张表中(用户物品类别)
    _mg = pd.merge(prior, products, on=['product_id', 'product_id'])
    _mg = pd.merge(_mg,orders,on=['order_id', 'order_id'])
    mt = pd.merge(_mg, aisles, on=['aisle_id', 'aisle_id'])

    # 查看已经合并表中前10个
    print(mt.head(10))

    # 交叉表(特殊的分组工具):构建行,列的二维矩阵
    cross = pd.crosstab(mt['user_id'],mt['aisle'])

    # 由于列中特征太多,存在很多冗余的数据,进行主成分分析
    pca = PCA(n_components=0.9)
    data = pca.fit_transform(cross)

    print(data)
    # print(data.shape)

    return None


if __name__== "__main__":
    Instacart_PCA()

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C-Jonn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值