机器学习之PCA
程序员文章站
2022-07-13 08:51:35
...
在机器学习中,数据预处理极为重要,好的数据预处理往往比模型更为关键,数据预处理中降维是相当重要的一个环节。常见的降维方法有很多种,如:SVD奇异值分解法,PCA主成分分析法等,这里主要针对PCA谈谈自己的看法。
PCA概念
PCA的思想是将数据从原来的坐标系转换到新的坐标系中,新的坐标系的选择与数据本身相关。第一个新的坐标轴是原始数据中方差最大的方向,第二个新的坐标轴是与第一个坐标轴正交且具有最大方差的方向,一只重复该过程,直到轴数达到原数据的特征数。方差越大信息量就越大,大部分的方差都包含的最前面的几个新坐标轴中,可以保留这些前边的轴,忽略后边的轴,这就是降维处理。
PCA原理
PCA算法流程如下:
- 中心化,每一个特征都减去各自的平均值(主要是方便计算);
- 计算协方差矩阵(二维的是计算方差,多维的计算协方差);
- 计算协方差矩阵的特征值和特征向量;
- 将特征值从大到小排序;
- 保留最大的k个特征向量;
- 将数据转换到k个特征向量构成的新坐标系中。
PCA计算步骤
假设为维的随机矢量,我们想要降维指k维(则PCA具体计算步骤如下:
- 对每个样本进行中心化处理,;
- 计算协方差矩阵
- 计算特征值和特征向量
这里首先说明一下特征值与特征向量的概念:假设为阶方阵,如果存在一个数和非零维向量,使得 成立,则称 为矩阵的一个特征值,则称为的对应于特征值的特征向量。
利用 变换为: ,为维的单位向量,解出该方程就可以得到特征值 ,将带入,则可求出对应的特征向量。
- 将特征值进行排序,选出前k个对应的特征向量,即为我们需要的数据。
PCA代码实现
import numpy as np
def func_pca(input, k):
"""
这里的input默认都是预处理过的,都是数值类型,维度为 m * n
"""
m, n = input.shape
if k > n:
assert "k 必须小于特征维度!“
# 中心化
average = np.mean(input, 0)
input_average = input - average
# 计算协方差矩阵
cov_vec = np.conv(input_average.T)
# 计算协方差也可以按照公式计算
# cov_vec = 1/(m-1+1e-6) * np.dot(input_average.T, input_average)
# 求解特征值和特征向量
feature_val, feature_vec = np.linalg.eig(cov_vec)
# 获取前 k 个特征向量
index_val = np.argsort(-feature_val)
selected_vec = feature_vec[:, :k]
# 获取data
data = np.dot(input_average, selected_vec)
return data
这里顺便说一下协方差的意义:
- cov(X, Y) > 0时,表示 X 与 Y正相关;
- cov(X, Y) < 0时,表示 X 与 Y负相关;
- cov(X, Y) = 0时,表示 X 与 Y不相关;
这里的相关指的是线性相关,并不能得到他们之间的非线性关系。
上一篇: 机器学习之PCA(降维算法)
下一篇: 机器学习【三】集成算法
推荐阅读
-
t统计量和z统计量 博客分类: 数据挖掘&机器学习
-
Android学习笔记之AndroidManifest.xml文件解析 博客分类: android androidAndroidManifest
-
Android学习笔记之AndroidManifest.xml文件解析(转) 博客分类: Android androidAndroidManifest
-
PHP网页游戏学习之Xnova(ogame)源码解读(五)_PHP教程
-
ORACLE数据库学习之逻辑结构
-
hadoop JOB的性能优化实践 博客分类: 数据挖掘&机器学习
-
数据库学习总结轻松走进数据库系列之十四
-
SSIS学习之SSIS介绍
-
Mysql学习之十二:JDBC连接数据库之DriverManager方法_MySQL
-
加载distribute cache过大 博客分类: 数据挖掘&机器学习