我正在使用Scikit-learn进行tSNE询问大约1000个散点图,但是我似乎需要2D numpy数组才能访问fit_transform方法。我是Python的新手。
我的代码,
from sklearn.manifold import TSNE
import numpy as np
import cv2
mypath='/Path/to/files/scatterplots/'
onlyfiles = [ f for f in listdir(mypath) if isfile(join(mypath,f)) ]
photos = np.empty(len(onlyfiles), dtype=object)
for n in range(0, len(onlyfiles)):
photos[n] = cv2.imread( join(mypath,onlyfiles[n]) )
fig, axes = plt.subplots(2, 2, figsize=(10,10), subplot_kw={'xticks':(), 'yticks':()})
for ax, img in zip(axes.ravel(), photos):
ax.imshow(img)
问题代码
tsne = TSNE(random_state=50)
digits_tsne = tsne.fit_transform (photos.data)
错误
ValueError跟踪(最近一次通话最近) 在
/library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/manifold/t_sne.py in fit_transform(self,X,y)
892 Embedding of the training data in low-dimensional space.
893 """
-> 894嵌入= self._fit(X)
我认为fit_transform方法需要2D numpy数组,例如
'target': array([0, 1, 2, 3])
其中0-3表示每个散点图1-4后面的不同数据(寄生物)。
请求 如何将目标数组组合为图像numpy数组,以便fit_transform可以查看和处理它?</ em>
答案 0 :(得分:2)
请检查t-SNE的文档:
X:数组,形状(n_samples,n_features个)
为使您的案例正常工作,您需要将图像投射到一维数组并从中组装出一个矩阵。
按代码排列,以下代码段应完成二维t-SNE聚类的工作:
arr = [cv2.imread( join(mypath,onlyfiles[n])).ravel() for n in range(0, len(onlyfiles))]
X = np.vstack[arr]
tsne = TSNE(n_components=2).fit_transform(X)