问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

机器学习-监督学习之降维算法(PCA)

创作时间:
作者:
@小白创作中心

机器学习-监督学习之降维算法(PCA)

引用
1
来源
1.
https://www.cnblogs.com/zwh0910/p/18710041

**降维算法是机器学习领域中一种重要的数据预处理方法,主要用于处理高维度特征的数据。其中,主成分分析(PCA)是最常用的降维算法之一。本文将详细介绍降维算法的基本概念、分类、应用场景,以及PCA算法的原理和实现步骤,并通过一个实际的Iris数据集降维分类案例,帮助读者更好地理解PCA算法的应用。

一、降维算法概述

降维算法是一种针对高维度特征进行的数据预处理方法,应用非常广泛。其主要目的是在保证数据信息丢失最少的原则下,对多个变量进行最佳综合简化,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。在实际的生产和应用中,在一定的信息损失范围内,降维可以节省大量的时间和成本。

机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。

降维算法的分类

  • 主成分分析(Principal Component Analysis,PCA)法:试图在保证数据信息丢失最少的原则下,对多个变量进行最佳综合简化,即对高维变量空间进行降维处理。

  • 因子分析(Factor Analysis,FA)法:因子分析法是从假设出发,主要有以下几个目的:

  • 在变量之间存在高度相关性的时候希望用较少的因子来概括其信息;

  • 把原始变量转换为因子得分后,使用因子得分进行其他分析,从而简化数据,如聚类分析、回归分析等;

  • 通过每个因子得分计算出综合得分,对分析对象进行综合评价。

降维算法的应用场景

降维算法通常应用于数据压缩与数据可视化中。

二、数据降维

数据降维(Dimensionality Reduction)是指在某些限定条件下,降低随机变量个数,得到一组“不相关”主变量的过程。其主要作用是减少模型分析数据量,提升处理效率,降低计算难度,实现数据可视化。

数据降维案例

经济分析案例

任务(真实事件):通过美国1929-1938年各年经济数据,预测国民收入与支出。数据包括雇主补贴、消费资料和生产资料、纯公共支出、净增库存、股息、利息、外贸平衡等十七个指标。

数据量下降举例

  • 2D数据降维到1D数据:将二维数据投影到一条直线上面

  • 3D数据降维到2D数据:投影之后变成二维数据

数据可视化举例

国家分布可视化(基于50项经济指标):缩减为两项指标——复合指标F1和复合指标F2,这样就可以进行可视化展示。

三、主成分分析(PCA)

PCA(Principal Components Analysis)是数据降维技术中应用最广泛的方法。其目标是在信息损失尽可能少的情况下,降低数据维度。

二维数据PCA

三维数据PCA

3D到2D:投影到u1、u2形成的平面
n维到k维:投影到u1、u2...uk形成的空间

如何保留主要信息

  • 投影后的不同特征数据尽可能分得开(即不相关)
  • 使投影后数据的方差最大,因为方差越大数据也越分散。

计算过程

  1. 原始数据预处理(标准化:μ=0,σ=1),即将N维数据实现标准正态分布,即处理后均值为0,方差为1。
  2. 计算协方差矩阵特征向量、及数据在各特征向量投影后的方差,方差越大,相关性越小,将方差小的舍弃掉。
  3. 根据需求(任务指定或方差比例)确定降维维度k
  4. 选取k维特征向量,计算数据在其形成空间的投影

四、实战-PCA(Iris数据降维后分类)

数据集

基于Iris数据集,通过PCA降维后进行KNN分类。

实战步骤

  1. 加载数据
import torch
import pandas as pd
import numpy as np
from sklearn.metrics import accuracy_score
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

data = pd.read_csv('./data/iris_data.csv')
print(data)
  1. 定义X和y
X = data.drop(['target','label'],axis=1) # 去掉最后两列
y = data.loc[:,'label']
print(X.shape,y.shape) # 打印X,y的维度
  1. 建立KNN模型实现数据分类(n_neighbors=3)
from sklearn.neighbors import KNeighborsClassifier

KNN = KNeighborsClassifier(n_neighbors=3)
KNN.fit(X,y) # 训练
y_predict = KNN.predict(X) # 预测
accuracy = accuracy_score(y,y_predict) # 计算准确率
print(accuracy)
  1. 对数据进行标准化处理
from sklearn.preprocessing import StandardScaler

X_norm = StandardScaler().fit_transform(X)
print(X_norm)
  1. 计算均值和方差
x1_mean = X.loc[:,"sepal length"].mean()
x1_sigma = X.loc[:,"sepal length"].std()
x1_norm_mean = X_norm[:,0].mean()
x1_norm_sigma = X_norm[:,0].std()
print(x1_mean,x1_sigma,x1_norm_mean,x1_norm_sigma)
  1. 选取一个维度,可视化处理后的效果
fig1 = plt.figure(figsize=(20, 5))
# 原来的数据分布
plt.subplot(121)
plt.hist(X.loc[:,"sepal length"],bins=100)
# 标准化处理之后的数据
plt.subplot(122)
plt.hist(X_norm[:,0],bins=100)
plt.show()
  1. 进行与原数据等维度PCA,查看各主成分的方差比例
from sklearn.decomposition import PCA

pca = PCA(n_components=4) # 同等维度处理
x_pca = pca.fit_transform(X_norm) # 参数为标准化处理之后的数据X_norm
print(x_pca)
  1. 查看各主成分的方差比例
var_ratio = pca.explained_variance_ratio_
print(var_ratio) # [0.72770452 0.23030523 0.03683832 0.00515193]
  1. 可视化各主成分的方差比例
fig2 = plt.figure(figsize=(20,5))
plt.bar([1, 2, 3, 4],var_ratio)
plt.xticks([1, 2, 3, 4],['PC1', 'PC2', 'PC3', 'PC4'])
plt.ylabel("variance ratio of each principle components")
plt.show()
  1. 保留合适的主成分,只需要保留前面两个成分
pca = PCA(n_components=2) # 只需要保留前面两个成分 即开始降维
X_pca = pca.fit_transform(X_norm) # 降维后的数据
print(X_pca) # 4维数据变为2维数据
print(X_pca.shape) # (150,2)
  1. 可视化降维后的数据
fig3 = plt.figure(figsize=(20, 10))
setosa = plt.scatter(X_pca[:, 0][y == 0], X_pca[:,1][y == 0])
versicolour = plt.scatter(X_pca[:, 0][y == 1], X_pca[:,1][y == 1])
virginica = plt.scatter(X_pca[:, 0][y == 2], X_pca[:,1][y == 2])
plt.legend((setosa, versicolour, virginica), ('setosa', 'versicolour', 'virginica'))
plt.show()
  1. 基于降维后数据建立KNN模型
from sklearn.neighbors import KNeighborsClassifier

KNN = KNeighborsClassifier(n_neighbors=3)
KNN.fit(X_pca,y)
y_predict = KNN.predict(X_pca)
accuracy = accuracy_score(y,y_predict)
print(accuracy)

总结

  1. 通过计算数据对应的主成分(principle components),可在减少数据维度同时尽可能保留主要信息。
  2. 为确定合适的主成分维度,可先对数据进行与原数据相同维度的PCA处理,再根据根据各个成分的数据方差确认主成分维度,即比例大的保留下来。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号