ML学习笔记-2021-08-23-特征工程-特征降维

1.降维基本概念

numpy 中维度

  • 0维 标量
  • 1维 向量
  • 2维 矩阵
  • 3维以上 张量

此处的降维是指,降低特征的个数

  1. 定义
    在这里插入图片描述
    正是因为在进行训练的时候,我们都是用特征进行学习,如果特征本身存在问题,或者特征之间的相关性较强,那么对于算法学习和预测都会存在较大的影响。

2.特征选择

  1. 定义:
    在这里插入图片描述
    识别鸟的类别,根据是否含有羽毛作为特征是合适的。

2.1 Filter过滤式

2.1.1 方差选择法

  1. 定义:低方差特征过滤,一组特征的方差小,就说明这个特征比较相似,因此过滤掉一些方差较小的特征,可以达到一定效果
    在这里插入图片描述
  2. API
    方差默认为0
    在这里插入图片描述
  3. 代码
from sklearn.feature_selection import VarianceThreshold

def variance_filter():  # 低方差过滤
    data = pd.read_csv("../../resources/datingTestSet2.csv")
    data = data.iloc[:, 0:-1]  # 获取左边第0个右边第一个中间的所有
    transfer = VarianceThreshold(threshold=0)  # threshold过滤掉不太重要的特征
    data_new = transfer.fit_transform(data)
    print("new data: ", data_new)
    pearson_relation(data)  # 使用原数据data
    return None

2.2.2 相关系数法

  1. 特征与特征之间的相关程度
    在这里插入图片描述
  2. 举例
    在这里插入图片描述
  3. 特点
    在这里插入图片描述
def pearson_relation(data):
    # 皮尔逊相关系数范围[-1,1], 如果大于0就是正相关(越接近1就越相关), 反之亦然
    r = pearsonr(data["milage"], data["Liters"])
    print("milage和Liters的相关系数为:\n", r)
    show_relation(data["milage"], data["milage"])
    r = pearsonr(data["milage"], data["Consumtime"])
    print("milage和Liters的相关系数为:\n", r)
    # 如果相关性高可用以下方法:
    # 1 选取其中一个特征
    # 2 两个特征加权求和
    # 3 主成分分析(高维数据变低维,舍弃原由数据,创造新数据,如: 压缩数据维数,降低原数据复杂度,损失少了信息)
    return None

def show_relation(data1, data2):
    plt.figure(figsize=(20, 8), dpi=50)
    plt.scatter(data1, data2)
    plt.show()

特征相关度较高,如何进行选择
1)选取其中一个作为代表
2)加权求和
3)主成分分析

2.3 Embedding 嵌入式

2.2.1 决策树

信息熵,信息增益

2.2.2 正则化

L1 L2

2.2.3 深度学习

卷积

3. 主成份分析 PCA

在这里插入图片描述

在这里插入图片描述

from sklearn.decomposition import PCA
def decomposition_PCA():  # PCA 降维
    data = [[2, 8, 4, 5], [3, 8, 5, 5], [10, 5, 1, 0]]  # 3*4矩阵 包含四个特征
    N = 3  # N为整数就是转为多少个特征  保留的至少都比原特征值少一个
    # N = 0.95  # N为小数就是保留百分之多少的信息
    transfer = PCA(n_components=N)
    data_new = transfer.fit_transform(data)
    print("(主成分分析)PCA降维:", data_new)
    return None

案例 探究用户对于物品类别的喜好细分

在这里插入图片描述
用户 物品类别
user_id aisle
1)需要将user_id和aisle放在同一个列表中
2)特征降维

def decomposition_test():
    order_product = pd.read_csv("../../resources/instacart/order_products__prior.csv")
    aisles = pd.read_csv("../../resources/instacart/aisles.csv")
    orders = pd.read_csv("../../resources/instacart/orders.csv")
    products = pd.read_csv("../../resources/instacart/products.csv")
    # 先合并表
    table_1 = pd.merge(aisles, products, on=["aisle_id", "aisle_id"])  # 让aisles 和product_id一起
    table_2 = pd.merge(table_1, order_product, on=["product_id", "product_id"])
    table_3 = pd.merge(table_2, orders, on=["order_id", "order_id"])
    # 交叉表
    result_table = pd.crosstab(table_3["user_id"], table_3["aisle"])
    # print(result_table)  # 处理后的最终数据

    transfer = PCA(n_components=0.95)
    data_new = transfer.fit_transform(result_table)
    print("PCA降维结果:\n", data_new)
    return None
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值