机器学习:特征提取

ops/2025/3/4 11:11:30/

介绍

(一)原理

特征提取的核心概念是将高维、复杂的原始数据转换为低维且具有代表性的特征集合。原始数据往往包含大量冗余或无关信息,直接使用这些数据进行模型训练不仅会增加计算成本,还可能导致模型性能下降。通过特征提取,我们可以去除这些冗余信息,保留最能反映数据本质特征的部分,从而提高模型的效率和准确性。

(二)方法

在方法层面,特征提取有多种技术可供选择,具体取决于数据类型和应用场景。

1.数值型数据

对于数值型数据,常用的方法包括主成分分析(PCA)。PCA基于线性代数和统计学原理,通过对数据进行正交变换,将原始数据转换为一组新的相互正交的变量,即主成分。这些主成分按照方差大小排序,方差越大表示该主成分包含的信息越多。通过选择前几个主成分,可以在保留大部分数据信息的同时降低数据维度。

另一种针对数值型数据的方法是线性判别分析(LDA)。LDA与PCA类似,但它更侧重于寻找一种投影方向,使得不同类别数据之间的距离最大化,而同一类别数据内部的距离最小化。这使得LDA在分类任务中具有良好的性能,因为它能够有效地提取出对分类有区分性的特征。

2.图像数据

对于图像数据,常用的特征提取方法有尺度不变特征变换(SIFT)。SIFT算法旨在提取图像中具有尺度不变性和旋转不变性的特征点。它首先通过高斯差分(DoG)算子在不同尺度空间上检测极值点,然后对这些极值点进行精确定位和特征描述。SIFT特征具有很强的鲁棒性,能够在图像发生尺度变化、旋转、光照变化等情况下仍保持较好的匹配性能,广泛应用于图像匹配、目标识别等领域。

3.文本数据

在文本数据处理中,词袋模型(Bag - of - Words)是一种简单而常用的特征提取方法。它将文本看作是一个无序的单词集合,忽略单词在文本中的顺序,只统计每个单词在文本中出现的频率。这种方法虽然简单,但在文本分类、情感分析等任务中取得了不错的效果。为了进一步提高性能,还可以引入TF - IDF(词频 - 逆文档频率)权重,该权重能够衡量一个单词对于一个文档集合的重要程度,从而突出那些在特定文档中频繁出现但在整个文档集合中不常见的单词,使得提取的特征更具代表性。

(三)与特征选择不同

特征选择是从原始特征集合中选择一个子集,这些特征被认为对模型性能有最大的贡献,而不改变特征的表示形式。特征提取则是通过变换生成新的特征。在实际应用中,通常会结合特征选择和特征提取来进一步优化数据表示,提高模型性能。

(四)性能评估

常用的评估指标包括信息增益、互信息等,这些指标可以衡量提取的特征与目标变量之间的相关性。一个好的特征提取方法应该能够提取出与目标变量高度相关的特征,从而为模型提供有效的信息。 

二、PCA主成分分析

(一)原理

PCA 基于线性代数中的特征值和特征向量理论以及统计学中的方差概念。其核心思想是找到一组新的正交基,使得原始数据在这些新基上的投影具有最大的方差。在数学上,对于给定的一组数据矩阵X,其协方差矩阵C可以反映数据在各个维度上的方差以及维度之间的协方差。通过对协方差矩阵C进行特征值分解,得到的特征向量就是新的正交基方向,而对应的特征值则表示数据在相应特征向量方向上的方差大小。PCA 将数据投影到这些由特征向量确定的新坐标轴上,按照特征值从大到小的顺序排列,选取前K个特征向量所对应的维度作为主成分,从而实现数据的降维和特征表示。

 

步骤

1.数据标准化:对原始数据进行标准化处理,将每个特征的均值变为,方差变为,以消除不同特征之间量纲的影响,确保每个特征在分析中具有相同的重要性。

2.计算协方差矩阵:根据标准化后的数据,按照上述公式计算协方差矩阵。

3.特征值分解:对协方差矩阵进行特征值分解,得到特征值和特征向量。

4.选择主成分:根据特征值的大小,按照一定的标准(如累计方差贡献率)选择前个特征向量作为主成分。通常,累计方差贡献率达到或以上时,认为选取的主成分能够较好地代表原始数据的信息。

5.数据投影:将原始数据投影到选定的主成分上,得到降维后的数据表示。

三、例子

