الفصل 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.