当前位置: 首页 > article >正文

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

简要介绍

编码(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.kler.cn/a/395254.html

相关文章:

  • 深入探索 TypeScript:从基础到高级特性
  • Vue的基础使用
  • 基于RK3568J多网口电力可信物联网关解决方案
  • 【Java语言】String类
  • 曹操为什么总是亲征
  • 基于Java Web的传智播客crm企业管理系统的设计与实现
  • 大模型基础BERT——Transformers的双向编码器表示
  • Electron 项目实现下载文件监听
  • 实现高效数据集成:金蝶云星空对接MySQL的成功案例
  • Reddit 舞台上的 AI:解码用户生活密码,隐私警钟敲响
  • vue2 自动化部署 shell 脚本
  • PVE纵览-安装系统卡“Loading Driver”的快速解决方案
  • Python实现贪吃蛇 经典解压小游戏!附源码
  • 02-SpringBoot3Web开发
  • flink 同步oracle11g数据表到pg库
  • 腾讯首个3D生成大模型Hunyuan3D-1.0分享
  • C++中的栈(Stack)和堆(Heap)
  • adb 命令 查找启动的包名以及导出安装包
  • Redis下载历史版本
  • 【AI声音克隆整合包及教程】第二代GPT-SoVITS V2:创新与应用
  • 删除 git config 保存的密码
  • UVa 11855 Buzzwords
  • react-redux useSelector钩子 学习样例 + 详细解析
  • AR眼镜方案_AR智能眼镜阵列/衍射光波导显示方案
  • jupyter可视化pandas dataframe
  • Spring Boot 异常处理