机器学习系列(13)_PCA对图像数据集的降维_02(下)

简介: 【1】降维:会减少特征,删除数据,可能使得模型受影响 【2】噪音:衡量特征之间的线性相关 【3】PCA(主成分分析)使用样本方差作为信息量衡量的指标

5、分析计算过程(以啤酒消费为例子)


def plot_vectors(vectors=[(0, 0, 1, 2),(0, 0, 3, 1)], 
                 texts=[r'$\vec{a}$', r'$\vec{b}$', 'power vec', 'power vec2'], 
                 texts_locs=[(0.5, 0.7), (0.2, 0.8), (0.7, 0.5),  (0.5, 0.5)], text_size=18, 
                 colors=["#2EBCE7","#00E64E", "purple", 'orange'],   
                 xlim=(-1, 3), ylim=(-1,3), x_label='x', y_label='y', 
                 scale=1, scale_units='xy'):
    fig, ax =plt.subplots(figsize=(6,6))
    ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
    ax.yaxis.set_major_locator(ticker.MultipleLocator(1))
    for i, vec in enumerate(vectors):
        ax.quiver(*vec, color=colors[i], angles='xy', scale_units=scale_units, scale=scale)
        plt.text(*texts_locs[i], texts[i], color=colors[i], size=text_size)
    # draw axes
    plt.axhline(0, c='#d6d6d6', zorder=0)
    plt.axvline(0, c='#d6d6d6', zorder=0)
    plt.xlim(*xlim)
    plt.ylim(*ylim)
    plt.xlabel(x_label)
    plt.ylabel(y_label)
    plt.show()
    return ax

啤酒消费的数据:

f39d14dc37384ff3918726201bc1d10f.pngimage.png


【1】‘Temperatura Media ©’:平均温

【2】‘Temperatura Minima ©’:最低温

【3】‘Temperatura Maxima ©’:最高温

【4】‘Precipitacao (mm)’:降雨量

【5】‘Final de Semana’:是否周末

【6】‘Consumo de cerveja (litros)’:相当于标签

def plot_beer(x, y, x_label="Maximal temperature ($\degree$C)", y_label="Consuption (liters)", 
              alpha=0.3, draw_axes=False):
    plt.scatter(x, y, alpha=alpha)
    plt.xlabel(x_label)
    plt.ylabel(y_label)
    # Assure that ticks are displayed with a specific step
    ax = plt.gca()
    ax.xaxis.set_major_locator(ticker.MultipleLocator(5))
    ax.yaxis.set_major_locator(ticker.MultipleLocator(5))
    if draw_axes:
        # draw axes
        plt.axhline(0, c='#d6d6d6', zorder=0)
        plt.axvline(0, c='#d6d6d6', zorder=0)
    # assure x and y axis have the same scale
    plt.axis('equal')
    plt.show()

e016beaee3da4846beb318dce027b51b.png222f56ee99094925999accd50eb69390.png354bdd57a65f4458bc5fdd5a97b79b47.png


# 1、创建新的数据集
X = np.array([df['Temperatura Maxima (C)'],
              df['Consumo de cerveja (litros)']]).T
# 2、计算协方差矩阵
C = np.cov(X, rowvar=False)
C
# 3、计算均值,数据中心化
X_norm=X.copy()
X_norm-=X.mean(axis=0)
# 4、定义计算特征,计算函数与SVD超级迭代函数
def eigenvalue(A, v):
    val = A @ v / v
    return val[0]
def svd_power_iteration(A):
    n, d = A.shape
    v = np.ones(d) / np.sqrt(d)
    ev = eigenvalue(A, v)
    while True:
        Av = A @ v
        v_new = Av / np.linalg.norm(Av)
        ev_new = eigenvalue(A, v_new)
        if np.abs(ev - ev_new) < 0.01:
            break
        v = v_new
        ev = ev_new
    return ev_new, v_new


eigen_value, eigen_vec = svd_power_iteration(C)

得到的特征值:


77367b2ed5ba442a9ae11ce476d978f4.png


与numpy的计算功能对比:

# 与numpy的计算功能对比
u, s, v=np.linalg.svd(C, 1)


下面的三个参数是numpy中的SVD的解释:

46247dc7da504bedaa7357c07be7460f.png

# 寻找主要的特征向量
def plot_eigenvectors(eigen_vecs, eigen_values, colors=["#FF8177", "orange"]):
    for i, eigen_vec in enumerate(eigen_vecs):
        plt.quiver(0, 0,
           2 * np.sqrt(eigen_values[i]) * eigen_vec[0], 2 * np.sqrt(eigen_values[i]) * eigen_vec[1],
           color=colors[i], angles="xy", scale_units="xy", scale=1,
           zorder=2, width=0.011)
