Menu
CoddyTech
flag Ar iconالعربيةdown icon

قياس التشابه

جزء من قسم التعلّم غير الخاضع للإشراف في رحلة Machine Learning على Coddy. الدرس 2 من 51.

في خوارزمية k-NN، كان المقصود بالأقرب هو الأصغر مسافةً. للعثور على المجموعات، تحتاج إلى ذلك لكل زوج من الصفوف: جدول المسافات. قيّم أربعة أصدقاء فيلمين، من 1 إلى 10:

ratings = np.array([[9, 2], [8, 3], [2, 9], [3, 7]])  # Ana, Ben, Cy, Dee
n = len(ratings)
table = np.zeros((n, n))
for i in range(n):
    table[i] = np.sqrt(((ratings - ratings[i]) ** 2).sum(axis=1))

يحتوي الصف i على مسافة الصديق i إلى الجميع. إليك table مرسومًا على شكل شبكة:

شبكة 4 × 4 للمسافات بين Ana وBen وCy وDee. يحتوي القطر على 0.0. تم تمييز الخليتين الخاصتين بـ Ana وBen، وقيمتهما 1.4، باعتبارهما الأصغر خارج القطر؛ أما Ana وCy فهما الأبعد بمسافة 9.9

تجاهل القطر الذي يحتوي على 0، فكل صديق يقابل نفسه. أصغر رقم متبقٍ يمثل الزوج الأكثر تشابهًا، وأكبر رقم يمثل الأكثر اختلافًا. المسافة الصغيرة تعني صفوفًا متشابهة.

challenge icon

التحدي

سهل

يضيف بار العصائر مشروب السموذي الجديد للطاهي، الذي يقرأه البرنامج، إلى قائمته. أي مشروبين متشابهان جدًا بحيث يمكن الاستغناء عن أحدهما؟ وأي مشروبين هما الأكثر اختلافًا، لتقديمهما ضمن تشكيلة تذوق؟

  1. أنشئ جدول المسافات لـ menu.
  2. اعثر على الزوج الأكثر تشابهًا والزوج الأكثر اختلافًا: اذكر كل زوج مرة واحدة، ولا تقارن أي مشروب بنفسه.
  3. اطبع الزوجين، مع ترتيب الاسمين حسب ظهورهما في القائمة، والمسافات بدقة منزلة عشرية واحدة.

لقائمة أخرى:

Most alike: Lemon Zing and Lime Twist (14.1 g apart)
Most different: Choco Shake and Cucumber Cool (212.6 g apart)

جرّب بنفسك

import numpy as np

names = ["Berry Blast", "Green Glow", "Mango Lassi", "Kale Kick", "Tropical Sun", "Banana Oat", "Minty Melon"]
# صف واحد لكل مشروب سموذي، بالغرامات لكل كوب: فواكه، خضراوات ورقية، زبادي
menu = np.array([[180, 0, 120],
                 [90, 110, 60],
                 [160, 0, 150],
                 [60, 150, 30],
                 [200, 20, 40],
                 [100, 0, 200],
                 [170, 40, 0]])

# تُضاف وصفة الطاهي الجديدة إلى القائمة في الصف الأخير
names.append(input())
new = [int(input()), int(input()), int(input())]
menu = np.concatenate([menu, [new]])

# اكتب الكود الخاص بك أدناه
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس التعلّم غير الخاضع للإشراف

تدرّب بنفسك: مترجم Python عبر الإنترنت