我正在做K意味着对图像数据集进行聚类。首先,我加载了图像并存储在numpy数组中。共有24张图片。我创建的img_array的形状是(24,300,400,3)。要运行K均值,我将其转换为2维数组,现在形状为(24,360000)。在聚类0.57后我得到了adjust_rand_score。
我不知道,如何使用PCA并减少图像的尺寸,然后比较聚类精度。
现在,我需要使用PCA将尺寸降低到400维,200维,50维,5维,最后是2维。
path = "C://Users/shivam/Desktop/data//"
os.chdir(path)
for f in os.listdir('.'):
if f.endswith('.jpg'):
img = Image.open(f)
data = np.asarray( img, dtype='uint8' )
img_array.append(data)
df = pd.DataFrame({'image_arrays':img_array})
df['id'] = range(1, len(df) + 1)
label_list = ['nature','nature','nature','nature','nature','nature','sunset','sunset','sunset','sunset','sunset','sunset','sunset','sunset','sunset','water','water','water','water','water','water','water','water','water']
df.head()
img_arr_2D = img_arr.reshape(24,120000)
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")
from sklearn.cluster import KMeans
X = img_array_2D
kmeans = KMeans(n_clusters=3, max_iter= 100)
kmeans.fit(X)
centroid = kmeans.cluster_centers_
labels = kmeans.labels_
colors = ["g.","r.","c."]
for i in range(len(X)):
print ("coordinate:" , X[i], "label:", labels[i])
plt.plot(X[i][0],X[i][1],colors[labels[i]],markersize=10)
plt.show()
classes = [0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2]
labels = kmeans.labels_
from sklearn.metrics.cluster import adjusted_rand_score
adjusted_rand_score(classes, labels)
答案 0 :(得分:0)
即使使用PCA,结果也不会有太大改善(并且要注意PCA随着变量的数量而严重缩放,并且您需要数百万张图像才能获得可靠的结果)。
图像的像素表示不如输入。你想要一些例如颠倒的相同图片具有相同的表示。
所以你需要做特征提取。
你可以做彩色历史记录,包含视觉词汇,但对于最先进的技术,你需要深入学习。