Scikit-learn 中文教程

第二部分:Scikit-learn 核心基础
第 3 章 Scikit-learn 核心设计与 API 体系
第 4 章 数据集模块与数据划分
第三部分:数据预处理与特征工程
第 5 章 数据预处理核心模块(sklearn.preprocessing)
第 6 章 特征工程:提取、选择与构建
第四部分:模型评估与验证
第 7 章 模型评估指标(按任务类型划分)
第 8 章 模型验证与超参数调优
第五部分:Scikit-learn 核心算法模块
第 9 章 有监督学习:分类算法
第 10 章 有监督学习:回归算法
第 11 章 无监督学习:聚类与密度算法
第 12 章 半监督学习与其他常用算法
第八部分:性能优化与问题解决
第 18 章 Scikit-learn 性能优化
第 19 章 Scikit-learn 常见问题与解决方案

6.1 特征提取

Scikit-learn 特征提取从入门到精通:数值、文本、图像与参数调优

Scikit-learn 中文教程

本教程全面介绍Scikit-learn中的特征提取方法,包括无监督数值特征提取、文本特征提取使用CountVectorizer和TfidfVectorizer(词袋/TF-IDF)、图像特征提取(基础像素和HOG特征),以及参数调优技巧如停用词和词频阈值。适合机器学习新手学习。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

特征提取在Scikit-learn中的全面应用

简介

特征提取是机器学习预处理的核心步骤,旨在将原始数据转换为更有信息量的特征,以提升模型性能。Scikit-learn提供了多种工具来处理数值、文本和图像数据。本章将系统讲解特征提取的基本概念和实际应用,适合初学者快速上手。

数值特征提取

数值特征提取通常是无监督的,直接基于原始数据。在Scikit-learn中,你可以使用原始数值数据,或通过简单转换如归一化(MinMaxScaler)和标准化(StandardScaler)来调整特征。

  • 直接使用原始数据:对于大多数模型,如线性回归或决策树,可以直接输入数值特征。
  • 示例代码
    import numpy as np
    from sklearn.preprocessing import StandardScaler
    
    # 假设X是数值数据的数组
    X = np.array([[1, 2], [3, 4], [5, 6]])
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)
    

文本特征提取

文本特征提取将文本数据转换为数值向量,常用方法包括词袋模型和TF-IDF。Scikit-learn提供了CountVectorizerTfidfVectorizer

CountVectorizer(词袋模型)

词袋模型统计文本中每个词出现的频率,忽略语法和词序。

  • 参数调优:通过设置停用词(如常见无意义词)和词频阈值来优化。
  • 示例代码
    from sklearn.feature_extraction.text import CountVectorizer
    
    corpus = ['我爱学习机器学习', '机器学习很有趣']
    vectorizer = CountVectorizer(stop_words=['的', '是'])  # 设置停用词
    X_counts = vectorizer.fit_transform(corpus)
    print(vectorizer.get_feature_names_out())  # 输出词汇表
    

TfidfVectorizer(TF-IDF)

TF-IDF(词频-逆文档频率)改进词袋模型,通过加权减少常见词的影响,突出重要词。

  • 示例代码
    from sklearn.feature_extraction.text import TfidfVectorizer
    
    vectorizer = TfidfVectorizer(stop_words=['的', '是'])
    X_tfidf = vectorizer.fit_transform(corpus)
    

图像特征提取

图像特征提取将图像数据转换为数值特征,方法包括基础像素特征和更高级的HOG特征。

基础像素特征

将图像像素值展平为一维向量。假设图像已预处理为NumPy数组。

  • 示例代码
    import numpy as np
    from PIL import Image
    
    # 加载图像并展平像素
    img = Image.open('image.jpg').convert('L')  # 转换为灰度
    img_array = np.array(img).flatten()  # 展平为向量
    

HOG(Histogram of Oriented Gradients)特征

HOG特征捕捉图像边缘方向信息,常用于对象检测。在Scikit-learn中,可以使用skimage.feature.hog或其他库生成HOG特征,然后与Scikit-learn模型结合。

  • 示例代码(使用scikit-image):
    from skimage.feature import hog
    from skimage import data, color
    
    image = color.rgb2gray(data.astronaut())  # 示例图像
    hog_features = hog(image, orientations=9, pixels_per_cell=(8, 8), cells_per_block=(2, 2))
    

特征提取器的参数调优

参数调优能显著提升特征提取效果,尤其在文本特征中常见。

  • 停用词:移除无关词汇,减小特征维度,如英语中的“the”、“and”。在Scikit-learn中,通过stop_words参数设置内置列表或自定义列表。
  • 词频阈值:使用min_df(最小文档频率)和max_df(最大文档频率)过滤罕见或常见词。例如,min_df=0.01忽略出现在少于1%文档中的词。
  • 示例:结合之前文本提取,优化停用词和词频。
    vectorizer = TfidfVectorizer(stop_words='english', min_df=0.01, max_df=0.95)
    X_optimized = vectorizer.fit_transform(corpus)
    

总结

特征提取是机器学习成功的关键一环。Scikit-learn提供了丰富的工具来处理不同类型的数据。实践时,先从基础方法开始,逐步尝试参数调优以优化性能。下一章将深入讨论特征选择和降维技术,进一步提升你的模型。


提示:在实际项目中,总是通过交叉验证和评估指标来调整参数,避免过拟合。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包