《机器学习线性代数基础》Python描述——第五章笔记

上一章节第四章笔记

对称矩阵除了它和“自身转置后的结果相等”这一性质以外,还有很多特性。比如:实对称矩阵一定能够相似对角化,并且能够得到一组标准的正交特征向量。同时,任意一个矩阵A同自身的转置矩阵AT相乘都能得到一个对称矩阵。

对于任意一个实对称矩阵而言,它都一定可以被对角化,换句话说,对于一个对称矩阵,无论它的特征值是否重复,它的特征向量都满足线性无关。

任意一个实对称矩阵都可以获得一组标准正交的特征向量。

对于任意一个m*n形状的矩阵A,它的列向量中线性无关的向量个数等于其行向量中线性无关的向量的个数。即有r(A) = r(AT)

重要结论:r(AAT) = r(AT) = r(A) = r(ATA)

如果一个矩阵的所有特征值都为正,那么我们称其为“正定的”矩阵;如果均为非负(即最小的特征值为0),那么我们称其为“半正定的”矩阵;如果它含有负的特征值,那么我们称它为“非正定的”矩阵。

对称矩阵ATA它的特征值一定是非负的,也就是说,它至少是“半正定的”矩阵

实对称矩阵中非零特征值的个数等于该矩阵的秩

ATA和AAT这两个实对称矩阵的特征值满足的关系为:ATA和AAT拥有完全相同的非零特征值

矩阵ATA和AAT都能被对角化,且可以通过矩阵分解,获得一组标准正交的特征向量。

数据分布的度量

期望用来衡量的是一组变量X取值分布的平均值,一般将其记作E[X],它反映的是不同数据集的整体水平。

方差的定义式为V[X] = E[(X-μ)2] (其中,μ = E[X],表示的就是期望),它反映的是一组数据的离散程度。通俗地说,对于一组数据而言,其方差越大,数据的分布就越发散;方差越小,数据的分布就越集中。在一组样本集的方差计算中,采用:在这里插入图片描述
注意:样本方差估计为什么分母用n-1

协方差用来表示两个数据集的关联密切程度,Cov[X,Y] = E[(X-μ)(Y-v)]
当随机变量X和随机变量Y的协方差为正时,表示当X增大时,Y也倾向于随之增大;而当协方差为负时,表示当X增大,Y却倾向于减小;当协方差为0时,表示当X增大时,Y没有明显的增大或减小的倾向,二者是相互独立的。

协方差矩阵各位置上元素的含义:协方差矩阵中的第i行第j列的元素Cov[Xi,Xj]表示随机变量Xi和Xj之间的协方差,而对角线上第i行和第i列的元素V[Xi]则表示随机变量Xi自身的方差。

代码展示:

import numpy as np

eng, mat, phy = np.loadtxt('score.csv', delimiter=',', usecols=(1, 2, 3), unpack=True)
print(eng.mean(), mat.mean(), phy.mean())#期望
print(np.cov(eng), np.cov(mat), np.cov(phy))#方差

S = np.vstack((eng, mat, phy))
print(np.cov(S))#协方差

结果:
在这里插入图片描述

利用特征值分解(EVD)进行主成分分析(PCA):

主成分分析方法的首要目标就是减少研究对象的特征维度,但同时又要尽量减少降维过程中不可避免的信息损失。

数据降维的目标:特征减少,损失要小

那如何对样本的特征属性进行降维?目标是什么?
归结起来有两点:

  1. 第一个目标是特征维度要变小,不能使用那么多的特征属性
  2. 第二个目标是描述样本的信息损失要尽量少,数据降维,一定伴随着信息的损失,但是如果损失的太多列,数据降维自然也就失去了意义。

推广到n个特征的降维:

  1. 针对采样得到的m个观察样本,得到了一个n*m规模大小的样本数据矩阵A
  2. 对每一个特征值的取值,进行零均值化处理,如果这些特征不在一个数量级上,那么还将其处以标准差σ
  3. 利用预处理后的矩阵A,求n个特征的协方差矩阵:C = 1/(n-1) * AAT
  4. 对协方差矩阵进行对角化处理,求得协方差矩阵C的n个标准正交特征向量,并按照对应的特征值大小依次排列
  5. 展昭实现规定的主成分贡献率,提取满足该数值要求的前k个新构造的特征作为主成分,构造成数据压缩矩阵:P = [q1T,q2T,q3T…qkT]T
  6. 通过矩阵相乘PA实现前k个主成分的提取,将数据的n维特征压缩到k维,实现主成分提取。

奇异值分解(SVD):

奇异值分解可以对任意形状的矩阵进行分解,适用性更广。

奇异值分解的精彩之处在于:它可以从行和列这两个不同的维度同时展开对数据的降维处理工作。一个采样数据矩阵的行和列通常代表着不同的特征值,因此奇异值分解的这种特性可以带来非常便捷的处理效果。

