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 编码。
相关推荐
上班日常摸鱼7 分钟前
Shell脚本基础教程:变量、条件判断、循环、函数实战(附案例)
python
智能交通技术20 分钟前
iTSTech:自动驾驶技术综述报告 2025
人工智能·机器学习·自动驾驶
无心水27 分钟前
【Python实战进阶】5、Python字符串终极指南:从基础到高性能处理的完整秘籍
开发语言·网络·python·字符串·unicode·python实战进阶·python工业化实战进阶
2301_8075832335 分钟前
了解python,并编写第一个程序,常见的bug
linux·python
小白学大数据38 分钟前
构建混合爬虫:何时使用Requests,何时切换至Selenium处理请求头?
爬虫·python·selenium·测试工具
2401_8275602042 分钟前
【Python脚本系列】PyAudio+librosa+dtw库录制、识别音频并实现点击(四)
python·语音识别
BBB努力学习程序设计1 小时前
Python自动化脚本:告别重复劳动
python·pycharm
BBB努力学习程序设计1 小时前
Python函数式编程:优雅的代码艺术
python·pycharm
2501_940943911 小时前
体系课\ Python Web全栈工程师
开发语言·前端·python
田姐姐tmner2 小时前
Python切片
开发语言·python