当前位置: 首页 > news >正文

人工智能-python-机器学习实战:特征降维、PCA与KNN的核心价值解析

文章目录

  • 机器学习实战:特征降维、PCA与KNN的核心价值解析
    • 1. 特征降维:为什么必须做
    • 🔍 核心方法
      • 1.1 特征选择
        • **为什么要进行特征选择?**
        • **特征选择的作用**
      • 1.2 低方差过滤
        • **为什么使用低方差过滤?**
        • **作用与目的**
      • 1.3 根据相关系数的特征选择
        • **为什么选择基于相关系数的特征选择?**
        • **作用与目的**
    • 2. 主成分分析(PCA):数据压缩的艺术
      • 2.1 PCA原理
        • **为什么要使用PCA?**
        • **作用与目的**
      • 2.2 PCA步骤
      • 2.3 PCA API示例
      • 2.4 示例 - `n_components` 为整数
      • 2.5 示例 - `n_components` 为小数
    • 💡 两种场景解析
    • 3. KNN算法
      • 3.1 KNN算法原理
        • **为什么选择KNN?**
        • **作用与目的**
      • 3.2 距离度量
        • **为什么选择不同的距离度量?**
      • 3.3 KNN缺点
      • 3.4 KNN API示例
    • 4. 模型保存与加载
      • 4.1 保存模型
      • 4.2 加载模型
    • 5. 总结


机器学习实战:特征降维、PCA与KNN的核心价值解析

1. 特征降维:为什么必须做

🎯 根本目的
解决维度灾难问题:高维数据导致计算复杂度飙升,模型训练效率骤降,甚至引入噪声干扰模型判断。

特征降维是机器学习和数据分析中非常重要的技术,它有助于减少特征空间的维度,进而提高模型的计算效率,减轻过拟合的风险。

🔍 核心方法

1.1 特征选择

为什么要进行特征选择?

特征选择通过去除不相关或冗余的特征,提升模型的精度并减少计算开销。去除无关的特征可以帮助提高模型的泛化能力,避免过拟合。

特征选择的作用
  • 提高模型的可解释性。
  • 降低计算复杂度。
  • 降低过拟合风险。

1.2 低方差过滤

为什么使用低方差过滤?

低方差的特征通常不携带有意义的变异信息,可能并不会对目标变量产生显著影响。通过低方差过滤,可以去除这些无关的特征,减少特征空间的维度。

作用与目的
  • 去除无关特征:减少噪音,改善模型性能。
  • 提高计算效率:减少无用的计算。
from sklearn.feature_selection import VarianceThreshold
selector = VarianceThreshold(threshold=0.1)  # 剔除方差<0.1的特征
X_new = selector.fit_transform(X)

✅ 价值:快速删除取值变化小的特征(如常数列),减少无效计算量

1.3 根据相关系数的特征选择

为什么选择基于相关系数的特征选择?

高相关性的特征可能存在冗余性,因为它们携带了相似的信息。通过计算特征之间的相关系数,可以去除那些相互高度相关的特征,进一步减少数据的维度。

作用与目的
  • 减少冗余:提高模型性能。
  • 提高效率:避免在训练过程中使用冗余信息,识别特征与目标变量的关联强度
  • r=cov(X,Y)/(σX∗σY)r = cov(X,Y)/(σ_X * σ_Y)r=cov(X,Y)/(σXσY)

2. 主成分分析(PCA):数据压缩的艺术

🎯 根本目的
将高维数据投影到低维空间,在保留原始信息的前提下最大化数据区分度。

主成分分析(PCA)是一种常用的降维技术,通过将数据投影到低维空间,从而保留数据中最重要的信息。

2.1 PCA原理

为什么要使用PCA?

PCA旨在通过将原始特征空间映射到一个新的正交空间,找到数据中方差最大的方向。通过选择前几个主成分,可以减少特征数量同时保留数据的主要特征。

作用与目的
  • 降维:将数据从高维空间映射到低维空间。
  • 保留主要信息:通过主成分保留数据的变异性。

2.2 PCA步骤

  • 中心化数据:减去数据的均值,使数据的每一维都有零均值。
  • 计算协方差矩阵:反映数据各个特征之间的线性关系。
  • 计算特征值和特征向量:特征值反映了主成分的重要性,特征向量则是方向。
  • 选择主成分:选择前几个主成分,通常是特征值最大的几个。

2.3 PCA API示例

from sklearn.decomposition import PCA
from sklearn.datasets import load_iris# 加载数据集
data = load_iris()
X = data.data# PCA降维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
print(X_pca)

2.4 示例 - n_components 为整数

pca = PCA(n_components=2)  # 降至2个主成分
X_pca = pca.fit_transform(X)

2.5 示例 - n_components 为小数

pca = PCA(n_components=0.95)  # 保留95%的方差
X_pca = pca.fit_transform(X)

💡 两种场景解析