行压缩数据降维

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

利用Python进行奇异值分解:

import numpy as np

A = np.array([[0, 0, 0, 2, 2],
              [0, 0, 0, 3, 3],
              [0, 0, 0, 1, 1],
              [1, 1, 1, 0, 0],
              [2, 2, 2, 0, 0],
              [5, 5, 5, 0, 0],
              [1, 1, 1, 0, 0]])
U, sigma, VT = np.linalg.svd(A)
print(U)
print("==========================================")
print(sigma)
print("==========================================")
print(VT)
print("==========================================")
U_T_2_7 = U.T[:2, :]
print(np.dot(U_T_2_7, A))
VT_2_5 = VT[:2, :]
print(np.dot(VT_2_5, A.T).T)
print("==========================================")
A_1 = sigma[0] * np.dot(np.mat(U[:, 0]).T, np.mat(VT[0, :]))
A_2 = sigma[1] * np.dot(np.mat(U[:, 1]).T, np.mat(VT[1, :]))
print(A_1 + A_2)

结果:

[[-2.22044605e-16  5.34522484e-01  8.41641151e-01 -1.37443101e-02
  -7.57428665e-02 -1.11022302e-16  1.38777878e-17]
 [ 0.00000000e+00  8.01783726e-01 -4.92426901e-01 -2.47257115e-01
   2.31349353e-01  3.15719673e-16 -2.77555756e-17]
 [ 0.00000000e+00  2.67261242e-01 -2.06001597e-01  7.69259966e-01
  -5.42562325e-01 -7.55450741e-16  1.09551769e-16]
 [-1.79605302e-01  2.77555756e-17 -3.00520660e-02 -2.15935735e-01
  -2.94749442e-01  9.05439185e-01 -1.16246358e-01]
 [-3.59210604e-01  5.55111512e-17 -6.01041319e-02 -4.31871470e-01
  -5.89498885e-01 -4.19124526e-01 -3.97074256e-01]
 [-8.98026510e-01  0.00000000e+00  3.60624791e-02  2.59122882e-01
   3.53699331e-01  5.40010673e-16 -6.71525577e-17]
 [-1.79605302e-01  2.77555756e-17 -3.00520660e-02 -2.15935735e-01
  -2.94749442e-01 -6.71901321e-02  9.10394870e-01]]
==========================================
[9.64365076e+00 5.29150262e+00 8.36478329e-16 6.91811207e-17
 1.11917251e-33]
==========================================
[[-5.77350269e-01 -5.77350269e-01 -5.77350269e-01  0.00000000e+00
   0.00000000e+00]
 [-2.46566547e-16  1.23283273e-16  1.23283273e-16  7.07106781e-01
   7.07106781e-01]
 [-7.01908483e-01 -1.02844064e-02  7.12192890e-01 -2.22044605e-16
  -1.66533454e-16]
 [-4.17122461e-01  8.16431808e-01 -3.99309347e-01  0.00000000e+00
  -1.11022302e-16]
 [-0.00000000e+00 -1.96261557e-16  1.96261557e-16  7.07106781e-01
  -7.07106781e-01]]
==========================================
[[-5.56776436e+00 -5.56776436e+00 -5.56776436e+00 -4.44089210e-16
  -4.44089210e-16]
 [ 1.66533454e-16  1.66533454e-16  1.66533454e-16  3.74165739e+00
   3.74165739e+00]]
[[ 0.00000000e+00  2.82842712e+00]
 [ 0.00000000e+00  4.24264069e+00]
 [ 0.00000000e+00  1.41421356e+00]
 [-1.73205081e+00  0.00000000e+00]
 [-3.46410162e+00  0.00000000e+00]
 [-8.66025404e+00 -2.46519033e-32]
 [-1.73205081e+00  0.00000000e+00]]
==========================================
[[ 5.38896529e-16  1.58498979e-15  1.58498979e-15  2.00000000e+00
   2.00000000e+00]
 [-1.04609326e-15  5.23046632e-16  5.23046632e-16  3.00000000e+00
   3.00000000e+00]
 [-3.48697754e-16  1.74348877e-16  1.74348877e-16  1.00000000e+00
   1.00000000e+00]
 [ 1.00000000e+00  1.00000000e+00  1.00000000e+00  1.03851855e-16
   1.03851855e-16]
 [ 2.00000000e+00  2.00000000e+00  2.00000000e+00  2.07703709e-16
   2.07703709e-16]
 [ 5.00000000e+00  5.00000000e+00  5.00000000e+00  0.00000000e+00
   0.00000000e+00]
 [ 1.00000000e+00  1.00000000e+00  1.00000000e+00  1.03851855e-16
   1.03851855e-16]]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值