質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

368閲覧

t-SNEを用いて可視化したデータの取り扱いについて

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/09/21 10:39

前提

機械学習の勉強をしています。今回、下記のサイトで写経をしていたときにふと疑問に思ったことを質問します。
https://bunsekikobako.com/t-sne-code-example/

実現したいこと

上記のサイトのコードを写経して画像を出すところまではできました。ここで、ふと思ったのですが、可視化したデータの一部を算出したい、例えば、以下の画像のPerplexity 50のときに緑のプロットが左に固まっているので丸で囲まれたところだけ抽出して値をcsvなどの別のファイル形式に保存するにはどうすればいいのか疑問です。範囲指定をすればできそう...?(-40<ⅹ<0 and -15<y<20みたいな感じで)
同様にPerplexity 50のときに青色のプロットが右に固まっているので丸で囲まれたところだけを抽出してcsvなどの別のファイル形式に保存したいです。
(画像は標準化した後のものです。コードで言うと、

python

1create_2d_tsne_plots(scaled_X, y, y_items, perplexity_list)

が該当しています。)

イメージ説明

該当のソースコード

python

1from mpl_toolkits.mplot3d import axes3d 2import plotly.plotly as py 3import plotly.graph_objs as go 4import os 5from plotly.offline import iplot, init_notebook_mode 6 7def create_2d_tsne_plots(target_X, y, y_labels, perplexity_list= [2, 5, 30, 50, 100]): 8 """ 9 args: 10 target_X: pandas.DataFrame. 11 y: list or series owning label infomation 12 y_labels: labels in y. This is set as argument becaunse only some labels are intended to be ploted. 13 perplexity_list: list of integers. 14 Returns: 15 None 16 """ 17 fig, axes = plt.subplots(nrows=1, ncols=len(perplexity_list),figsize=(5*len(perplexity_list), 4)) 18 for i, (ax, perplexity) in enumerate(zip(axes.flatten(), perplexity_list)): 19 start_time = time.time() 20 tsne = TSNE(n_components=2, init='random', random_state=0, perplexity=perplexity) 21 Y = tsne.fit_transform(target_X) 22 for each_label in y_labels: 23 c_plot_bool = y == each_label 24 ax.scatter(Y[c_plot_bool, 0], Y[c_plot_bool, 1], label="{}".format(each_label)) 25 end_time = time.time() 26 ax.legend() 27 ax.set_title("Perplexity: {}".format(perplexity)) 28 print("Time to plot perplexity {} is {:.2f} seconds.".format(perplexity, end_time - start_time)) 29 plt.show() 30 return None 31 32 33def create_3d_tsne_plots(target_X, y, y_labels, perplexity_list= [2, 5, 30, 50, 100]): 34 """ 35 args: 36 target_X: pandas.DataFrame. 37 y: list or series owning label infomation 38 y_labels: labels in y. This is set as argument becaunse only some labels are intended to be ploted. 39 perplexity_list: list of integers. 40 Returns: 41 None 42 """ 43 fig = plt.figure(figsize=(5*len(perplexity_list),4)) 44 for i, perplexity in enumerate(perplexity_list): 45 ax = fig.add_subplot(1, len(perplexity_list), i+1, projection='3d') 46 start_time = time.time() 47 tsne = TSNE(n_components=3, init='random', random_state=0, perplexity=perplexity) 48 Y = tsne.fit_transform(target_X) 49 for each_label in y_labels: 50 c_plot_bool = y == each_label 51 ax.scatter(Y[c_plot_bool, 0], Y[c_plot_bool, 1], label="{}".format(each_label)) 52 end_time = time.time() 53 ax.legend() 54 ax.set_title("Perplexity: {}".format(perplexity)) 55 print("Time to plot perplexity {} is {:.2f} seconds.".format(perplexity, end_time - start_time)) 56 plt.show() 57 return None 58 59 60def create_single_3d_tsne(target_X, y, y_labels, perplexity, close_plot=True): 61 """ 62 args: 63 target_X: pandas.DataFrame. 64 y: list or series owning label infomation 65 y_labels: labels in y. This is set as argument becaunse only some labels are intended to be ploted. 66 perplexity_list: list of integers. 67 Returns: 68 Y: target_X transformed to 3d by tsne. 69 """ 70 fig = plt.figure(figsize=(5,5)) 71 ax = fig.add_subplot(1,1,1, projection="3d") 72 start_time = time.time() 73 tsne = TSNE(n_components=3, init='random', random_state=0, perplexity=perplexity) 74 Y = tsne.fit_transform(target_X) 75 for each_label in y_labels: 76 c_plot_bool = y == each_label 77 ax.scatter(Y[c_plot_bool, 0], Y[c_plot_bool, 1], label="Quality: {}".format(each_label)) 78 end_time = time.time() 79 ax.legend() 80 ax.set_title("Perplexity: {}".format(perplexity)) 81 print("Time to plot perplexity {} is {:.2f} seconds.".format(perplexity, end_time - start_time)) 82 if close_plot: 83 plt.close() 84 else: 85 plt.show() 86 return Y 87 88def create_single_plotly_3d_scatter(target_df, y, y_labels): 89 init_notebook_mode(connected=True) 90 config={'showLink': False, 'modeBarButtonsToRemove': ['sendDataToCloud','hoverCompareCartesian']} 91 92 data = [] 93 94 for each_label in y_labels: 95 c_plot_bool = y == each_label 96 scatter_info = go.Scatter3d( 97 x=target_df[c_plot_bool, 0], 98 y=target_df[c_plot_bool,1], 99 z=target_df[c_plot_bool,2], 100 mode='markers', 101 marker=dict( 102 size=1), 103 name="Quality: {}".format(each_label)) 104 data.append(scatter_info) 105 106 layout = go.Layout( 107 scene=dict( 108 xaxis = dict(title="x"), 109 yaxis=dict(title="y"), 110 zaxis=dict(title="z") 111 ) 112 ) 113 114 115 fig = dict(data = data, layout=layout) 116 iplot(fig, config=config) 117 return None 118 119create_2d_tsne_plots(X, y, y_items, perplexity_list) 120create_3d_tsne_plots(X, y, y_items, perplexity_list) 121 122#標準化 123scaler = StandardScaler() 124scaled_X = scaler.fit_transform(X) 125 126create_2d_tsne_plots(scaled_X, y, y_items, perplexity_list) 127create_3d_tsne_plots(scaled_X, y, y_items, perplexity_list) 128

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問