文章目录
矢量量化理解
矢量量化可以理解为数据的压缩,可以看作是一种降维的过程,只是和我们之前知道的降维算法的理论完全不一样。
举例来说,我们有一张600 x 600 个像素点的图片,每个像素点有一个颜色,那么这个图片上存在的信息就有360000个。图片上有很多的像素点之间的颜色差异微乎其微,那么我们就可以将这些像素点看作是同一个像素点(相当于KMeans的质心),将这些像素点的颜色替换为同一个颜色。图片的矢量量化就是将每个像素点的颜色用其所处的质心的颜色来代替。(个人理解,可能不是很正确)
图片的矢量量化有两种方式:
- KMeans聚类法:通过KMeans计算出质心,对信息的损失很少
- 随机质心法:通过随机算法选择质心,带来的后果可能会损失较多的信息
本次代码使用到的相关库
import numpy as np
import pandas as pd
from sklearn.datasets import load_sample_image # 加载图片数据
from sklearn.utils import shuffle # 将数据随机打乱
from sklearn.metrics import pairwise_distances_argmin # 计算数据点之间的距离
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import warnings
%matplotlib inline
warnings.filterwarnings("ignore") # 忽略警告
KMeans聚类法
导入数据
源图像总共有273280个像素点,每个点对应一个RGB颜色值。
# 导入颐和园的图片
china = load_sample_image("china.jpg")
china.shape # (427, 640, 3)
# 展示原图
plt.figure(figsize=(10,10))
plt.imshow(china)
查看原始数据。将相同的颜色去重后还是有9w+不同的颜色
# 查看原始数据的信息
width, height, dim = china.shape # 记录花的维度信息
# 将三维信息变为二维,每一列行三个数据,对应RGB的颜色
data_df = pd.DataFrame(data=china.reshape