特征工程——什么是特征提取?本文使用sklearn实现字典特征提取和文本特征提取

本文介绍了特征提取在特征工程中的作用,详细讲解了字典特征提取(包括one-hot编码)和文本特征提取,特别是使用jieba分词处理中文文本,并通过Tf-idf探讨了文本特征的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

特征工程——特征提取

特征提取是特征工程里面的一部分操作,下面开始介绍特征提取:

什么是特征提取呢?
在这里插入图片描述
在这里插入图片描述

1、特征提取

1.1 定义

将任意数据(如文本或图像)转换为可用于机器学习的数字特征

注:特征值化是为了计算机更好的去理解数据

  • 特征提取分类:
    • 字典特征提取(特征离散化)
    • 文本特征提取
    • 图像特征提取(深度学习将介绍)

1.2 特征提取API

sklearn.feature_extraction

2、字典特征提取

作用:对字典数据进行特征值化

sklearn.feature_extraction.DictVectorizer(sparse=True,…)
  • DictVectorizer.fit_transform(X)

    • X:字典或者包含字典的迭代器返回值
    • 返回sparse矩阵
  • DictVectorizer.get_feature_names() 返回类别名称

2.1 应用

我们对以下数据进行特征提取:

[{
   
   'city': '北京','temperature':100},
{
   
   'city': '上海','temperature':60},
{
   
   'city': '深圳','temperature':30}]

在这里插入图片描述

2.2 流程分析

  • 实例化类DictVectorizer
  • 调用fit_transform方法输入数据并转换(注意返回格式)
from sklearn.feature_extraction import DictVectorizer

def dict_demo():
    """
    字典特征提取
    :return:None
    """
    # 1.获取数据
    data = [{
   
   'city': '北京', 'temperature': 100},
            {
   
   'city': '上海', 'temperature': 60},
            {
   
   'city': '深圳', 'temperature': 30}]

    # 2.字典特征提取
    # 2.1实例化
    transfer = DictVectorizer(sparse=True) # sparse好处是节省内存,提高访问效率

    # 2.2转换
    new_data = transfer.fit_transform(data)
    print(new_data)

    # 2.3获取具体属性名
    names = transfer.get_feature_names()
    print(names)

if __name__ == "__main__":
    dict_demo()

注意观察sparse=False参数的结果:

返回的结果:
  (0, 1)    1.0
  (0, 3)    100.0
  (1, 0)    1.0
  (1, 3)    60.0
  (2, 2)    1.0
  (2, 3)    30.0
特征名字:
 ['city=上海', 'city=北京', 'city=深圳', 'temperature']

这个结果和我们平时的不一样,这个是稀疏矩阵的存储,那再看看sparse=True参数的结果:

返回的结果:
 [[   0.    1.    0.  100.]
 [   1.    0.    0.   60.]
 [   0.    0.    1
### 特征提取的概念 特征提取是一种将原始数据转换为一组数值的过程,这些数值可以更好地表示数据中的模式并用于机器学习模型的训练。通过特征提取,可以从复杂的数据集中获取有意义的信息,并将其转化为适合算法处理的形式。 在机器学习领域,特征提取通常涉及从高维空间到低维空间的映射过程,从而减少冗余信息并提高模型性能[^1]。 --- ### 常见的特征提取方法 #### 字典特征提取 字典特征提取适用于结构化数据,尤其是键值对形式的数据。它通过对输入数据进行编码,将类别型变量或其他离散特征映射为数值型向量。这种方法常用于表格数据预处理阶段。 #### 文本特征提取 对于文本数据,常见的特征提取技术包括词袋模型(Bag of Words)、TF-IDF N-gram 等。其中 TF-IDF 是一种基于词频逆文档频率的方法,能够衡量单词的重要性。其核心思想在于降低高频但无意义词语的影响,提升稀有关键词的作用。 #### 图像特征提取 图像特征提取可以通过多种方式完成,例如局部二值模式 (LBP) 或方向梯度直方图 (HOG)。 - **LBP** 提取的是纹理特征,具体做法是对每个像素点与其邻域内的其他像素比较大小关系,最终形成一个描述整个区域纹理特性的向量[^3]。 - **HOG** 则关注边缘方向分布情况,先计算每一块区域内梯度的方向直方图,再把这些直方图拼接起来构成全局特征矢量。 --- ### 特征选择方法概述 除了上述提到的具体特征提取手段外,在实际应用过程中还需要考虑如何挑选最有效的特征组合。这一步骤被称为特征选择,主要分为以下几类: 1. **Filter 方法** Filter 方法完全不依赖任何特定的学习器,仅依靠数据本身的特性来进行分析判断。比如采用相关系数或者互信息作为评价指标来决定哪些属性应该保留下来[^2]。 2. **Wrapper 方法** Wrapper 方法则更加注重与后续建模环节之间的联系,会反复尝试不同的子集配置并通过交叉验证等方式测量它们的表现优劣程度。由于这种方式需要多次调用基础估计函数执行预测任务,因此往往耗时较长但也可能获得更精确的结果。 3. **Embedded 方法** Embedded 类似于 wrapper 的思路却又有所不同之处就在于它是直接内置到了某些优化求解框架内部去同步解决参数寻优以及维度缩减两方面的问题;典型代表如 Lasso 回归等正则化线性回归变种版本均属于此类别之一。 --- ```python from sklearn.feature_extraction.text import TfidfVectorizer # 创建一个简单的语料库 corpus = [ 'This is the first document.', 'This document is the second document.', 'And this is the third one.', 'Is this the first document?', ] vectorizer = TfidfVectorizer() X = vectorizer.fit_transform(corpus) print(vectorizer.get_feature_names_out()) print(X.toarray()) ``` 以上代码展示了如何使用 `TfidfVectorizer` 对一段文字集合实施 tf-idf 转换操作。 --- ### 总结 综上所述,无论是针对哪种类型的数据源开展工作,合理的运用各种先进的特征工程技术都是构建高效能预测系统的基石所在。而与此同时合理规划好相应的降维策略同样不可或缺——只有这样才能既保证捕捉住尽可能多的有效信号又不至于让系统陷入过拟合困境之中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值