ไม่มีก็ไม่จำเป็นว่าเป็นกรณีนี้ แต่นี้เป็นในทางที่ซับซ้อนเป้าหมายของ T-SNE
ก่อนที่จะเข้าไปในเนื้อของคำตอบลองดูที่คำจำกัดความพื้นฐานบางอย่างทั้งทางคณิตศาสตร์และสังหรณ์ใจ
เพื่อนบ้านที่ใกล้ที่สุด : พิจารณาพื้นที่เมตริกRd และชุดของเวกเตอร์ X1,...,Xn∈Rdได้รับเวกเตอร์ใหม่ x∈Rdเราต้องการค้นหาประเด็นเช่นนั้น ||X1−x||≤...≤||Xn−x||. โดยสังหรณ์ใจมันเป็นเพียงระยะทางขั้นต่ำโดยใช้คำจำกัดความที่เหมาะสมของบรรทัดฐานมาRd.
ตอนนี้มาถึงว่าเพื่อนบ้านที่ใกล้ที่สุดมีความสำคัญจริงหรือไม่ในขณะที่ใช้การลดขนาด โดยปกติในคำตอบของฉันฉันตั้งใจที่จะหาเหตุผลเข้าข้างตนเองกับคณิตศาสตร์รหัสและปรีชา ก่อนอื่นให้เราพิจารณาแง่มุมที่ชาญฉลาดของสิ่งต่าง ๆ ถ้าคุณมีจุดที่มีระยะไกลdห่างจากจุดอื่นจากความเข้าใจของเราเกี่ยวกับอัลกอริธึม t-sne ที่เรารู้ว่าระยะทางนี้ถูกรักษาไว้เมื่อเราเปลี่ยนเป็นมิติที่สูงขึ้น ให้เราคิดต่อไปว่าจุดy เป็นเพื่อนบ้านที่ใกล้ที่สุดของ x ในบางมิติ d. โดยความหมายมีความสัมพันธ์ระหว่างระยะทางในd และ d+k. ดังนั้นเราจึงมีสัญชาตญาณของเราซึ่งก็คือระยะทางนั้นถูกรักษาไว้ในมิติที่แตกต่างกันหรืออย่างน้อยนั่นคือสิ่งที่เรามุ่งหวัง ลองหาเหตุผลมาคำนวณด้วยคณิตศาสตร์
ในคำตอบนี้ฉันพูดถึงคณิตศาสตร์ที่เกี่ยวข้องกับ t-sne แม้ว่าจะไม่ได้อยู่ในรายละเอียด ( t-SNE: ทำไมค่าข้อมูลเท่ากันไม่ปิดทางสายตา ) คณิตศาสตร์ที่นี่คือโดยทั่วไปคือการเพิ่มความน่าจะเป็นที่จุดสองจุดยังคงอยู่ในพื้นที่ฉายตามที่พวกเขาอยู่ในพื้นที่เดิมโดยสมมติว่าการกระจายของจุดนั้นเป็นเลขชี้กำลัง ลองดูที่สมการนี้pj|i=exp(−||xj−xi||22σ2)∑k≠iexp(−||xj−xi||22σ2). ขอให้สังเกตว่าความน่าจะเป็นขึ้นอยู่กับระยะห่างระหว่างจุดสองจุดดังนั้นยิ่งห่างกันเท่าไรยิ่งห่างกันเท่าไรยิ่งห่างออกไปมากขึ้นเมื่อพวกเขาถูกฉายในมิติที่ต่ำกว่า สังเกตว่าถ้าอยู่ไกล ๆRkมีโอกาสที่ดีที่พวกเขาจะไม่ได้อยู่ใกล้ชิดในมิติที่ฉาย ดังนั้นตอนนี้เรามีเหตุผลทางคณิตศาสตร์ว่าทำไมคะแนน "ควร" ยังคงใกล้เคียง แต่อีกครั้งเนื่องจากนี่คือการแจกแจงแบบเลขชี้กำลังหากจุดเหล่านี้อยู่ห่างกันอย่างมีนัยสำคัญไม่มีการรับประกันว่าทรัพย์สินเพื่อนบ้านที่ใกล้ที่สุดได้รับการดูแลแม้ว่านี่จะเป็นจุดมุ่งหมาย
ในที่สุดก็เป็นตัวอย่างของการเข้ารหัสที่แสดงให้เห็นถึงแนวคิดนี้ด้วย
from sklearn.manifold import TSNE
from sklearn.neighbors import KNeighborsClassifier
X = [[0],[1],[2],[3],[4],[5],[6],[7],[8],[9]]
y = [0,1,2,3,4,5,6,7,8,9]
neighs = KNeighborsClassifier(n_neighbors=3)
neighs.fit(X, y)
X_embedded = TSNE(n_components=1).fit_transform(X)
neighs_tsne = KNeighborsClassifier(n_neighbors=3)
neighs_tsne.fit(X_embedded, y)
print(neighs.predict([[1.1]]))
>>>[0]
print(neighs_tsne.predict([[1.1]]))
>>>[0]
แม้ว่านี่จะเป็นตัวอย่างที่ไร้เดียงสามากและไม่ได้สะท้อนความซับซ้อน แต่มันทำงานโดยการทดลองสำหรับตัวอย่างง่ายๆ
แก้ไข: นอกจากนี้การเพิ่มบางจุดที่เกี่ยวกับคำถามด้วยตนเองดังนั้นจึงไม่จำเป็นที่จะต้องเป็นเช่นนั้นอย่างไรก็ตามการหาเหตุผลเข้าข้างตนเองผ่านคณิตศาสตร์จะพิสูจน์ว่าคุณไม่มีผลลัพธ์ที่เป็นรูปธรรม (ไม่แน่นอนใช่หรือไม่) .
ฉันหวังว่าสิ่งนี้จะช่วยขจัดข้อกังวลของคุณกับ TSNE