Fashion-MNIST数据集--图像数据集

Fashion-MNIST是一个包含了10个类别、每个类别下有7000张28x28像素灰度图像的数据集。这个数据集可以用于图像分类、图像识别等任务。处理这种图像数据集可以采用以下步骤:

  • 数据预处理:将数据集中的图像转换为数字矩阵形式,可以使用Python中的NumPy库进行处理。同时可以将像素值归一化到0-1范围内,方便后续处理。

  • 特征提取:对于图像数据集,常用的特征提取方法包括灰度共生矩阵、局部二值模式、方向梯度直方图等。这些特征可以帮助我们更好地描述和区分不同的图像类别。

  • 聚类分析:对于图像数据集进行聚类分析可以帮助我们发现数据中的潜在模式和结构。kmeans是一种常用的聚类算法,可以对数据进行分组,以最小化组内方差的平方和。在使用kmeans进行聚类时,需要选择适当的聚类数和距离度量方法,例如欧氏距离或曼哈顿距离等。

具体地,对于Fashion-MNIST数据集,可以先将每张28x28像素的灰度图像展开成一个784维的向量,然后使用kmeans算法进行聚类分析。在选择聚类数时,可以通过绘制不同聚类数下的聚类效果图或者使用肘部法则来确定最佳的聚类数。

需要注意的是,使用kmeans进行聚类分析只是其中的一种方法,还可以使用其他的聚类算法和特征提取方法来处理图像数据集。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
from tensorflow.keras.datasets import fashion_mnist

