Scikit-learn Python机器学习 - 字典特征提取-DictVectorizer

锋哥原创的Scikit-learn Python机器学习视频教程:

2026版 Scikit-learn Python机器学习 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili

课程介绍

本课程主要讲解基于Scikit-learn的Python机器学习知识,包括机器学习概述,特征工程(数据集,特征抽取,特征预处理,特征降维等),分类算法(K-临近算法,朴素贝叶斯算法,决策树等),回归与聚类算法(线性回归,欠拟合,逻辑回归与二分类,K-means算法)等。

字典特征提取-DictVectorizer

将特征名称和值映射为字典的列表转换为数值矩阵,非常适合处理混合类型的特征。

DictVectorizer 是一个非常有用的工具,它用于将特征名称到特征值 的映射字典(例如列表)转换为 scikit-learn 模型可以使用的数值矩阵。它的强大之处在于能同时处理分类特征 (进行One-Hot编码)和数值特征(保持原值),非常适用于处理混合类型的特征或从类似JSON结构的数据中提取特征。

核心参数详解

  1. dtype (默认 numpy.float64)
  • 作用: 指定输出数组的数据类型。

  • 说明 : 为了节省内存,你可以将其设置为更小的数值类型,例如 np.float32np.int32。因为特征矩阵中会包含原始的数值型特征,所以通常不使用 bool 类型。

  1. separator (默认 =)
  • 作用 : 用于构造输出矩阵中特征名称的分隔符字符串。当转换分类特征时,DictVectorizer 会生成形如 [特征名][分隔符][类别名] 的新列名。

  • 示例:

    • 有一个特征 'animal',其值为 'cat'

    • 默认 separator='=' 会生成新特征名:'animal=cat'

    • 如果设置 separator='_',则会生成:'animal_cat'

  • 用途: 主要用于控制输出特征名的可读性和格式。

  1. sparse (默认 True)
  • 作用: 决定转换后的输出是稀疏矩阵还是密集矩阵(numpy数组)。

  • 可选值:

    • True (默认): 返回 scipy.sparse 稀疏矩阵。这是默认行为,因为One-Hot编码会产生大量0值,使用稀疏矩阵可以极大地节省内存

    • False: 返回常规的 numpy.ndarray 密集数组。这样更易于查看和理解,但当特征维度很高时,可能会消耗巨大内存。

  • 注意 : 这个参数与新版 OneHotEncodersparse_output 功能相同,但名称不同。

  1. sort (默认 True)
  • 作用: 在拟合时是否对特征名称进行排序。

  • 可选值:

    • True (默认): 对生成的特征名称(列名)进行排序。这能保证每次运行的结果一致,可重现性好。

    • False: 不排序,特征列的顺序将由Python字典的随机性决定(在Python 3.6+中,字典是有序的,但顺序取决于插入顺序)。通常不推荐设置为 False,除非你非常关心特征列的原始顺序。

我们来看一个示例:

复制代码
from sklearn.feature_extraction import DictVectorizer

# 示例数据,列表中的每个元素都是一个字典,代表一个样本
data = [
    {'age': 25, 'city': 'New York', 'income': 50000},
    {'age': 30, 'city': 'Boston', 'income': 65000},
    {'age': 35, 'city': 'New York', 'income': 75000}
]

# 初始化 DictVectorizer
dict_vectorizer = DictVectorizer(sparse=True)

# 学习并转换数据
X_dict = dict_vectorizer.fit_transform(data)

print("转换后的特征矩阵:")
print(X_dict)
# 稀疏矩阵输出:
# Coords	Values
#   (0, 0)	25.0
#   (0, 2)	1.0
#   (0, 3)	50000.0
#   (1, 0)	30.0
#   (1, 1)	1.0
#   (1, 3)	65000.0
#   (2, 0)	35.0
#   (2, 2)	1.0
#   (2, 3)	75000.0

print("\n特征名称:")
print(dict_vectorizer.get_feature_names_out())
# 输出:['age', 'income', 'city=Boston', 'city=New York']
# 它自动将数值型特征 'age', 'income' 保留,将类别型特征 'city' 进行了 One-Hot 编码。
相关推荐
Victory_orsh2 分钟前
“自然搞懂”深度学习(基于Pytorch架构)——010203
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
java1234_小锋2 分钟前
PyTorch2 Python深度学习 - 模型保存与加载
开发语言·python·深度学习·pytorch2
Python图像识别4 分钟前
74_基于深度学习的垃圾桶垃圾溢出检测系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
python·深度学习·yolo
长桥夜波5 分钟前
机器学习日报10
人工智能·机器学习
MrSYJ13 分钟前
可以指定 Jupyter Notebook 使用的虚拟环境吗
python·llm·agent
quant_198627 分钟前
【教程】使用加密货币行情接口 - 查询比特币实时价格
开发语言·后端·python·websocket·网络协议
ytttr87329 分钟前
MATLAB实现经验模态分解(EMD)与希尔伯特变换获取能量谱
人工智能·python·matlab
yumgpkpm32 分钟前
Doris在CMP7(类Cloudera CDP 7 404版华为Kunpeng)启用 Kerberos部署Doris
大数据·hive·hadoop·python·oracle·flink·cloudera
熊猫_豆豆35 分钟前
Python 写一个标准版和程序员版计算器
开发语言·python·计算器
小白学大数据1 小时前
构建1688店铺商品数据集:Python爬虫数据采集与格式化实践
开发语言·爬虫·python