Skip to content

Perform less t-SNE iterations depending on observed convergence #13

@ItsLastDay

Description

@ItsLastDay

Currently, t-SNE is run for 10k iterations. However, not all of them provide meaningful increase to the final Kullback-Leibler value. Excerpt from t-SNE output:

Iteration 6150: error is 4.890852 (50 iterations in 78.31 seconds)
Iteration 6200: error is 4.890704 (50 iterations in 78.32 seconds)
Iteration 6250: error is 4.890503 (50 iterations in 78.37 seconds)
Iteration 6300: error is 4.890289 (50 iterations in 78.20 seconds)
Iteration 6350: error is 4.890163 (50 iterations in 78.23 seconds)
Iteration 6400: error is 4.890043 (50 iterations in 76.83 seconds)
Iteration 6450: error is 4.889891 (50 iterations in 78.29 seconds)
Iteration 6500: error is 4.889637 (50 iterations in 78.26 seconds)
Iteration 6550: error is 4.889395 (50 iterations in 78.22 seconds)
Iteration 6600: error is 4.889222 (50 iterations in 78.09 seconds)
Iteration 6650: error is 4.889023 (50 iterations in 78.11 seconds)
Iteration 6700: error is 4.888899 (50 iterations in 77.97 seconds)
Iteration 6750: error is 4.888725 (50 iterations in 78.11 seconds)
Iteration 6800: error is 4.888528 (50 iterations in 77.91 seconds)
Iteration 6850: error is 4.888371 (50 iterations in 77.72 seconds)
Iteration 6900: error is 4.888154 (50 iterations in 77.64 seconds)
Iteration 6950: error is 4.887972 (50 iterations in 77.87 seconds)
Iteration 7000: error is 4.887811 (50 iterations in 74.60 seconds)
Iteration 7050: error is 4.887518 (50 iterations in 73.16 seconds)
Iteration 7100: error is 4.887316 (50 iterations in 73.26 seconds)
Iteration 7150: error is 4.887119 (50 iterations in 73.29 seconds)
Iteration 7200: error is 4.886902 (50 iterations in 73.10 seconds)
Iteration 7250: error is 4.886715 (50 iterations in 76.92 seconds)
Iteration 7300: error is 4.886556 (50 iterations in 77.08 seconds)
Iteration 7350: error is 4.886482 (50 iterations in 76.96 seconds)
Iteration 7400: error is 4.886505 (50 iterations in 76.16 seconds)
Iteration 7450: error is 4.886368 (50 iterations in 73.29 seconds)
Iteration 7500: error is 4.886316 (50 iterations in 73.29 seconds)
Iteration 7550: error is 4.886211 (50 iterations in 73.39 seconds)
Iteration 7600: error is 4.886097 (50 iterations in 76.45 seconds)
Iteration 7650: error is 4.886138 (50 iterations in 77.83 seconds)
Iteration 7700: error is 4.886060 (50 iterations in 77.83 seconds)
Iteration 7750: error is 4.885983 (50 iterations in 75.70 seconds)
Iteration 7800: error is 4.885905 (50 iterations in 77.90 seconds)
Iteration 7850: error is 4.885699 (50 iterations in 76.05 seconds)
Iteration 7900: error is 4.885633 (50 iterations in 73.90 seconds)
Iteration 7950: error is 4.885389 (50 iterations in 73.89 seconds)
Iteration 8000: error is 4.885299 (50 iterations in 75.37 seconds)
Iteration 8050: error is 4.885126 (50 iterations in 78.23 seconds)
Iteration 8100: error is 4.884873 (50 iterations in 78.11 seconds)
Iteration 8150: error is 4.884722 (50 iterations in 78.00 seconds)
Iteration 8200: error is 4.884563 (50 iterations in 77.66 seconds)
Iteration 8250: error is 4.884334 (50 iterations in 77.31 seconds)
Iteration 8300: error is 4.884193 (50 iterations in 77.14 seconds)
Iteration 8350: error is 4.883943 (50 iterations in 76.91 seconds)
Iteration 8400: error is 4.883802 (50 iterations in 76.68 seconds)
Iteration 8450: error is 4.883759 (50 iterations in 76.75 seconds)
Iteration 8500: error is 4.883616 (50 iterations in 76.75 seconds)
Iteration 8550: error is 4.883708 (50 iterations in 76.88 seconds)
Iteration 8600: error is 4.883584 (50 iterations in 73.17 seconds)
Iteration 8650: error is 4.883555 (50 iterations in 73.62 seconds)
Iteration 8700: error is 4.883474 (50 iterations in 74.26 seconds)
Iteration 8750: error is 4.883317 (50 iterations in 76.63 seconds)
Iteration 8800: error is 4.883242 (50 iterations in 77.34 seconds)
Iteration 8850: error is 4.883075 (50 iterations in 77.67 seconds)
Iteration 8900: error is 4.882977 (50 iterations in 77.68 seconds)
Iteration 8950: error is 4.882891 (50 iterations in 77.75 seconds)
Iteration 9000: error is 4.882771 (50 iterations in 77.63 seconds)
Iteration 9050: error is 4.882628 (50 iterations in 77.19 seconds)
Iteration 9100: error is 4.882474 (50 iterations in 80.71 seconds)
Iteration 9150: error is 4.882426 (50 iterations in 73.67 seconds)
Iteration 9200: error is 4.882203 (50 iterations in 74.58 seconds)
Iteration 9250: error is 4.882166 (50 iterations in 77.74 seconds)
Iteration 9300: error is 4.881983 (50 iterations in 77.58 seconds)
Iteration 9350: error is 4.881924 (50 iterations in 77.48 seconds)
Iteration 9400: error is 4.881798 (50 iterations in 77.42 seconds)
Iteration 9450: error is 4.881660 (50 iterations in 77.20 seconds)
Iteration 9500: error is 4.881600 (50 iterations in 77.26 seconds)
Iteration 9550: error is 4.881513 (50 iterations in 76.77 seconds)
Iteration 9600: error is 4.881393 (50 iterations in 72.66 seconds)
Iteration 9650: error is 4.881225 (50 iterations in 73.71 seconds)
Iteration 9700: error is 4.881023 (50 iterations in 76.93 seconds)
Iteration 9750: error is 4.880848 (50 iterations in 76.77 seconds)
Iteration 9800: error is 4.880742 (50 iterations in 75.21 seconds)
Iteration 9850: error is 4.880516 (50 iterations in 74.68 seconds)
Iteration 9900: error is 4.880586 (50 iterations in 76.39 seconds)
Iteration 9950: error is 4.880406 (50 iterations in 73.78 seconds)
Iteration 9999: error is 4.880495 (50 iterations in 72.69 seconds)

Since now those 10k iterations play lead role in terms of time required for obtaining visualization, we could cut off some of the iterations. But doing this independently of data (i.e. setting iterations to 5k constantly) is error-prone. Instead, we could add some code to t-SNE run, that checks whether there was an improve (say, more than 1%) on the last X iterations.

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions