【编码】【特征选择】【降维】

embedded/2024/11/12 18:16:56/

简要介绍

编码(Encoding)

编码是将原始数据转换为模型能够理解和处理的格式的过程。常见的编码方法包括:

  1. 标签编码(Label Encoding)
    • 适用于类别较少的分类数据。
    • 将每个类别映射到一个唯一的整数。
  2. 独热编码(One-Hot Encoding)
    • 适用于类别较多的分类数据。
    • 将每个类别转换为一个二进制向量,其中一个位置为1,其余位置为0。
  3. 目标编码(Target Encoding)
    • 适用于分类特征,将类别映射到目标变量的平均值(或其他统计量)。
    • 可以处理类别不平衡的问题,但需要防止过拟合。
  4. 文本编码
    • 将文本数据转换为数值数据,如词袋模型(Bag of Words)、TF-IDF(词频-逆文档频率)等。
    • 还可以使用词嵌入(如Word2Vec、BERT)进行更复杂的文本表示。

维度处理(Dimensionality Reduction)

维度处理是为了减少数据的特征数量,以便简化模型并提高计算效率。常见的维度处理方法包括:

  1. 特征选择(Feature Selection)
    • 从原始特征集中选择最有用的特征子集。
    • 可以使用统计方法(如卡方检验、相关系数)、模型方法(如基于树的特征重要性)或启发式方法(如递归特征消除)。
  2. 特征提取(Feature Extraction)
    • 通过组合或转换原始特征来创建新的特征。
    • 例如,PCA(主成分分析)和LDA(线性判别分析)等线性代数方法可以用于提取新的特征。
  3. 降维算法
    • 如PCA(主成分分析)和SVD(奇异值分解)等,用于将高维数据投影到低维空间中,同时尽可能保留数据的结构信息。

使用Python的pandas库和scikit-learn库来演示这些过程。

编码示例

标签编码
import pandas as pd
from sklearn.preprocessing import LabelEncoder# 示例数据
data = {'category': ['dog', 'cat', 'bird', 'dog', 'cat']}
df = pd.DataFrame(data)# 标签编码
label_encoder = LabelEncoder()
df['category_encoded'] = label_encoder.fit_transform(df['category'])print(df)

 

独热编码
from sklearn.preprocessing import OneHotEncoder# 独热编码通常用于数值型数据,但这里我们为了演示而直接使用类别标签
# 在实际应用中,你可能需要先对类别标签进行标签编码,然后再进行独热编码
# 或者直接使用pandas的get_dummies方法# 使用pandas的get_dummies进行独热编码
df_one_hot = pd.get_dummies(df, columns=['category'])print(df_one_hot)

 

目标编码

目标编码通常涉及目标变量的信息,因此这里我们需要一个额外的目标变量列。由于目标编码可能导致过拟合,通常只在训练集上进行编码,并在验证集和测试集上使用训练集得到的编码映射。

import numpy as np
import pandas as pd
from category_encoders import TargetEncoder# 示例数据,添加目标变量
data = {'category': ['dog', 'cat', 'bird', 'dog', 'cat'],'target': [1, 0, 1, 1, 0]}
df = pd.DataFrame(data)# 目标编码
target_encoder = TargetEncoder(cols=['category'])
df_target_encoded = target_encoder.fit_transform(df, df['target'])print(df_target_encoded)

注意: category_encoders库是一个第三方库,你需要先安装它(pip install category_encoders)。

 

维度处理示例

特征选择

这里我们使用基于树的特征重要性来选择特征。

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
import numpy as np# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target
feature_names = iris.feature_names# 训练随机森林模型
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X, y)# 获取特征重要性
importances = rf.feature_importances_# 获取特征的重要性排序索引
indices = np.argsort(importances)[::-1]# 打印每个特征的重要性
for i in range(len(feature_names)):print(f'{feature_names[i]}: {importances[i]}')# 选择前两个最重要的特征
top_k = 2  # 选择前两个特征
top_k_indices = indices[:top_k]
selected_features = [feature_names[i] for i in top_k_indices]# 筛选数据
X_selected = X[:, top_k_indices]print(f"选择的特征: {selected_features}")
print(f"X_selected 的形状: {X_selected.shape}")

 

降维算法(PCA)
from sklearn.decomposition import PCA
import pandas as pd
# 使用PCA降维到2维(示例)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)# 打印降维后的数据形状
print("降维后的数据形状:", X_pca.shape)# 将降维后的结果转换为DataFrame,以便可以使用列名
X_pca_df = pd.DataFrame(X_pca, columns=['PC1', 'PC2'])# 打印降维后的数据及其列名
print(X_pca_df)


http://www.ppmy.cn/embedded/136648.html

相关文章

【代码随想录day25】【C++复健】491.递增子序列;46.全排列;47.全排列 II;51. N皇后;37. 解数独

491.递增子序列 本题做的时候除了去重逻辑之外,其他的也勉强算是写出来了,不过还是有问题的,总结如下: 1 本题的关键:去重 与其说是不知道用什么去重,更应该说是完全没想到本题需要去重,说明…

拍卖机制概述

1.竞价规则 1.1英式拍卖 拍卖最流行的竞价结构形式是英国式拍卖。拍卖人以一个保留价格起拍,这个是商品的出售者所愿意卖出商品的最低价格。接下来,投标人要相继给出一个较高的价格。每一个出价都要按照某个最小的竞价增量高出前一个出价。当没有投标人…

立体视觉的核心技术:视差计算与图像校正详解

立体视觉的核心技术:视差计算与图像校正详解 在立体视觉中,通过双目相机(即左右两台相机)的不同视角捕获的图像,结合几何关系,我们可以推算出场景中物体的深度。本文将深入讲解如何基于视差(di…

Notepad++ 最新官网中文版在线下载 附文本编辑器安装与基础使用教程

Notepad (记事本)是一个简单的文本编辑器,预装在所有版本的 Microsoft Windows 操作系统中。它的主要功能是创建、编辑和存储纯文本文件,通常以 .txt 格式保存。Notepad 的设计旨在提供一个轻量级的文本处理工具,适合快…

Spring Boot 与 Vue 共筑高校网上订餐卓越平台

作者介绍:✌️大厂全栈码农|毕设实战开发,专注于大学生项目实战开发、讲解和毕业答疑辅导。 🍅获取源码联系方式请查看文末🍅 推荐订阅精彩专栏 👇🏻 避免错过下次更新 Springboot项目精选实战案例 更多项目…

【AI日记】24.11.09 我对贫困问题的一些思考

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 内容:Building Multimodal Search and RAG目标:了解多模态 RAG时间:3小时评估:不错,继续 读书 读书1 有些词语用英语表达是不得已而为之 豆瓣…

Jest项目实战(2): 项目开发与测试

1. 项目初始化 首先,我们需要为开源库取一个名字,并确保该名字在 npm 上没有被占用。假设我们选择的名字是 jstoolpack,并且已经确认该名字在 npm 上不存在。 mkdir jstoolpack cd jstoolpack npm init -y2. 安装依赖 接下来,我…

深度学习:1-of-N 编码详解

1-of-N 编码详解 1-of-N 编码,也称为独热编码(One-Hot Encoding),是一种常用于处理分类变量的编码技术。在此编码方案中,每个类别被表示为一个长度等于类别数目的二进制向量,其中一个元素设为1&#xff0c…