使用糖尿病数据集,结合PCA降维方法,代码如下:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.decomposition import PCA# 加载糖尿病数据集
diabetes = datasets.load_diabetes()
X = diabetes.data
y = diabetes.target# 创建PCA对象,将数据降到二维
pca = PCA(n_components=2)# 对数据进行PCA降维
X_pca = pca.fit_transform(X)# 输出降维后的数据形状
print("原始数据形状:", X.shape)
print("降维后数据形状:", X_pca.shape)# 输出每个主成分的方差贡献率
explained_variance_ratio = pca.explained_variance_ratio_
print("每个主成分的方差贡献率:", explained_variance_ratio)
print("累计方差贡献率:", np.sum(explained_variance_ratio))# 输出主成分的方向(特征向量)
print("主成分的方向(特征向量):\n", pca.components_)# 绘制降维后的数据散点图
plt.figure(figsize=(10, 8))
scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis', edgecolor='k', s=50)
plt.xlabel('First Principal Component')
plt.ylabel('Second Principal Component')
plt.title('Visualization of Diabetes Dataset after PCA Dimensionality Reduction')
plt.colorbar(scatter, label='Disease Progression')
plt.grid(True, linestyle='--', alpha=0.6)
plt.show()

# 绘制累计方差贡献率曲线
pca_full = PCA()
pca_full.fit(X)plt.figure(figsize=(8, 6))
plt.plot(np.cumsum(pca_full.explained_variance_ratio_), marker='o', linestyle='--')
plt.xlabel('Number of Components')
plt.ylabel('Cumulative Explained Variance')
plt.title('Cumulative Explained Variance by PCA Components')
plt.grid(True, linestyle='--', alpha=0.6)
plt.show()


http://www.ppmy.cn/ops/163027.html

相关文章

一文了解:部署 Deepseek 各版本的硬件要求

很多朋友在咨询关于 DeepSeek 模型部署所需硬件资源的需求,最近自己实践了一部分,部分信息是通过各渠道收集整理,so 仅供参考。 言归正转,大家都知道,DeepSeek 模型的性能在很大程度上取决于它运行的硬件。我们先看一下…

通往 AI 之路:Python 机器学习入门-语法基础

第一章 Python 语法基础 Python 是一种简单易学的编程语言,广泛用于数据分析、机器学习和人工智能领域。在学习机器学习之前,我们需要先掌握 Python 的基本语法。本章将介绍 Python 的变量与数据类型、条件语句、循环、函数以及文件操作,帮助…

开源模型应用落地-DeepSeek-R1-Distill-Qwen-7B-Docker助力-模型部署 “光速” 指南

一、前言 在人工智能的浪潮里,大语言模型不断迭代更新,DeepSeek-R1-Distill-Qwen-7B 模型凭借出色的表现,吸引着无数开发者的目光。然而,想要将这个强大的模型顺利部署并投入使用,过程却并不轻松。传统的部署方式仿佛布满荆棘,从底层环境搭建到各种依赖项的适配,每一步都…

Halcon图像预处理算子 sobel算子、傅里叶变换算子、卷积算子

滤波类型算子适用噪声特点均值滤波mean_image高斯噪声平滑均匀,可能额模糊边缘中值滤波median_image椒盐噪声保留边缘,抑制脉冲噪声高斯滤波gauss_filter高斯噪声加权平均,边缘更平滑 均值滤波 mean_image(Image,ImageMean,MaskWidth,MaskHe…

【C++】使用 CMake 在 Windows 上自动化发布 C++/Qt 应用程序

对于使用 MinGW 编译 C/Qt 项目的开发者来说,发布程序时常常面临目标机器缺少必要运行时库(DLL)的情况。传统方法需要手动收集依赖文件,不仅繁琐,还容易遗漏。本文将展示如何利用 CMake 构建系统,结合 Qt 官…

Windows 配置 Tomcat环境

Windows配置Tomcat 1. 介绍 Tomcat是一个开源的、轻量级的Java应用服务器,在Java Web开发领域应用广泛。以下是关于它的详细介绍: 一、基本概念与背景 定义:Tomcat是Apache软件基金会(Apache Software Foundation)下…

andorid 蓝牙相关

kotlin协程 一个线程的多个协程: 一个线程对应多个协程:在 Kotlin 中,协程是协作式的,它们可以在单个线程上启动和运行多个协程。协程通过挂起和恢复操作来协作,而不是通过阻塞线程。 一个线程的多个协程可以同时工作…

GitHub高效搜索工具

[GitHub项目搜索工具] 一款开发者专属的星矿探测仪! 你是否还在用stars:>1000手动筛选GitHub项目? 你是否经常为了找一个合适的开源库翻遍搜索结果? 这个工具或许能改变你的代码资源发掘方式… 🌟 痛点洞察 在GitHub的3.28亿个…