维数灾难与PCA主成分分析

背景  

  维数灾难是机器学习中常见的现象,具体是指随着特征维数的不断增加,需要处理的数据相对于特征形成的空间而言比较稀疏,由有限训练数据拟合的模型可以很好的适用于训练数据,但是对于未知的测试数据,很大几率距离模型空间较远,训练的模型不能处理这些未知数据点,从而形成“过拟合”的现象。

方案

  既然维数灾难严重影响模型的泛化,那么如何解决呢?容易想到的解决办法是增加数据量,但是如果特征维数比较多,需要很大的数据量才能将整个特征空间“填满”,代价太大;还有一种比较容易实现而且效果还不错的解决办法就是特征的降维。特征的降维的主要思想是:过滤掉一些不重要的特征,或者把一些相关的特征进行合并,在减少特征维数的同时尽量保留原始数据的信息。

  PCA主要包含以下几个步骤:

  1、标准化样本矩阵中的原始数据;(通常每列是一个维度,按列进行标准化,不可整体标准化,每列都是相互独立的)

  2、获取标准化矩阵的协方差矩阵;  

  3、计算协方差矩阵的特征值和特征向量;

  4、依照特征值的大小,挑选主要的特征向量;

  5、生成新的特征。

工具

  本文使用工具为:Anaconda、PyCharm、python语言、sklearn

Python代码实现

from numpy import *
from numpy import linalg as LA
from sklearn.preprocessing import scale
from sklearn.decomposition import PCA
import pandas as pd

data = {‘a‘: [1,2,3,40], ‘b‘: [5,6,17,8], ‘c‘: [9,10,81,12]}
x = pd.DataFrame(data)
#x_s = (x-x.mean())/x.std()
# 对矩阵按列进行标准化,每列是一个维度
x_s = scale(x, with_mean=True, with_std=True, axis=0)
print("标准化之后的矩阵为:{}".format(x_s))

# 获取标准化矩阵的协方差矩阵
x_cov = cov(x_s.transpose())

# 计算协方差矩阵的特征值和特征向量
e,v = LA.eig(x_cov)
print("特征值:{}".format(e))
print("特征向量:\n{}".format(v))

# 依照特征值的大小,挑选主要的特征向量
pca = PCA(2)
pca.fit(x_s)

# 输出变换后的数据矩阵
print("方差(特征值): ", pca.explained_variance_)
print("主成分(特征向量)", pca.components_)
print("变换后的样本矩阵:",pca.transform(x_s))
print("信息量: ", pca.explained_variance_ratio_)

代码运行结果

标准化之后的矩阵为:[[-0.63753558 -0.84327404 -0.6205374 ]
 [-0.5768179  -0.63245553 -0.58787754]
 [-0.51610023  1.68654809  1.73097275]
 [ 1.73045371 -0.21081851 -0.52255781]]
特征值:[2.72019876e+00 1.27762876e+00 2.17247549e-03]
特征向量:
[[ 0.2325202  -0.96356584  0.13219394]
 [-0.67714769 -0.25795064 -0.68915344]
 [-0.69814423 -0.07072727  0.71245512]]
方差(特征值):  [2.72019876 1.27762876]
主成分(特征向量) [[-0.2325202   0.67714769  0.69814423]
 [ 0.96356584  0.25795064  0.07072727]]
变换后的样本矩阵: [[-0.85600578 -0.8757195 ]
 [-0.7045673  -0.76052331]
 [ 2.4705145   0.06017659]
 [-0.90994142  1.57606622]]
信息量:  [0.68004969 0.31940719]

  

  

原文地址:https://www.cnblogs.com/wyb-mingtian/p/12590043.html

时间: 2024-10-08 15:11:57

维数灾难与PCA主成分分析的相关文章

分类问题中的“维数灾难”

在看机器学习的论文时,经常会看到有作者提到“curse of dimensionality”,中文译为“维数灾难”,这到底是一个什么样的“灾难”?本文将通过一个例子来介绍这令人讨厌的“curse of dimensionality”以及它在分类问题中的重要性. 假设现在有一组照片,每一张照片里有一只猫或者一条狗.我们希望设计一个分类器可以自动地将照片中的动物辨别开来.为了实现这个目标,首先需要考虑如何将照片中的动物的特征用数字的形式表达出来.猫与狗的最大区别是什么?有人可能首先想到猫与狗的颜色不

维数灾难

