Skip to content

الفصل 45: الذكاء الاصطناعي وتعلم الآلة

مقدمة

يمكن استخدام لغة ص لتطبيق مفاهيم الذكاء الاصطناعي الأساسية.

الخوارزميات الأساسية

الانحدار الخطي

أبسط خوارزمية تعلم آلة — إيجاد خط يمر عبر البيانات:

sad
دالة انحدار_خطي(س_بيانات، ص_بيانات)
    متغير ن = طول(س_بيانات)
    متغير مجموع_س = 0
    متغير مجموع_ص = 0
    متغير مجموع_سص = 0
    متغير مجموع_سز = 0
    
    لكل م في مدى(0، ن - 1)
        مجموع_س = مجموع_س + س_بيانات[م]
        مجموع_ص = مجموع_ص + ص_بيانات[م]
        مجموع_سص = مجموع_سص + س_بيانات[م] * ص_بيانات[م]
        مجموع_سز = مجموع_سز + س_بيانات[م] ** 2
    نهاية
    
    # حساب الميل والتقاطع
    متغير ميل = (ن * مجموع_سص - مجموع_س * مجموع_ص) / (ن * مجموع_سز - مجموع_س ** 2)
    متغير تقاطع = (مجموع_ص - ميل * مجموع_س) / ن
    
    ارجع {"ميل": ميل، "تقاطع": تقاطع}
نهاية

# الاستخدام
متغير س = [1، 2، 3، 4، 5]
متغير ص = [2، 4، 5، 4، 5]
متغير نتيجة = انحدار_خطي(س، ص)
اطبع_سطر("الميل: " + نتيجة["ميل"])
اطبع_سطر("التقاطع: " + نتيجة["تقاطع"])

خوارزمية k-أقرب جار (KNN)

sad
دالة مسافة(نقطة1، نقطة2)
    متغير مجموع = 0
    لكل م في مدى(0، طول(نقطة1) - 1)
        مجموع = مجموع + (نقطة1[م] - نقطة2[م]) ** 2
    نهاية
    ارجع مجموع ** 0.5
نهاية

دالة تصنيف_knn(بيانات، تصنيفات، جديد، ك)
    # حساب المسافات
    متغير مسافات = []
    لكل م في مدى(0، طول(بيانات) - 1)
        متغير د = مسافة(بيانات[م]، جديد)
        مسافات = مسافات + [{"distance": د، "تصنيف": تصنيفات[م]}]
    نهاية
    
    # إيجاد الأكثر تكراراً في أقرب k
    # (بسيط — التصنيف الأقرب)
    متغير أقرب = مسافات[0]
    لكل عنصر في مسافات
        إذا (عنصر["distance"] < أقرب["distance"])
            أقرب = عنصر
        نهاية
    نهاية
    ارجع أقرب["تصنيف"]
نهاية

الشبكة العصبية البسيطة

sad
# خلية عصبية بسيطة (Perceptron)
صنف خلية_عصبية
    متغير أوزان = []
    متغير انحياز = 0
    متغير معدل_تعلم = 0.1
    
    باني(عدد_مدخلات)
        لكل م في مدى(0، عدد_مدخلات - 1)
            هذا.أوزان = هذا.أوزان + [0]
        نهاية
    نهاية
    
    دالة تنبؤ(مدخلات)
        متغير مجموع = هذا.انحياز
        لكل م في مدى(0، طول(مدخلات) - 1)
            مجموع = مجموع + مدخلات[م] * هذا.أوزان[م]
        نهاية
        إذا (مجموع >= 0)
            ارجع 1
        وإلا
            ارجع 0
        نهاية
    نهاية
    
    دالة تدريب(مدخلات، متوقع)
        متغير تنبؤ = هذا.تنبؤ(مدخلات)
        متغير خطأ = متوقع - تنبؤ
        
        لكل م في مدى(0، طول(هذا.أوزان) - 1)
            هذا.أوزان[م] = هذا.أوزان[م] + هذا.معدل_تعلم * خطأ * مدخلات[م]
        نهاية
        هذا.انحياز = هذا.انحياز + هذا.معدل_تعلم * خطأ
    نهاية
نهاية

# تدريب بوابة AND
متغير خلية = جديد خلية_عصبية(2)

لكل _ في مدى(1، 100)
    خلية.تدريب([0، 0]، 0)
    خلية.تدريب([0، 1]، 0)
    خلية.تدريب([1، 0]، 0)
    خلية.تدريب([1، 1]، 1)
نهاية

اطبع_سطر("0 AND 0 = " + خلية.تنبؤ([0، 0]))  # 0
اطبع_سطر("1 AND 1 = " + خلية.تنبؤ([1، 1]))  # 1

تمرين

عدل الخلية العصبية لتتعلم بوابة OR بدلاً من AND.

مُرخَّص بموجب رخصة MIT