0

我試圖對平方距離矩陣運行tsne分析。這些是我正在使用的命令。爲什麼我的sklearn t-sne函數在達到最大迭代之前退出

model = TSNE(n_components = 2,perplexity = 32, verbose = 10,n_iter = 1000, metric = "precomputed") 
embeddings = model.fit_transform(D) 

這是我收到的輸出:output from tsne function

它看起來像在程序運行通過75次迭代,然後調用它好和退出。當我從tsne繪製數據時,它基本上只是一個稠密的blob。爲什麼程序會提前退出,我該如何讓它運行更長時間?

回答

1

它正在退出,因爲退出條件已達到。

解釋日誌,退出條件是可能在梯度的度量標準,稱爲梯度範這裏。如果需要,請檢查gradient-descent的基本知識以瞭解直覺。隨着每次迭代都朝着梯度的負向邁出了一步,微小的梯度對目標沒有太大的作用(並且將被解釋爲:我們找到了局部/全局最小值)。

它看起來像(仍然只解釋你的日誌):

if np.linalg.norm(gradient) < 1e-4: 
    return solution 

沒有好處這個參數優化,問題進一步做更多的迭代。解決方案不會變得更好(就最小化而言)。

您只能嘗試其他參數(導致其他優化問題)。

+0

謝謝!那麼這會成爲我輸入數據的問題嗎? – piecat

+0

可能是數據,可能是參數。我敢肯定,你會發現一些參數,需要更多的迭代,儘管這對你的解決方案沒有多大意義。這是一種感性的東西。 – sascha

+1

這不一定是個問題:sklearn所說的是它已經找到了局部或全局最優值,並且通過繼續迭代不會找到更好的解決方案。 –

相關問題