上期内容:
上期讲到朴素贝叶斯模型,它适合于数据量小,或者特征间相互独立,若遇到特征间的相关系数较大,我们可以对特征进行降维,减少特征数量。今天我们就来讲讲机器学习中的降维方法:主成分分析(PCA)和因子分析。文章重在python实现,不是数学推导。喜欢推到的同学可以参考
文章目录
主成分分析(PCA)
1、原理
- 主成分分析是一种常用的无监督学习方法,它利用正交变换将线性相关变量的观测数据转化为少数几个线性无关变量表示的数据,线性无关的变量叫做主成分。由于主成分比原数据个数少,因此被称为降维方法(减少维度)。
- 主成分分析中,首先将数据进行规范化(符合正态分布)。之后对数据进行正交变量,减少变量个数,使其线性无关。新变量是可能的正交变换中变量的方差的和最大的,方差表示新变量上存储的信息大小,根据方差大小,将新变量依次成为第一主成分、第二主成分等。这就是PCA的基本思想。
2、基本流程
- 去中心标准化
- 计算数据的协方差矩阵(n*n)及矩阵的特征值与特征向量
- 对特征值降序排序,保留最大的k个特征向量
- 将数据转换到k个特征向量构建的新空间中
3、优缺点
- 优点:
- 使得数据集更易使用;
- 降低算法的计算开销;
- 去除噪声;
- 使得结果容易理解;
- 完全无参数限制。
- 缺点:
- 如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高;
- 特征值分解有一些局限性,比如变换的矩阵必须是方阵;
- 在非高斯分布(正态分布)情况下,PCA方法得出的主成分可能并不是最优的。
4、python实战
利用python实现
- 为了更清楚明白PCA的详细过程,这里利用python语句进行一步一步的实现PCA
model_data = pd.read_csv("PCA数据集.csv",encoding='gbk',sep=',',index_col=0)
model_data['X1'] = model_data['X1'] - model_data['X1'].mean()
model_data['X2'] = model_data['X2'] - model_data['X2'].mean()
model_data['X3'] = model_data['X3'] - model_data['X3'].mean()
model_data['X4'] = model_data['X4'] - model_data['X4'].mean()
model_data['X5'] = model_data['X5'] - model_data['X5'].mean()
mtr_ju = model_data.cov()
import numpy as np
val, vec = np.linalg.eig(mtr_ju)
np.dot(np.array(vec[:,0:2]), np.array(model_data))
利用sklearn实现
import pandas as pd
from sklearn.decomposition import PCA
from sklearn import preprocessing
data = pd.read_csv("PCA数据集.csv",encoding='gbk',sep=',',index_col=0)
corr_matrix = data.corr(method='pearson')
data = preprocessing.scale(data)
'''说明:1、第一次的n_components参数应该设的大一点
说明:2、观察explained_variance_ratio_和explained_variance_的取值变化,
建议explained_variance_ratio_累积大于0.85,explained_variance_需要保留的最后一个主成分大于0.8,
'''
pca=PCA(n_components=2)
pca.fit(data)
newdata1=pca.fit_transform(data)
print(pca.explained_variance_)
print(pca.explained_variance_ratio_)
pca=PCA(n_components=1).fit(data)
newdata=pca.fit_transform(data)
'''通过主成分在每个变量上的权重的绝对值大小,确定每个主成分的代表性'''
pca.components_
附加:因子分析
- 因子分析和PCA的原理基本一致,都是适用于特征较多,相关性较大的数据集,降维分析方法。因子分析通过研究众多变量之间的内部依赖关系,用少数假想变量反映原来众多变量的主要信息。原始的变量是可观测的显在变量,而假想变量是不可观测的潜在变量,称为因子。(主成分分析中成为主成分)
- 区别:
- 在主成分分析中,新变量是原始变量的线性组合。在诸多主成分 中,第一个主成分在方差中的占比最大,说明它综合原有变量的能力最强,越往后主成分在方差中的比重也小,综合原信息的能力越弱。重点在于解释各变量的总方差。
- 因子分析不是原有变量的线性组合,而是将变量进行分解,利用少数几个公共因子去解释较多个要观测变量中存在的复杂关系,而这些少数因子分解为公共因子与特殊因子两部分。公共因子是由所有变量共同具有的少数几个因子;特殊因子是每个原始变量独自具有的因子。重点放在解释各变量之间的协方差。
参考:
机器学习–主成分分析(PCA)算法的原理及优缺点
因子分析
因子分析与主成分分析的区别
统计学习方法 李航著
Original: https://blog.csdn.net/m0_69435474/article/details/124523237
Author: 小磊要努力哟
Title: 机器学习之降维方法PCA与因子分析
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/599654/
转载文章受原作者版权保护。转载请注明原作者出处!