You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 10:42:18