降维

降维不是数组的维度, 而是特征的数量.

数据降维方法

1. 特征选择
2. 主成分分析

特征选择

冗余: 部分特征的相关程度高, 影响性能
噪声: 部分特征对预测成功有影响

image

特征选择 API

sklearn.feature_selection.VarianceThreshold
默认删除方差为0的特征,删除低方差的特征,阈值一般在0-10(不确定,看实际情况)

特征选择代码

# 特征工程 - 数据降维之特征选择
from sklearn.feature_selection import VarianceThreshold

def var():
    """
    特征选择 - 删除低方差特征  :return: None
    """
    # 实例化 threshold 等于地方差范围 这里是删除所有方差为 0 的特征
    var = VarianceThreshold(threshold=0.0)

    data = var.fit_transform([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]])

    print(data)

    return None

if __name__ == "__main__":
    var()

运行结果

[[2 0]
 [1 4]
 [1 1]]

image

主成分分析 (PCA)

应用场景并不多,大量特征会使用
sklearn.decomposition
n_components:小数(通常是90%~95%),整数:(减少到的特征数量)

image

代码

# 特征工程 - 数据降维之主成分分析 (PCA)

from sklearn.decomposition import PCA

def pca():

    """
    主成分分析进行特征降维  :return: None
    """
    pca = PCA(n_components=0.9)

    data = pca.fit_transform([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]])

    print(data)
    return None

if __name__ == "__main__":
    pca()

运行结果

[[-1.76504522]
 [ 2.35339362]
 [-0.58834841]]

主成分分析案例

import pandas as pd 
from sklearn.decomposition import PCA 

# 读取四张表的数据
prior = pd.read_csv("./Desktop/all/order_products__prior.csv")

products = pd.read_csv("./Desktop/all/products.csv")
orders = pd.read_csv("./Desktop/all/orders.csv")
aisles = pd.read_csv("./Desktop/all/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'])


mt.head(10)

# 交叉表
cross = pd.crosstab(mt['user_id'],mt['aisle'])



cross.head(10)

# 进行主成分分析
pca = PCA(n_components=0.9)


# 计算还是挺快的, 因为 sklearn 是用 np 计算的
data = pca.fit_transform(cross)

print(data)

# 查看样本信息
data.shape

运行结果

screencapturelocalhost8888notebooksinstacatipynb2018101121_33_58png

感谢    关注    收藏    赞同    反对    举报    分享