Content 1 引言 2 维数灾难与过拟和 3 怎样避免维数灾难 4 总结 1 引言 本文章讨论的话题是“curse of dimension”,即维数灾难,并解释在分类它的重要性,在下面的章节我会对这个概念做一个直观的解释,并清晰的描述一个由维数灾难引起的过度拟合的问题. 下面不如正题,考虑我们有一堆猫和狗的图片,现在要做一个分类器,它可以把猫和狗自动并且正确分类.所以对这个两个类别,首先需要一组描述符,使这两个类别可以被表示为数字,分类器可以使用数字来决定类别(如Logistic Reg

【cs229-Lecture17】离散与维数灾难

主要内容: 解决MDP问题的算法: 离散化: 模型MDP的同化型: (model/similator) 拟合值迭代算法: Q函数: 近似政策迭代: 笔记转自:http://blog.csdn.net/dark_scope/article/details/8252969 连续状态的MDP 之前我们的状态都是离散的,如果状态是连续的,下面将用一个例子来予以说明,这个例子就是inverted pendulum问题 也就是一个铁轨小车上有一个长杆,要用计算机来让它保持平衡(其实就是我们平时玩杆子,放在手

维数诅咒

介绍 在这篇文章中,我们将讨论所谓的"维数的诅咒",并解释为什么在设计分类器时它是很重要的.以下各节我会提供这个概念直观的解释,并用一个由于维数灾难导致的过拟合例子图解说明. 考虑这样一个例子,我们有一组图像,其中每个表示猫或狗.我们想创建一个分类器,它能够自动识别狗和猫.要做到这一点,我们首先需要考虑每个对象类的描述,该描述可以用数字来表示.这样的数学算法,即分类器,可以用这些数字来识别对象.例如,我们可以认为猫和狗有不同的颜色.区分这两个类的一种可能描述可以由三个数字组成:平均红色

PCA主成分分析

原文地址链接 1. 问题 真实的训练数据总是存在各种各样的问题: 1. 比如拿到一个汽车的样本,里面既有以“千米/每小时”度量的最大速度特征,也有“英里/小时”的最大速度特征,显然这两个特征有一个多余. 2. 拿到一个数学系的本科生期末考试成绩单,里面有三列,一列是对数学的兴趣程度,一列是复习时间,还有一列是考试成绩.我们知道要学好数学,需要有浓厚的兴趣,所以第二项与第一项强相关,第三项和第二项也是强相关.那是不是可以合并第一项和第二项呢? 3. 拿到一个样本,特征非常多,而样例特别少,这样用回

【机器学习算法-python实现】PCA 主成分分析、降维

1.背景 PCA(Principal Component Analysis),PAC的作用主要是降低数据集的维度,然后挑选出主要的特征. PCA的主要思想是移动坐标轴,找到方差最大的方向上的特征值,什么叫方差最大的方向的特征值呢.就像下图中的曲线B,一样,它的覆盖范围最广. 基本步骤:(1)首先计算数据集的协方差矩阵 (2)计算协方差矩阵的特征值和特征向量 (3)保留最重要的n个特征 what is 协方差矩阵: 定义是变量向量减去均值向量,然后乘以变量向量减去均值向量的转置再求均值.例如x是变

PCA主成分分析+白化

引言 主成分分析(PCA)是一种能够极大提升无监督特征学习速度的数据降维算法.更重要的是,理解PCA算法,对实现白化算法有很大的帮助,很多算法都先用白化算法作预处理步骤. 假设你使用图像来训练算法,因为图像中相邻的像素高度相关,输入数据是有一定冗余的.具体来说,假如我们正在训练的16x16灰度值图像,记为一个256维向量  ,其中特征值  对应每个像素的亮度值.由于相邻像素间的相关性,PCA算法可以将输入向量转换为一个维数低很多的近似向量,而且误差非常小. 实例和数学背景 在我们的实例中,使用的

PCA主成分分析Python实现

作者:拾毅者 出处:http://blog.csdn.net/Dream_angel_Z/article/details/50760130 Github源代码:https://github.com/csuldw/MachineLearning/tree/master/PCA PCA(principle component analysis) .主成分分析,主要是用来减少数据集的维度,然后挑选出基本的特征.原理简单,实现也简单.关于原理公式的推导,本文不会涉及,你能够參考以下的參考文献,也能够去W

[降维] PCA 主成分分析

其实早该整理一下PCA了,怎奈一直没有时间,可能是自己对时间没有把握好吧,下面进入正题. 降维的概念 所谓降维,就是降低数据的维数.在机器学习中尤其常见,之前做过对一幅图片提取小波特征,对于一幅大小为800*600的图片,如果每个点提取五个尺度.八个方向的特征,那么每一个像素点提取40个特征,那么一副图片的话就是40*800*600=19200000个特征.也就是我们用一个19200000的向量描述一幅图片.如果有m幅图片,那么特征为m*19200000的大小.显然这个维数太大了,所以需要降维.