# 载入数据集
(X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()

# 将图像数据展开成784维向量,并进行归一化处理
X_train = X_train.reshape(X_train.shape[0], -1) / 255.
X_test = X_test.reshape(X_test.shape[0], -1) / 255.

# 使用PCA降维到2维,便于可视化
pca = PCA(n_components=2)
X_train_pca = pca.fit_transform(X_train)

# 设置聚类数和距离度量方法,进行kmeans聚类分析
kmeans = KMeans(n_clusters=10, init='k-means++', n_init=10, max_iter=300, tol=1e-4, random_state=0)
y_pred = kmeans.fit_predict(X_train)

# 可视化聚类结果
plt.scatter(X_train_pca[:, 0], X_train_pca[:, 1], c=y_pred, cmap='rainbow')
plt.title('KMeans Clustering Results')
plt.show()

1、from sklearn.decomposition import PCA

from sklearn.decomposition import PCA是Python中scikit-learn库提供的一种基于主成分分析(PCA)的降维方法。PCA是一种线性降维方法,它可以将高维数据映射到低维空间中,从而减少数据的维度,提高计算效率和模型性能。在处理高维数据时,PCA通常被用来提取主要的特征,并将数据降维到较低的维度,同时尽可能地保留数据的信息量。

2、from tensorflow.keras.datasets import fashion_mnist

from tensorflow.keras.datasets import fashion_mnist是TensorFlow框架中提供的一个用于机器学习的数据集,其中包含了10个类别、每个类别下有7000张28x28像素灰度图像的数据集。该数据集可以用于图像分类、图像识别等任务。在这个数据集中,每个样本由一个28x28的灰度图像和一个标签组成。在训练机器学习模型时,可以使用该数据集进行模型的训练和测试。

3、X_train = X_train.reshape(X_train.shape[0], -1) / 255.

X_test = X_test.reshape(X_test.shape[0], -1) / 255.

数据归一化处理,数据最大不超过255,因此除以255

图像数据特征提取方法

对于Fashion-MNIST数据集,将每张28x28像素的灰度图像展开成一个784维的向量是一个重要的预处理步骤。在这个基础上,可以采用各种特征提取方法来对图像数据进行更深入的分析和处理。以下是几种常见的特征提取方法:

  • 基于像素值的统计特征:可以计算每张图像的像素均值、方差、最大值、最小值等统计指标,作为图像的特征向量。
  • 灰度共生矩阵(GLCM)特征:可以计算每张图像灰度共生矩阵,然后从中提取能够描述图像纹理特征的各种统计指标,如能量、对比度、相关性等。
  • 局部二值模式(LBP)特征:可以计算每张图像的局部二值模式,即将每个像素点与其周围的8个像素点进行比较,然后根据比较结果构成一个二进制码。可以对每张图像的LBP码进行统计和分析,提取能够描述图像纹理特征的各种指标,如直方图等。
  • 方向梯度直方图(HOG)特征:可以计算每张图像的方向梯度直方图,即将每个像素点的梯度方向和大小进行统计,然后将统计结果划分为不同的方向和大小区间。可以将方向梯度直方图作为图像的特征向量。

代码

from sklearn.cluster import KMeans
from sklearn.datasets import make_classification
import numpy as np

从scikit-learn库中导入KMeans算法和make_classification函数,并从NumPy库中导入load函数

from keras.datasets import fashion_mnist

(X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()

X_train = X_train.reshape(X_train.shape[0], -1)
X_test = X_test.reshape(X_test.shape[0], -1)

加载Fashion-MNIST数据集,并将图像数据展开成784维的向量

这段代码使用Keras库中的fashion_mnist数据集,它是一个包含了10个类别、每个类别下有7000张28x28像素灰度图像的数据集。通过fashion_mnist.load_data()函数,可以将数据集分为训练集和测试集,并返回分别包含图像数据和标签数据的numpy数组。

接下来的两行代码将图像数据变形为行向量的形式,这样每个图像都可以看做是一个784维的向量。这样的处理方式通常被称为“展平”,可以方便地将图像数据输入到机器学习模型中进行训练。

具体来说,X_train和X_test都是三维数组,分别表示训练集和测试集中的图像数据,它们的形状为(num_samples, num_rows, num_cols),其中num_samples表示样本数,num_rows和num_cols表示每个样本的行数和列数。因此,X_train.shape[0]和X_test.shape[0]分别表示训练集和测试集的样本数。

通过将每个图像的行数和列数相乘,可以得到图像展平后的向量长度,即28*28=784。因此,X_train.reshape(X_train.shape[0], -1)将每个样本展平为一个784维的向量,-1表示根据另一维的长度自动推导。同理,X_test也被展平为一个二维数组。这样处理之后,图像数据就可以被表示为一个(num_samples, num_features)的矩阵,方便后续处理。

from skimage.feature import greycomatrix, greycoprops

# 计算灰度共生矩阵特征
glcm = greycomatrix(X_train, [1], [0, np.pi/4, np.pi/2, 3*np.pi/4], levels=256, symmetric=True, normed=True)
contrast = greycoprops(glcm, 'contrast')
dissimilarity = greycoprops(glcm, 'dissimilarity')
homogeneity = greycoprops(glcm, 'homogeneity')
energy = greycoprops(glcm, 'energy')
correlation = greycoprops(glcm, 'correlation')

使用了scikit-image库中的greycomatrix()和greycoprops()函数来计算灰度共生矩阵的特征。

首先,greycomatrix()函数将输入的图像数据X_train转换成灰度共生矩阵glcm。其中,[1]表示使用1个像素的偏移量来计算灰度共生矩阵,[0, np.pi/4, np.pi/2, 3*np.pi/4]表示计算四个不同方向上的灰度共生矩阵,levels=256表示灰度级别为256级,symmetric=True表示灰度共生矩阵是对称的,normed=True表示灰度共生矩阵中的值已被标准化。灰度共生矩阵中的每个元素表示在特定方向上,两个像素具有特定灰度值对的出现频率。

接着,greycoprops()函数根据输入的灰度共生矩阵glcm,计算不同的纹理特征。在这段代码中,分别计算了对比度(contrast)、离散度(dissimilarity)、同质性(homogeneity)、能量(energy)和相关性(correlation)五种纹理特征。

这些特征可以用来描述和区分不同的图像类别,特别是在图像分类、目标检测和物体识别等任务中。在对这些特征进行提取后,可以将它们用作机器学习模型的输入特征,以训练模型并对新的图像进行预测。

from skimage.feature import local_binary_pattern

# 计算LBP特征
lbp = local_binary_pattern(X_train, 8, 1, method='uniform')
(lbp_hist, _) = np.histogram(lbp, bins=np.arange(0, 60), range=(0, 59))

使用局部二值模式(LBP)来提取图像的纹理特征

特征提取完成后训练数据

代码实例

from keras.datasets import fashion_mnist
from skimage.feature import greycomatrix, greycoprops
from sklearn import svm

# 加载Fashion-MNIST数据集
(X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()

# 将每张图像展开成一维向量
X_train = X_train.reshape(X_train.shape[0], -1)
X_test = X_test.reshape(X_test.shape[0], -1)

# 计算灰度共生矩阵特征
glcm = greycomatrix(X_train, [1], [0, np.pi/4, np.pi/2, 3*np.pi/4], levels=256, symmetric=True, normed=True)
contrast = greycoprops(glcm, 'contrast')
dissimilarity = greycoprops(glcm, 'dissimilarity')
homogeneity = greycoprops(glcm, 'homogeneity')
energy = greycoprops(glcm, 'energy')
correlation = greycoprops(glcm, 'correlation')

# 将特征向量拼接起来
features = np.concatenate([contrast, dissimilarity, homogeneity, energy, correlation], axis=1)

# 使用支持向量机进行分类训练
clf = svm.SVC(kernel='linear')
clf.fit(features, y_train)

# 在测试集上进行预测
glcm_test = greycomatrix(X_test, [1], [0, np.pi/4, np.pi/2, 3*np.pi/4], levels=256, symmetric=True, normed=True)
contrast_test = greycoprops(glcm_test, 'contrast')
dissimilarity_test = greycoprops(glcm_test, 'dissimilarity')
homogeneity_test = greycoprops(glcm_test, 'homogeneity')
energy_test = greycoprops(glcm_test, 'energy')
correlation_test = greycoprops(glcm_test, 'correlation')
features_test = np.concatenate([contrast_test, dissimilarity_test, homogeneity_test, energy_test, correlation_test], axis=1)
y_pred = clf.predict(features_test)

# 计算准确率
acc = np.mean(y_pred == y_test)
print('Accuracy:', acc)

在特征提取之后,将提取得到的特征向量与对应的标签用于训练机器学习模型。在这个例子中,使用了支持向量机(SVM)进行分类训练。在测试集上进行预测时,同样需要进行特征提取并将得到的特征向量输入到训练好的模型中。最后,通过计算预测准确率来评估模型的性能。

当然,在实际应用中,可以使用更加复杂的深度学习模型来进行分类训练,例如卷积神经网络(CNN)等。此时,需要将提取得到的特征向量作为CNN模型的输入特征,以训练模型并对新的图像进行预测。

猜你喜欢

转载自blog.csdn.net/m0_62865498/article/details/130532730