Python में AI की अवधारणाएँ

Python में कोसाइन समानता और k-means क्लस्टरिंग

अनसुपरवाइज़्ड लर्निंग बिना लेबल वाले डेटा में संरचना ढूँढती है। कोसाइन समानता मापती है कि दो वेक्टर कितने मिलते-जुलते हैं, और k-means बिंदुओं को उन केंद्रों के आसपास क्लस्टर में बाँटता है जिन्हें वह खुद सीखता है।

आसान शब्दों में अवधारणा

अनसुपरवाइज़्ड लर्निंग बिना लेबल वाले डेटा में संरचना ढूँढती है। कोसाइन समानता मापती है कि दो वेक्टर कितने मिलते-जुलते हैं, और k-means बिंदुओं को उन केंद्रों के आसपास क्लस्टर में बाँटता है जिन्हें वह खुद सीखता है।

कोसाइन समानता से मापें कि दो वेक्टर कितने मिलते हैं और बिना लेबल वाले डेटा को k-means से समूहों में बाँटें।

मुख्य बातें

  • कोसाइन समानता लंबाई को नज़रअंदाज़ करके सिर्फ़ दिशा की तुलना करती है, जो टेक्स्ट और एम्बेडिंग के लिए सही है।
  • k-means को क्लस्टर की संख्या k पहले से चाहिए।
  • शुरुआती केंद्र नतीजा बदल सकते हैं, इसलिए k-means अक्सर कई बार चलाया जाता है।
  • क्लस्टर सिर्फ़ डेटा से मिलते हैं; लेबल की ज़रूरत नहीं होती।

इसका उपयोग कब करें?

  • समझें कि न्यूरल नेटवर्क और AI लाइब्रेरी के अंदर क्या होता है।
  • संबंधित चुनौतियों में खुद लागू करने से पहले विचार को समझें।
  • मशीन लर्निंग कोर्स, इंटरव्यू और प्रोजेक्ट की तैयारी करें।

इसे काम करते देखें

k-means के दो चरण बारी-बारी से चलाने के लिए अगला चरण दबाएँ, या कुछ न बदलने तक चलाने के लिए चलाएँ दबाएँ। दाईं ओर वेक्टर घुमाकर उनकी कोसाइन समानता बदलें।

उदाहरण कोड

कोड चलाएँ →
main.py
import math

# Cosine similarity compares directions: 1 = same direction, 0 = unrelated.
def cosine(a, b):
    dot = sum(x * y for x, y in zip(a, b))
    return dot / (math.sqrt(sum(x * x for x in a)) * math.sqrt(sum(y * y for y in b)))

print("cos(doc1, doc2):", round(cosine([1, 2, 0], [2, 4, 0]), 3))
print("cos(doc1, doc3):", round(cosine([1, 2, 0], [0, 0, 3]), 3))

# k-means: assign points to the nearest centre, then move each centre to its points' mean.
points = [1, 2, 3, 10, 11, 12]
centres = [1.0, 2.0]
for step in range(1, 4):
    groups = [[], []]
    for p in points:
        nearest = min(range(len(centres)), key=lambda i: abs(p - centres[i]))
        groups[nearest].append(p)
    centres = [sum(g) / len(g) for g in groups]
    print(f"step {step}: centres={[round(c, 2) for c in centres]} groups={groups}")

अपेक्षित आउटपुट

cos(doc1, doc2): 1.0
cos(doc1, doc3): 0.0
step 1: centres=[1.0, 7.6] groups=[[1], [2, 3, 10, 11, 12]]
step 2: centres=[2.0, 11.0] groups=[[1, 2, 3], [10, 11, 12]]
step 3: centres=[2.0, 11.0] groups=[[1, 2, 3], [10, 11, 12]]

यह कैसे काम करता है

cosine() डॉट प्रोडक्ट को दोनों वेक्टर की लंबाई से भाग देता है, इसलिए doc2 (doc1 जैसी ही दिशा) को 1 और doc3 (कोई साझा शब्द नहीं) को 0 मिलता है। k-means दो चरण दोहराता है, हर बिंदु को सबसे पास के केंद्र से जोड़ना और हर केंद्र को उसके बिंदुओं के औसत पर ले जाना। चरण 2 के बाद कुछ नहीं बदलता, यानी यह स्थिर हो गया।

मान बदलें और Python इंस्टॉल किए बिना CodeUtility ऑनलाइन Python कंपाइलर में प्रोग्राम चलाएँ।

अभ्यास के कार्य

बड़े dataset पर जाने से पहले input बदलें और edge cases की जाँच करें।

  1. इनपुट या वेट बदलें और रन करने से पहले आउटपुट का अनुमान लगाएँ।
  2. हर गणना चरण को देखने के लिए बीच के मान प्रिंट करें।
  3. नीचे दी गई चुनौतियाँ हल करके विचार को खुद लागू करें।
Python IDE में चलाएँ →

चैलेंज से अभ्यास करें

इस पाठ में सीखी बात से एक असली समस्या हल करें। हर चैलेंज ब्राउज़र में चलता है, तुरंत टेस्ट और AI रिव्यू के साथ।

सभी चैलेंज