n_components 类型作用适用场景
整数(如 2)强制降到 2 维需要固定维度输出(如可视化)
小数(如 0.95)保留 95% 信息量平衡精度与效率的工程实践

✅ 核心价值:

降低模型训练时间(计算量指数级下降)
消除特征间多重共线性
为后续算法提供更纯净的输入数据

3. KNN算法

KNN(K-Nearest Neighbors)是一种简单且常用的监督学习算法,广泛应用于分类和回归问题中。

3.1 KNN算法原理

为什么选择KNN?

KNN通过计算样本之间的距离来进行分类。它不需要训练阶段,通过邻近样本的标签决定预测结果。

作用与目的
  • 直观简单:基于距离度量来进行分类,简单易理解。
  • 无参数模型:不需要显式的训练过程,可以直接用于数据。

3.2 距离度量

  • 欧氏距离:用于计算两个点之间的直线距离,公式:

    d=∑(xi−yi)2d = \sqrt{\sum (x_i - y_i)^2} d=(xiyi)2

    适用于特征值是连续数值的情况。

  • 曼哈顿距离:计算两个点在坐标轴上的绝对差值之和,公式:

    d=∑∣xi−yi∣d = \sum |x_i - y_i| d=xiyi

    适用于特征之间差异较为离散的情况。

为什么选择不同的距离度量?

不同的距离度量可以根据问题的特性来选择。例如,欧氏距离适用于数据特征的尺度相似的情况,而曼哈顿距离适用于某些离散特征。

3.3 KNN缺点

  • 计算复杂度高:随着数据集增大,KNN需要计算所有数据点的距离,计算开销大。
  • 对噪声敏感:KNN容易受到噪声数据的影响,导致性能下降。

3.4 KNN API示例

from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris# 加载数据集
data = load_iris()
X, y = data.data, data.target# KNN模型训练
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X, y)# 预测
y_pred = knn.predict(X)
print(y_pred)

4. 模型保存与加载

在使用KNN算法时,训练好的模型可以保存并加载到以后使用,避免每次都要重新训练。

4.1 保存模型

import joblib# 保存KNN模型
joblib.dump(knn, 'knn_model.pkl')

4.2 加载模型

# 加载KNN模型
knn_loaded = joblib.load('knn_model.pkl')# 使用加载的模型进行预测
y_pred_loaded = knn_loaded.predict(X)
print(y_pred_loaded)

5. 总结

✨ 总结:技术链的价值闭环
特征降维 → 解决数据冗余问题 🛠️
PCA → 提取本质信息 ✨
KNN → 实现轻量化决策 ⚡

本文介绍了特征降维(特征选择、低方差过滤、相关系数选择)、主成分分析(PCA)和KNN算法的基本原理与实现。通过这些方法,我们可以有效地处理高维数据、减少噪声,并选择适当的算法进行分类任务。理解并应用这些技术,有助于提升机器学习模型的性能和效率。


http://www.dtcms.com/a/318674.html

相关文章:

  • Linux: NFS 服务部署与autofs自动挂载的配置
  • 分隔串处理方法
  • SQL注入SQLi-LABS 靶场less51-57详细通关攻略
  • 【2026版】JVM面试题
  • K8S的POD数量限制
  • 敏捷协作平台推荐:Jira、PingCode、Tapd等15款
  • C++ - 仿 RabbitMQ 实现消息队列--网络通信协议设计
  • 力扣-42.接雨水
  • 云平台托管集群:EKS、GKE、AKS 深度解析与选型指南-第二章
  • java 桌面应用程序基本框架
  • 【算法训练营Day21】回溯算法part3
  • C语言:指针(1-2)
  • 亚马逊新品实现快速起量:如何设置有效的广告竞价策略
  • Java保姆级新手教程第三章(方法与数组)
  • 亚马逊广告进阶指南:广告转化的基本原理
  • 前端性能优化实战:电商首页从 10s 加载到 1s 的踩坑与复盘
  • 大数据存储域——HDFS存储系统
  • 在LLM小型化趋势下,AI Infra需要做出哪些相应调整?
  • 用 “私房钱” 类比闭包:为啥它能访问外部变量?
  • 日记研究:一种深入了解用户真实体验的UX研究方法
  • 【2025CVPR-目标检测方向】FIRE:通过频率引导重建误差对扩散生成的图像进行鲁棒检测
  • 2025AI论文工具测评?个人实测5款AI工具论文写作使用体验对比
  • 【pytorch(02)】Tensor(张量)概述、如何创建、常见属性,切换设备
  • 【0基础PS】PS工具详解--直接选择工具
  • TypeScript 数组类型精简知识点
  • 文本编码扫盲及设计思路总结
  • Mongodb入门介绍
  • [Python 基础课程]学生语文成绩录入和查询需求
  • [假面骑士] 555浅谈
  • AI大语言模型如何重塑软件开发与测试流程