টি-এসএনই, [১] এর মতো একটি নির্দিষ্ট শর্ত পূরণ না হওয়া অবধি ক্রমান্বয়ে কুলব্যাক-লেবলার (কেএল) বিচ্যুতি হ্রাস করে কাজ করে। টি-এসএনই-এর নির্মাতারা কেএল ডাইভার্জেন্সকে ভিজ্যুয়ালাইজেশনের জন্য পারফরম্যান্সের মানদণ্ড হিসাবে ব্যবহার করার পরামর্শ দিয়েছেন:
আপনি টি-এসএনই রিপোর্টগুলির কুলব্যাক-লেবলার ডাইভারজেন্সগুলির সাথে তুলনা করতে পারবেন। দশবার টি-এসএনই চালানো পুরোপুরি ঠিক আছে, এবং সর্বনিম্ন কেএল ডাইভারজেন্স সহ সমাধানটি নির্বাচন করুন [২]
আমি টি এসএনই এর দুটি বাস্তবায়ন চেষ্টা করেছি:
- অজগর : sklearn.manifold.TSNE ()।
- আর : tsne, লাইব্রেরি থেকে (tsne)।
এই উভয় বাস্তবায়ন, যখন ভার্বোসিটি সেট করা হয়, প্রতিটি পুনরাবৃত্তির জন্য ত্রুটি (কুলব্যাক-লেবেলার বিচ্যুতি) মুদ্রণ করুন। তবে তারা ব্যবহারকারীকে এই তথ্যটি পেতে দেয় না, যা আমার কাছে কিছুটা অদ্ভুত লাগে looks
উদাহরণস্বরূপ, কোড:
import numpy as np
from sklearn.manifold import TSNE
X = np.array([[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 1]])
model = TSNE(n_components=2, verbose=2, n_iter=200)
t = model.fit_transform(X)
সৃষ্টি করে:
[t-SNE] Computing pairwise distances...
[t-SNE] Computed conditional probabilities for sample 4 / 4
[t-SNE] Mean sigma: 1125899906842624.000000
[t-SNE] Iteration 10: error = 6.7213750, gradient norm = 0.0012028
[t-SNE] Iteration 20: error = 6.7192064, gradient norm = 0.0012062
[t-SNE] Iteration 30: error = 6.7178683, gradient norm = 0.0012114
...
[t-SNE] Error after 200 iterations: 0.270186
এখন, যতদূর আমি বুঝতে পারি, 0.270186 কে কেএল ডাইভার্জেন্স হওয়া উচিত। তবে আমি এই তথ্যটি মডেল বা টি থেকে পাই না (যা একটি সাধারণ নাম্পার.অ্যান্ডারায়)।
এই সমস্যার সমাধান করতে আমি পারলাম: i) আমার নিজের দ্বারা কেএল ডাইভারজেন্স গণনা করুন, ii) টিএসএনই () ফাংশনটির আউটপুট [3] ক্যাপচার এবং পার্সিংয়ের জন্য অজগরটিতে খারাপ কিছু করুন। তবে: i) কেএল ডাইভারজেনটি পুনরায় গণনা করতে বেশ বোকা হবে, যখন টিএসএনই () ইতিমধ্যে এটি গণনা করেছে, ii) কোডের ক্ষেত্রে কিছুটা অস্বাভাবিক হবে।
আপনার কি অন্য কোনও পরামর্শ আছে? এই লাইব্রেরিটি ব্যবহার করে এই তথ্য পাওয়ার কোনও মানক উপায় আছে?
আমি উল্লেখ করেছি যে আমি আর এর tsne গ্রন্থাগার চেষ্টা করেছি , তবে আমি পাইথন স্ক্লার্ন বাস্তবায়নে ফোকাস দেওয়ার উত্তরগুলি পছন্দ করব ।
তথ্যসূত্র
[2] http://homepage.tudelft.nl/19j49/t-SNE.html
[3] /programming/16571150/how-to-capture-stdout-output-from-a-python-function-call