【问题标题】:Matplotlib scatter different images (MNIST) instead of plots for TSNEMatplotlib 散布不同的图像 (MNIST) 而不是 TSNE 的绘图
【发布时间】:2019-12-17 11:48:10
【问题描述】:

我正在尝试使用 scikit-learn 和 scikit-learn 的数据集编写一个 TSNE,但是在显示结果时,我想要真正的 MNIST 图像而不是一些彩色点/图。我正在使用 matplotlib 和 seaborn

这是我的代码:

import sklearn
import seaborn as sb
import pandas as pd
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import fetch_mldata

mnist = fetch_mldata("MNIST original")
X = mnist.data / 255.0
y = mnist.target
feat_cols = [ 'pixel' + str(i) for i in range(X.shape[1]) ]
df = pd.DataFrame(X,columns=feat_cols)
df['y'] = y
df['label'] = df['y'].apply(lambda i: str(i)) 
X, y = None, None
np.random.seed(42) 
rndperm = np.random.permutation(df.shape[0])

N= 520000
df_subset = df.loc[rndperm[:N],:].copy()
data_subset = df_subset[feat_cols].values
tsne = TSNE(n_components=2, verbose=1, perplexity=40, n_iter=300)
tsne_results = tsne.fit_transform(data_subset)

df_subset['tsne-2d-one'] = tsne_results[:,0]
df_subset['tsne-2d-two'] = tsne_results[:,1]
plt.figure(figsize=(16,10))
sb.scatterplot(
     x="tsne-2d-one", y="tsne-2d-two",
     hue="y",
     palette=sb.color_palette("hls", 10),
     data=df_subset,
     legend="full",
     alpha=0.3
)

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    我不知道你是否能对这个情节做出正面或反面,但如果我理解正确你的问题,这就是你想要做的吗?

    from matplotlib.offsetbox import OffsetImage, AnnotationBbox
    
    pixel_cols = df_subset.columns.str.startswith('pixel')
    img_w, img_h = 28,28
    zoom = 0.5
    
    fig, ax = plt.subplots(figsize=(16,10))
    for i,row in df_subset.iterrows():
        image = row[pixel_cols].values.astype(float).reshape((img_w, img_h))
        im = OffsetImage(image, zoom=zoom)
        ab = AnnotationBbox(im, (row["tsne-2d-one"], row["tsne-2d-two"]), xycoords='data', frameon=False)
        ax.add_artist(ab)
        ax.update_datalim([(row["tsne-2d-one"], row["tsne-2d-two"])])
        ax.autoscale()
    

    此代码基于Annotation Box demothis answer on SO

    【讨论】:

      猜你喜欢
      • 2014-04-29
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      相关资源
      最近更新 更多