人工智能-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=∑(xi−yi)2
适用于特征值是连续数值的情况。
-
曼哈顿距离:计算两个点在坐标轴上的绝对差值之和,公式:
d=∑∣xi−yi∣d = \sum |x_i - y_i| d=∑∣xi−yi∣
适用于特征之间差异较为离散的情况。
为什么选择不同的距离度量?
不同的距离度量可以根据问题的特性来选择。例如,欧氏距离适用于数据特征的尺度相似的情况,而曼哈顿距离适用于某些离散特征。
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算法的基本原理与实现。通过这些方法,我们可以有效地处理高维数据、减少噪声,并选择适当的算法进行分类任务。理解并应用这些技术,有助于提升机器学习模型的性能和效率。