plot_eigenvectors([eigen_vec], [eigen_value], colors=["#FF8177", "orange"])
plot_beer(X_norm[:, 0], X_norm[:, 1], draw_axes=True)

24083e48e80845fe87ae7d0f621ae4f8.png


6、SVM,SVR,SVC的区别


  • SVM=Support Vector Machine 是支持向量
  • SVC=Support Vector Classification就是支持向量机用于分类
  • SVR=Support Vector Regression.就是支持向量机用于回归分析


7、特征值与奇异值分解


#特征值分解
from scipy import linalg
import numpy as np
A=np.array([[1,2],[3,4]])
l,v=linalg.eig(A)
print(l)
print(v)
'''
[-0.37228132+0.j  5.37228132+0.j]
[[-0.82456484 -0.41597356]
 [ 0.56576746 -0.90937671]]
'''


#奇异值分解 
from numpy import *
data=mat([[1,2,3],[4,5,6]])
U,sigma,VT=np.linalg.svd(data)
print('U:',U)
print('SIGMA:',sigma)
print('VT:',VT)
'''
U: [[-0.3863177   0.92236578]
 [-0.92236578 -0.3863177 ]]
SIGMA: [9.508032   0.77286964]
VT: [[-0.42866713 -0.56630692 -0.7039467 ]
 [-0.80596391 -0.11238241  0.58119908]
 [ 0.40824829 -0.81649658  0.40824829]]
'''
#奇异值分解 2
from numpy import *
data=mat([[1,2,3],[4,5,6],[7,8,9]])
U,sigma,VT=np.linalg.svd(data)
print('U:',U)
print('SIGMA:',sigma)
print('VT:',VT)
'''
U: [[-0.21483724  0.88723069  0.40824829]
 [-0.52058739  0.24964395 -0.81649658]
 [-0.82633754 -0.38794278  0.40824829]]
SIGMA: [1.68481034e+01 1.06836951e+00 4.41842475e-16]
VT: [[-0.47967118 -0.57236779 -0.66506441]
 [-0.77669099 -0.07568647  0.62531805]
 [-0.40824829  0.81649658 -0.40824829]]
'''
#奇异值分解 3
from numpy import *
data=mat([[1,2,3],[4,5,6],[7,8,9],[11,22,33]])
U,sigma,VT=np.linalg.svd(data)
print('U:',U)
print('SIGMA:',sigma)
print('VT:',VT)
'''
U: [[-0.0844147  -0.03251869  0.53753816 -0.83837308]
 [-0.19452796  0.40431201  0.75055526  0.48513655]
 [-0.30464122  0.84114271 -0.37527763 -0.24256827]
 [-0.92856166 -0.35770557 -0.08298325  0.05416407]]
SIGMA: [4.42965582e+01 4.10060089e+00 1.49502706e-15]
VT: [[-0.29819909 -0.54195984 -0.78572058]
 [ 0.86279235  0.19902982 -0.46473271]
 [ 0.40824829 -0.81649658  0.40824829]]
'''


8、案例:猩猩图片处理


from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
im=np.array(Image.open('hxx00.jpg'))  #图片不能太大
plt.imshow(im,cmap='Greys_r')
plt.title('SRC')
plt.axis('off')

ab086d3cec5a4729ba569d3e214810cd.png


得到图片的长宽像素:为后期压缩做调整

im.shape


753695b580b844a3ab5c038bc7d46350.png

#对图像进行SVD转换
U,sigma,VT=np.linalg.svd(im)
print("前30个特征值是:\n",sigma[:30])
#对图像进行SVD转换
U,sigma,VT=np.linalg.svd(im)
print("前30个特征值是:\n",sigma[:30])
#分别使用10、50个特征值重构图像
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
# 读取图片
img_eg = mpimg.imread(r"hxx00.jpg")  #  535,095=3*3*5*11*23*47  3*5*23=,3*11*47=517*3
print(img_eg.shape)
# 奇异值分解
img_temp = img_eg.reshape(300,600*3)
U, Sigma, VT = np.linalg.svd(img_temp)
print(Sigma)
# 奇异值分解:我们先将图片变成【400,450×3】,再做奇异值分解,并且从svd函数中得到的奇异值 sigma sigmasigma 它是从大到小排列的
# 取前10个奇异值
sval_nums = 10
img_restruct1 = (U[:,0:sval_nums]).dot(np.diag(Sigma[0:sval_nums])).dot(VT[0:sval_nums,:])
img_restruct1 = img_restruct1.reshape(600,300,3)
# 取前部分奇异值重构图片
# 1、如果处理的是一维数组,则得到的是两数组的內积。
# 2、如果是二维数组(矩阵)之间的运算,则得到的是矩阵乘法(mastrix product)。
# 3、np.diag(Sigma[0:sval_nums])对角矩阵
# 取前50个奇异值
sval_nums = 50
img_restruct2 = (U[:,0:sval_nums]).dot(np.diag(Sigma[0:sval_nums])).dot(VT[0:sval_nums,:])
img_restruct2 = img_restruct2.reshape(600,300,3)  #
fig, ax = plt.subplots(1,3,figsize = (12,16))
ax[0].imshow(img_eg)
ax[0].set(title = "src")
ax[1].imshow(img_restruct1.astype(np.uint8))
ax[1].set(title = "nums of sigma = 10")
ax[2].imshow(img_restruct2.astype(np.uint8))
ax[2].set(title = "nums of sigma = 50")
plt.show()

