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 编码。
相关推荐
有为少年4 小时前
告别“唯语料论”:用合成抽象数据为大模型开智
人工智能·深度学习·神经网络·算法·机器学习·大模型·预训练
AI医影跨模态组学4 小时前
J Transl Med(IF=7.5)苏州大学附属第一医院秦颂兵教授等团队:基于机器学习影像组学的食管鳞癌预后评估列线图
人工智能·深度学习·机器学习·ct·医学·医学影像
Birdy_x4 小时前
接口自动化项目实战(1):requests请求封装
开发语言·前端·python
我爱学习好爱好爱4 小时前
Ansible 常用模块详解:lineinfile、replace、get_url实战
linux·python·ansible
一轮弯弯的明月6 小时前
Python基础-速通秘籍(下)
开发语言·笔记·python·学习
春日见6 小时前
自驾算法的日常工作?如何提升模型性能?
linux·人工智能·机器学习·计算机视觉·自动驾驶
*JOKER6 小时前
Flow Matching&生成算法
人工智能·深度学习·机器学习·大模型·生成模型·flow matching
千寻girling7 小时前
面试官 : “ 说一下 Python 中的常用的 字符串和数组 的 方法有哪些 ? ”
人工智能·后端·python
第一程序员7 小时前
Python基础学习路径:非科班转码者的入门指南
python·github