Python图像聚类:特征提取、PCA降维及2D散点图绘制方法求助
问题解答
可以用scikit-learn提取图像特征吗?
当然可以,不过scikit-learn本身没有专门的图像特征提取API(新手作业一般用最基础的像素特征即可)。最直接的做法是把图像的像素值作为特征,步骤如下:
- 用
PIL.Image或opencv-python读取目录中的每张图像,转换成数值数组 - 将二维的图像数组(比如28×28)展平成一维向量(比如784维),这个一维向量就是该图像的特征
- 把所有图像的特征向量组合成特征矩阵(行数=图像数量,列数=特征维度)
示例代码片段:
from PIL import Image import os import numpy as np # 指定图像目录 img_dir = "你的图像目录路径" features = [] for filename in os.listdir(img_dir): if filename.endswith(('.png', '.jpg', '.jpeg')): # 读取图像并转成灰度图(可选,减少特征维度) img = Image.open(os.path.join(img_dir, filename)).convert('L') # 把图像转成数组并展平 img_array = np.array(img).flatten() features.append(img_array) # 转成numpy数组,用于后续PCA X = np.array(features)
如何用scikit-learn做PCA并绘制2D散点图?
第一步:PCA降维
用scikit-learn的PCA类把高维特征降到2维:
from sklearn.decomposition import PCA # 初始化PCA,指定降维到2维 pca = PCA(n_components=2) # 对特征矩阵做拟合+转换,得到2D数据 X_2d = pca.fit_transform(X)
第二步:绘制2D散点图
用matplotlib绘制散点图,这是Python最常用的绘图库:
import matplotlib.pyplot as plt # 绘制散点图,x是第一维,y是第二维 plt.scatter(X_2d[:, 0], X_2d[:, 1]) # 添加图表元素 plt.title('PCA 2D 图像分布') plt.xlabel('PCA Component 1') plt.ylabel('PCA Component 2') # 显示图像 plt.show()
如果你的图像有类别标签(比如猫/狗),还可以给不同类别设置不同颜色:
# 假设labels是每个图像的类别标签数组(比如0和1) plt.scatter(X_2d[:, 0], X_2d[:, 1], c=labels, cmap='viridis') plt.colorbar(label='类别') plt.show()
内容的提问来源于stack exchange,提问作者user23321016
相关产品推荐
相关产品推荐