2bda3be396754a259276f49ad45a2d0e.png


相关文章
|
6月前
|
机器学习/深度学习 算法 数据可视化
机器学习第11天:降维
机器学习第11天:降维
|
6月前
|
机器学习/深度学习 数据可视化 计算机视觉
【视频】机器学习交叉验证CV原理及R语言主成分PCA回归分析犯罪率|数据共享
【视频】机器学习交叉验证CV原理及R语言主成分PCA回归分析犯罪率|数据共享
|
6月前
|
人工智能 编解码 算法
使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
在本教程中,您将学习在阿里云交互式建模平台PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理,实现文本驱动的图像编辑功能单卡即可完成AIGC图片风格变化、背景变化和主体变化等功能。让我们一同开启这场旅程,为您的图像编辑添上无限可能性的翅膀吧。
使用 PAI-DSW x Free Prompt Editing图像编辑算法,开发个人AIGC绘图小助理
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
阿里云人工智能平台 PAI 团队发表的图像编辑算法论文在 MM2024 上正式亮相发表。ACM MM(ACM国际多媒体会议)是国际多媒体领域的顶级会议,旨在为研究人员、工程师和行业专家提供一个交流平台,以展示在多媒体领域的最新研究成果、技术进展和应用案例。其主题涵盖了图像处理、视频分析、音频处理、社交媒体和多媒体系统等广泛领域。此次入选标志着阿里云人工智能平台 PAI 在图像编辑算法方面的研究获得了学术界的充分认可。
【MM2024】阿里云 PAI 团队图像编辑算法论文入选 MM2024
|
3月前
|
机器学习/深度学习 算法 数据中心
【机器学习】面试问答:PCA算法介绍?PCA算法过程?PCA为什么要中心化处理?PCA为什么要做正交变化?PCA与线性判别分析LDA降维的区别?
本文介绍了主成分分析(PCA)算法,包括PCA的基本概念、算法过程、中心化处理的必要性、正交变换的目的,以及PCA与线性判别分析(LDA)在降维上的区别。
87 4
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
【CVPR2024】阿里云人工智能平台PAI图像编辑算法论文入选CVPR2024
近期,阿里云人工智能平台PAI发表的图像编辑算法论文在CVPR-2024上正式亮相发表。论文成果是阿里云与华南理工大学贾奎教授领衔的团队共同研发。此次入选标志着阿里云人工智能平台PAI自主研发的图像编辑算法达到了先进水平,赢得了国际学术界的认可。在阿里云人工智能平台PAI算法团队和华南理工大学的老师学生们一同的坚持和热情下,将阿里云在图像生成与编辑领域的先进理念得以通过学术论文和会议的形式,向业界传递和展现。
|
5月前
|
机器学习/深度学习 API Python
机器学习特征降维
这篇内容概述了特征降维在机器学习中的重要性,包括三个主要方法:低方差过滤法、PCA(主成分分析)和相关系数法。低方差过滤法通过删除方差低于阈值的特征来减少无关信息;PCA通过正交变换降低数据的维数,保留大部分信息;相关系数法(如皮尔逊和斯皮尔曼相关系数)用于评估特征间的相关性,去除高度相关的特征以简化模型。这些技术有助于提高模型效率和泛化能力。
|
5月前
|
机器学习/深度学习 计算机视觉
【机器学习】LoFTR:革命性图像特征批评技术等领跑者
【机器学习】LoFTR:革命性图像特征批评技术等领跑者
80 1
|
5月前
|
机器学习/深度学习 算法
【机器学习】剪贴画图像等文本引导运动生成技术革新
【机器学习】剪贴画图像等文本引导运动生成技术革新
49 1