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 编码。
相关推荐
moonsheeper8 小时前
推荐算法发展历史
算法·机器学习·推荐算法
Source.Liu9 小时前
【学Python自动化】 8.1 Python 与 Rust 错误处理对比学习笔记
python·rust·自动化
计算机毕业设计木哥11 小时前
计算机Python毕业设计推荐:基于Django的酒店评论文本情感分析系统【源码+文档+调试】
开发语言·hadoop·spring boot·python·spark·django·课程设计
BYSJMG11 小时前
基于Python毕业设计推荐:基于Django的全国降水分析可视化系统
hadoop·python·django·vue·毕业设计·课程设计·毕设
飞天小蜈蚣12 小时前
python - ( js )object对象、json对象、字符串对象的相关方法、数组对象的相关方法、BOM对象、BOM模型中 Navigator 对象
javascript·python·json
SHIPKING39313 小时前
【机器学习&深度学习】向量模型与重排序模型:RAG 的双引擎解析
人工智能·深度学习·机器学习·向量模型·重排序模型
云手机掌柜14 小时前
Twitter舆情裂变链:指纹云手机跨账号协同机制提升互动率200%
python·网络安全·智能手机·矩阵·虚幻·内容运营·twitter
2401_8979300614 小时前
python 创建websocket教程
开发语言·python·websocket
AI Echoes14 小时前
LangGraph 重要注意事项和常见问题
人工智能·python·langchain·agent