欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

深度学习花书 笔记3 - 矩阵对角化、奇异值分解(SVD)、极大似然估计、误差的高斯分布与最小二乘估计的等价性、PCA原理与推导

程序员文章站 2024-03-19 16:11:58
...

深度学习花书 笔记3 - 矩阵对角化、奇异值分解(SVD)、极大似然估计、误差的高斯分布与最小二乘估计的等价性、PCA原理与推导)

1. 矩阵对角化

深度学习花书 笔记3 - 矩阵对角化、奇异值分解(SVD)、极大似然估计、误差的高斯分布与最小二乘估计的等价性、PCA原理与推导
深度学习花书 笔记3 - 矩阵对角化、奇异值分解(SVD)、极大似然估计、误差的高斯分布与最小二乘估计的等价性、PCA原理与推导

2. 奇异值分解

深度学习花书 笔记3 - 矩阵对角化、奇异值分解(SVD)、极大似然估计、误差的高斯分布与最小二乘估计的等价性、PCA原理与推导

3. 极大似然估计、误差的高斯分布与最小二乘估计的等价性

深度学习花书 笔记3 - 矩阵对角化、奇异值分解(SVD)、极大似然估计、误差的高斯分布与最小二乘估计的等价性、PCA原理与推导
深度学习花书 笔记3 - 矩阵对角化、奇异值分解(SVD)、极大似然估计、误差的高斯分布与最小二乘估计的等价性、PCA原理与推导

4. PCA原理与推导

深度学习花书 笔记3 - 矩阵对角化、奇异值分解(SVD)、极大似然估计、误差的高斯分布与最小二乘估计的等价性、PCA原理与推导
深度学习花书 笔记3 - 矩阵对角化、奇异值分解(SVD)、极大似然估计、误差的高斯分布与最小二乘估计的等价性、PCA原理与推导
PCA实现代码:
首先,先创建数据

'''
Created on Apr 6, 2020
Author: ***
'''
import os, sys
import numpy as np
import matplotlib
import matplotlib.pyplot as plt

n = 400 #数据的个数
fw = open('data.txt', 'w')
classes = [0, 1]

x1 = np.random.uniform(1, 10, 200)
y1 = np.random.uniform(1, 10, 200)
for i in range(200):
    fw.write("%f\t%f\t%d\n" % (x1[i], y1[i], classes[0]))

x2 = np.random.uniform(9, 15, 200)
y2 = np.random.uniform(9, 15, 200)
for i in range(200):
    fw.write("%f\t%f\t%d\n" % (x2[i], y2[i], classes[1]))

fw.close()
figure = plt.figure()
ax = figure.add_subplot(111)
ax.scatter(x1, y1, marker='o',s=80, c='green')
ax.scatter(x2, y2, marker='^',s=80, c='red')
plt.show()

深度学习花书 笔记3 - 矩阵对角化、奇异值分解(SVD)、极大似然估计、误差的高斯分布与最小二乘估计的等价性、PCA原理与推导
具体实现代码:

'''
Created on Jun 1, 2011

@author: Peter
'''
from numpy import *
import matplotlib
import matplotlib.pyplot as plt

def loadDataSet(fileName, delim='\t'):
    fr = open(fileName)
    stringArr = [line.strip().split(delim) for line in fr.readlines()]
    datArr = [list(map(float, line)) for line in stringArr]
    return mat(datArr)

def pca(data, max_n=99999):
    mean_values = mean(data, axis=0)  # 计算数据均值
    remove_mean = data - mean_values  # 数据减去均值
    cov_values = cov(remove_mean, rowvar=0)  # 计算协方差
    eigen_values, eigen_vectors = linalg.eig(mat(cov_values))  # 计算特征值和特征向量
    eigen_value_indexes = argsort(eigen_values)  # 从小到大排列
    eigen_value_indexes = eigen_value_indexes[:-(max_n + 1):-1]  # 保留最大的前n个特征值
    red_eigen_vectors = eigen_vectors[:, eigen_value_indexes]  # 获得对应的特征向量
    low_dimension_data = remove_mean * red_eigen_vectors  # 将数据转换到新的低维空间
    new_data = (low_dimension_data * red_eigen_vectors.T) + mean_values  # 对新的数据进行重构
    return low_dimension_data, new_data

if __name__ == '__main__':
    dataMat = loadDataSet('data.txt')
    lowDMat, reconMat = pca(dataMat.A, 1)
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.scatter(dataMat[:, 0].tolist(), dataMat[:, 1].tolist(), marker='^', s=90)
    ax.scatter(reconMat[:, 0].tolist(), reconMat[:, 1].tolist(), marker='o', s=50, c='red')
    plt.show()

结果:
深度学习花书 笔记3 - 矩阵对角化、奇异值分解(SVD)、极大似然估计、误差的高斯分布与最小二乘估计的等价性、PCA原理与推导