مكتبة CPython "VKF" لتعلم الآلة

في مقال سابق للمؤلف ، تم وصف خادم ويب لإجراء تجارب باستخدام طريقة VKF للتعلم الآلي بناءً على نظرية الشبكة. كبديل لاستخدام خادم الويب ، تحاول هذه المقالة تحديد المسار لاستخدام مكتبة CPython مباشرة. سنقوم بإعادة إنتاج جلسات عمل التجارب مع صفائف الفطر وجودة النبيذ من مستودع بيانات UCI لاختبار خوارزميات التعلم الآلي. ثم سيكون هناك تفسيرات حول تنسيقات بيانات الإدخال.







المقدمة



تصف هذه المقالة نسخة جديدة من برنامج تعلُم الآلة يعتمد على نظرية الشبكة. الميزة الرئيسية لهذا الإصدار هي واجهة لمبرمجي Python للخوارزميات الفعالة المبرمجة في C ++.



اليوم ، وصلت إجراءات التعلم الآلي (مثل الشبكات العصبية التلافيفية والغابات العشوائية وآلات ناقلات الدعم) إلى مستوى عالٍ جدًا ، متجاوزة البشر في الكلام والفيديو والتعرف على الصور. ومع ذلك ، لا يمكنهم تقديم الحجج لإثبات صحة استنتاجاتهم.



من ناحية أخرى ، فإن الأساليب الرمزية لتعلم الآلة (البرمجة المنطقية الاستقرائية ، والتغطية التعلمية باستخدام البرمجة الصحيحة) لها تعقيد حسابي عالٍ جدًا وغير قابلة للتطبيق عمليا على عينات حتى صغيرة الحجم نسبيًا.



يستخدم النهج الموصوف هنا خوارزميات احتمالية لتجنب هذه المشاكل. تستخدم طريقة ICF للتعلم الآلي تقنيات نظرية الشبكية الجبرية الحديثة (تحليل المفاهيم الشكلية) ونظرية الاحتمالات (خاصة سلاسل ماركوف). ولكن الآن لا تحتاج إلى معرفة الرياضيات المتقدمة لاستخدام وإنشاء برامج باستخدام نظام ICF. أنشأ المؤلف مكتبة (vkf.cp38-win32.pyd تحت Windows أو vkf.cpython-38-x86_64-linux-gnu.so تحت Linux) لتوفير الوصول إلى البرنامج من خلال واجهة يمكن لمبرمجي Python فهمها.



هناك نهج أبوي فيما يتعلق بالنهج الموصوف - تم اختراعه في بداية الثمانينيات من القرن العشرين ، دكتور في العلوم التقنية. الأستاذ VK. طريقة Finn JSM لتوليد الفرضيات تلقائيًا. لقد تطورت الآن ، كما يقول منشئها ، إلى طريقة للدعم الآلي للبحث العلمي. يسمح لك باستخدام طرق منطق الجدال ، للتحقق من استقرار الفرضيات التي تم العثور عليها عند توسيع مجموعة التدريب ، للجمع بين نتائج التنبؤات باستخدام استراتيجيات مختلفة من المنطق JSM.



لسوء الحظ ، اكتشف مؤلف هذه المذكرة وزملائه وحققوا في بعض أوجه القصور النظرية في طريقة JSM:



  1. في أسوأ الحالات ، يمكن أن يكون عدد أوجه التشابه الناتجة كبيرًا جدًا مقارنة بحجم بيانات الإدخال (عينة تدريبية).
  2. (NP-).
  3. .
  4. «» , .
  5. .


تم تلخيص بحث المؤلف في الفصل 2 من أعمال أطروحته . تم اكتشاف النقطة الأخيرة من قبل المؤلف مؤخرًا ، ولكن ، في رأيه ، يضع حدا لنهج العينة الموسع.



أخيرًا ، لا يقدم مجتمع JSM الوصول إلى التعليمات البرمجية المصدر لأنظمته. علاوة على ذلك ، فإن لغات البرمجة المستخدمة (Fort و C #) لن تسمح باستخدامها من قبل عامة الناس. الإصدار المجاني الوحيد C ++ من JSM حلالا معروف للمؤلف (بواسطة T.A. Volkovarobofreak) يحتوي على خطأ مزعج يؤدي في بعض الأحيان إلى إنهاء غير طبيعي للحسابات.



في البداية ، خطط المؤلف لمشاركة التشفير المطوّر لنظام طريقة VKF مع مجتمع JSM. لذلك ، وضع جميع الخوارزميات القابلة للتطبيق في وقت واحد على كل من أنظمة JSM و VKF في مكتبة منفصلة (vkfencoder.cp38-win32.pyd ضمن Windows أو vkfencoder.cpython-38-x86_64-linux-gnu.so في Linux) ... لسوء الحظ ، تبين أن مجتمع JSM لم يطالب بهذه الخوارزميات. تطبق مكتبة VKF هذه الخوارزميات (على سبيل المثال ، فئة vkf.FCA) ، ولكنها تعتمد على ملء الجداول ليس من الملفات ، ولكن مباشرة من خلال واجهة الويب. هنا سوف نستخدم مكتبة vkfencoder.



1 إجراء للعمل مع المكتبة لميزات منفصلة





لنفترض أن القارئ يعرف كيفية تثبيت خادم MariaDB + MariaDB Connector / C (افتراضيًا ، نستخدم عنوان IP 127.0.0.1:3306 والمستخدم 'root' مع كلمة المرور 'toor'). لنبدأ بتثبيت مكتبات vkfencoder و vkf في البيئة الافتراضية التجريبية وإنشاء قاعدة بيانات MariaDB فارغة باسم "الفطر".



krrguest@amd2700vii:~/src$ python3 -m venv demo 
krrguest@amd2700vii:~/src$ source demo/bin/activate 
(demo) krrguest@amd2700vii:~/src$ cd vkfencoder
(demo) krrguest@amd2700vii:~/src/vkfencoder$ python3 ./setup.py build
(demo) krrguest@amd2700vii:~/src/vkfencoder$ python3 ./setup.py install
(demo) krrguest@amd2700vii:~/src/vkfencoder$ cd ../vkf
(demo) krrguest@amd2700vii:~/src/vkf$ python3 ./setup.py build
(demo) krrguest@amd2700vii:~/src/vkf$ python3 ./setup.py install
(demo) krrguest@amd2700vii:~/src/vkf$ cd ../demo
(demo) krrguest@amd2700vii:~/src/demo$ mysql -u root -p
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS mushroom;
MariaDB [(none)]> exit;


نتيجة لهذا العمل ،

ستظهر قاعدة بيانات "الفطر" ، وسيظهر الملف vkfencoder.cpython-38 في المجلد ~ / src / demo / lib / python3.8 / site -pack / vkfencoder-1.0.3-py3.8-linux-x86_64.egg / المجلد -x86_64-linux-gnu.so ، وسيظهر

ملف vkf.cpython في المجلد ~ / src / demo / lib / python3.8 / site -packs / vkf-2.0.1-py3.8-linux-x86_64.egg / المجلد 38-x86_64-linux-gnu.so



شغّل Python3 وشغّل تجربة CCF على مصفوفة الفطر. من المفترض أن هناك 3 ملفات في المجلد ~ / src / demo / files / (mushrooms.xml، MUSHROOMS.train، MUSHROOMS.rest). سيتم وصف هيكل هذه الملفات في القسم التالي. يحدد الملف الأول "mushrooms.xml" بنية النصف الشبكي السفلي على قيم كل سمة تصف الفطر. الملفان الثاني والثالث عبارة عن ملف "agaricus-lepiota.data" مقسومًا على مولد رقم عشوائي في النصف تقريبًا - الكتاب الرقمي "معرف فطر أمريكا الشمالية" المنشور في نيويورك عام 1981. الأسماء التالية هي "التشفير" ، "المشابك" ، " القطارات و "الاختبارات" هي أسماء الجداول في قاعدة البيانات "فطر" ، على التوالي ، لترميزات قيم السمات حسب سلاسل فرعية للبت ، وعلاقات التغطية لمخططات نصف دقيقة على هذه القيم ،أمثلة على التدريب والاختبار.



(demo) krrguest@amd2700vii:~/src/demo$ Python3
>>> import vkfencoder
>>> xml = vkfencoder.XMLImport('./files/mushrooms.xml', 'encoder', 'lattices', 'mushroom', '127.0.0.1', 'root', 'toor')
>>> trn = vkfencoder.DataImport('./files/MUSHROOMS.train', 'e', 'encoder', 'trains', 'mushroom', '127.0.0.1', 'root', 'toor') 
>>> tst = vkfencoder.DataImport('./files/MUSHROOMS.rest', 'e', 'encoder', 'tests', 'mushroom', '127.0.0.1', 'root', 'toor') 


يتوافق الحرف "e" في السطرين الأخيرين مع قابلية الفطر للأكل (هذه هي الطريقة التي يتم بها ترميز السمة المستهدفة في هذا الصفيف).



من المهم ملاحظة أن هناك فئة vkfencoder.XMLExport تسمح لك بحفظ المعلومات من جدولين "التشفير" و "المشابك" في ملف xml ، والتي بعد إجراء التغييرات ، يمكن معالجتها مرة أخرى بواسطة فئة vkfencoder.XMLImport.



ننتقل الآن إلى تجربة VKF الفعلية: قم بتوصيل برامج التشفير ، وتحميل الفرضيات المحسوبة مسبقًا (إن وجدت) ، وحساب العدد الإضافي (100) من الفرضيات في تيارات العدد المحدد (4) وحفظها في جدول 'vkfhyps'.



>>> enc = vkf.Encoder('encoder', 'mushroom', '127.0.0.1', 'root', 'toor')
>>> ind = vkf.Induction()
>>> ind.load_discrete_hypotheses(enc, 'trains', 'vkfhyps', 'mushroom', '127.0.0.1', 'root', 'toor') 
>>> ind.add_hypotheses(100, 4) 
>>> ind.save_discrete_hypotheses(enc, 'vkfhyps', 'mushroom', '127.0.0.1', 'root', 'toor')


يمكنك الحصول على قائمة Python لجميع الأزواج غير التقليدية (feature_name ، feature_value) لفرضية CCF المرقمة ndx



>>> ind.show_discrete_hypothesis(enc, ndx)


إحدى الفرضيات لاتخاذ قرار حول قابلية الفطر للأكل لها الشكل



[('gill_attachment', 'free'), ('gill_spacing', 'close'), ('gill_size', 'broad'), ('stalk_shape', 'enlarging'), ('stalk_surface_below_ring', 'scaly'), ('veil_type', 'partial'), ('veil_color', 'white'), ('ring_number', 'one'), ('ring_type', 'pendant')]


نظرًا للطبيعة الاحتمالية لخوارزميات طريقة CCF ، فقد لا يتم إنشاؤها ، ولكن المؤلف أثبت أنه مع وجود عدد كبير بما فيه الكفاية من فرضيات CCF التي تم إنشاؤها ، ستظهر فرضية مشابهة جدًا لها ، والتي ستتنبأ أيضًا تقريبًا بالخاصية المستهدفة في حالات الاختبار المهمة. التفاصيل في الفصل 4 من أطروحة المؤلف.



أخيرا ، ننتقل إلى التنبؤ. نقوم بإنشاء عينة اختبار لتقييم جودة الفرضيات المتولدة وفي نفس الوقت التنبؤ بالخاصية المستهدفة لعناصرها



>>> tes = vkf.TestSample(enc, ind, 'tests', 'mushroom', '127.0.0.1', 'root', 'toor')
>>> tes.correct_positive_cases()
>>> tes.correct_negative_cases()
>>> exit()


2 وصف هيكل البيانات



2.1 هياكل شبكية على ميزات منفصلة



تقوم فئة vkfencoder.XMLImport بتوزيع ملف XML يصف الترتيب بين قيم المعالم ، ويقوم بإنشاء وملء "ترميز" جدولين (تحويل كل قيمة إلى سلسلة بت) و "شبكات" (تخزين العلاقات بين قيم ميزة واحدة).

يجب أن يكون هيكل ملف الإدخال مثل



<?xml version="1.0"?>
<document name="mushrooms_db">
  <attribute name="cap_color">
    <vertices>
      <node string="null" char='_'></node>
      <node string="brown" char='n'></node>
      <node string="buff" char='b'></node>
      <node string="cinnamon" char='c'></node>
      <node string="gray" char='g'></node>
      <node string="green" char='r'></node>
      <node string="pink" char='p'></node>
      <node string="purple" char='u'></node>
      <node string="red" char='e'></node>
      <node string="white" char='w'></node>
      <node string="yellow" char='y'></node>
    </vertices>
    <edges>
      <arc source="brown" target="null"></arc>
      <arc source="buff" target="brown"></arc>
      <arc source="buff" target="yellow"></arc>
      <arc source="cinnamon" target="brown"></arc>
      <arc source="cinnamon" target="red"></arc>
      <arc source="gray" target="null"></arc>
      <arc source="green" target="null"></arc>
      <arc source="pink" target="red"></arc>
      <arc source="pink" target="white"></arc>
      <arc source="purple" target="red"></arc>
      <arc source="red" target="null"></arc>
      <arc source="white" target="null"></arc>
      <arc source="yellow" target="null"></arc>
    </edges>
  </attribute>
</document>


يمثل المثال أعلاه الترتيب بين قيم السمة الثالثة "cap_color" (لون القبعة) لصفيف الفطر من مستودع بيانات التعلم الآلي (جامعة كاليفورنيا في إيرفين). يمثل كل حقل "سمة" بنية شبكية على قيم السمة المقابلة. في مثالنا ، تتوافق المجموعة مع السمة المنفصلة "cap_color". تشكل قائمة جميع القيم المميزة مجموعة فرعية. لقد أضفنا قيمة للإشارة إلى أوجه الشبه التافهة (المفقودة). تتوافق بقية القيم مع الوصف الموجود في الملف المصاحب 'agaricus-lepiota.names'.

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



أثبت المؤلف نظرية حول صحة التمثيل الذي تم إنشاؤه بواسطة مُنشئ فئة vkfencoder.XMLImport وتم تخزينه في جدول "التشفير". يستخدم خوارزميته ودليل نظرية النظرية فرعًا حديثًا من نظرية الشبكة الشعرية المعروفة باسم تحليل المفاهيم الرسمي. لمزيد من التفاصيل ، يُحال القارئ مرة أخرى إلى عمل أطروحة المؤلف (الفصل 1).



2.2 هيكل العينة لميزات منفصلة



بادئ ذي بدء ، تجدر الإشارة إلى أنه يمكن للقارئ تنفيذ محمل التدريب واختبار الحالة الخاص به في قاعدة البيانات أو استخدام فئة vkfencoder.DataImport المتاحة في المكتبة. في الحالة الثانية ، يجب أن يأخذ القارئ في الاعتبار أن الميزة المستهدفة يجب أن تكون في الموضع الأول وأن تتكون من حرف واحد (على سبيل المثال ، "+" / "-" ، "1" / "0" أو "e" / "p").



يجب أن تكون عينة التدريب ملف CSV (بقيم مفصولة بفواصل) تصف أمثلة التدريب وأمثلة العداد (الأمثلة التي لا تحتوي على الخاصية الهدف).



يجب أن يكون هيكل ملف الإدخال مثل



e,f,f,g,t,n,f,c,b,w,t,b,s,s,p,w,p,w,o,p,k,v,d
p,x,s,p,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,s,d
p,f,y,g,f,f,f,c,b,p,e,b,k,k,b,n,p,w,o,l,h,v,g
p,x,y,y,f,f,f,c,b,p,e,b,k,k,n,n,p,w,o,l,h,v,p
e,x,y,b,t,n,f,c,b,e,e,?,s,s,e,w,p,w,t,e,w,c,w
p,f,f,g,f,f,f,c,b,g,e,b,k,k,n,p,p,w,o,l,h,y,g
p,x,f,g,f,f,f,c,b,p,e,b,k,k,p,n,p,w,o,l,h,y,g
p,x,f,y,f,f,f,c,b,h,e,b,k,k,n,b,p,w,o,l,h,y,g
p,f,f,y,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,y,g
p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,p,p,w,o,l,h,v,d
p,x,f,g,f,c,f,c,n,u,e,b,s,s,w,w,p,w,o,p,n,v,d
p,x,y,g,f,f,f,c,b,h,e,b,k,k,p,b,p,w,o,l,h,v,g
e,f,y,g,t,n,f,c,b,n,t,b,s,s,p,g,p,w,o,p,k,y,d
e,f,f,e,t,n,f,c,b,p,t,b,s,s,p,p,p,w,o,p,k,v,d
p,f,y,g,f,f,f,c,b,p,e,b,k,k,p,b,p,w,o,l,h,y,p


يصف كل سطر هنا مثال تدريب واحد. يحتوي الموضع الأول على "e" أو "p" اعتمادًا على أكل / سمية الفطر الموصوف. تحتوي بقية المواضع (مفصولة بفواصل) على أحرف (أسماء قصيرة) أو سلاسل (الأسماء الكاملة لقيم السمة المقابلة). على سبيل المثال ، يتطابق الموضع الرابع مع السمة "cup_color" ، حيث يشير "g" و "p" و "y" و "b" و "e" إلى "grey" و "pink" و "yellow" و "sand" و "red" على التوالي. تشير علامة الاستفهام في منتصف الجدول أعلاه إلى قيمة مفقودة. ومع ذلك ، يمكن أن تكون قيم الخصائص (غير المستهدفة) المتبقية سلاسل. من المهم ملاحظة أنه عند الحفظ في قاعدة البيانات ، سيتم استبدال المسافات في أسمائها بأحرف "_".



الملف الذي يحتوي على حالات الاختبار له نفس الشكل ، فقط لا يتم إخبار النظام عن العلامة الحقيقية للمثال ، ويتم مقارنة تنبؤه به لحساب جودة الفرضيات المتولدة وقوتها التنبؤية.



2.3 بنية العينة للميزات المستمرة



في هذه الحالة ، تكون الخيارات ممكنة مرة أخرى: يمكن للقارئ تنفيذ مدربه الخاص ومحمل حالة الاختبار في قاعدة البيانات أو استخدام فئة vkfencoder.DataLoad المتوفرة في المكتبة. في الحالة الثانية ، يجب أن يأخذ القارئ في الاعتبار أن الميزة المستهدفة يجب أن تكون في الموضع الأول وتتكون من رقم طبيعي (على سبيل المثال ، 0 ، 7 ، 15).



يجب أن تكون عينة التدريب ملف CSV (بقيم مفصولة بنوع محدد) تصف أمثلة التدريب والأمثلة المضادة (الأمثلة التي لا تحتوي على الخاصية الهدف).



يجب أن يكون هيكل ملف الإدخال مثل



"quality";"fixed acidity";"volatile acidity";"citric acid";"residual sugar";"chlorides";"free sulfur dioxide";"total sulfur dioxide";"density";"pH";"sulphates";"alcohol"
5;7.4;0.7;0;1.9;0.076;11;34;0.9978;3.51;0.56;9.4
5;7.8;0.88;0;2.6;0.098;25;67;0.9968;3.2;0.68;9.8
5;7.8;0.76;0.04;2.3;0.092;15;54;0.997;3.26;0.65;9.8
6;11.2;0.28;0.56;1.9;0.075;17;60;0.998;3.16;0.58;9.8
5;7.4;0.7;0;1.9;0.076;11;34;0.9978;3.51;0.56;9.4
5;7.4;0.66;0;1.8;0.075;13;40;0.9978;3.51;0.56;9.4
5;7.9;0.6;0.06;1.6;0.069;15;59;0.9964;3.3;0.46;9.4
7;7.3;0.65;0;1.2;0.065;15;21;0.9946;3.39;0.47;10
7;7.8;0.58;0.02;2;0.073;9;18;0.9968;3.36;0.57;9.5


في حالتنا ، هذه هي الأسطر القليلة الأولى من ملف "vv_red.csv" الذي تم إنشاؤه من ملف "winequality-red.csv" من النبيذ البرتغالي الأحمر من مجموعة جودة النبيذ في مستودع بيانات UCI لاختبار إجراءات التعلم الآلي عن طريق إعادة ترتيب العمود الأخير إلى البداية. من المهم ملاحظة أنه عند الحفظ في قاعدة البيانات ، سيتم استبدال المسافات في أسمائها بأحرف "_".



3 تجربة CCF على أمثلة ذات ميزات مستمرة



كما كتبنا سابقًا ، سوف نعرض العمل على مجموعة جودة النبيذ من مستودع UCI. لنبدأ بإنشاء قاعدة بيانات فارغة تحت MariaDB باسم "red_wine".



(demo) krrguest@amd2700vii:~/src/demo$ mysql -u root -p
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS red_wine;
MariaDB [(none)]> exit;


نتيجة لهذا العمل ، ستظهر قاعدة بيانات "red_wine".



أطلقنا Python3 ونجري تجربة VKF على مصفوفة جودة النبيذ. من المفترض أن هناك ملف vv_red.csv في المجلد ~ / src / demo / files /. تم وصف هيكل هذه الملفات في الفقرة السابقة. الأسماء التالية "الحواف" و "المعقدة" و "القطارات" و "الاختبارات" هي أسماء الجداول في قاعدة بيانات "red_wine" ، على التوالي ، للعتبات (لكل من الميزات الأولية والميزات المحسوبة بواسطة الانحدار) ، معاملات الانحدار اللوجستي الكبير بين أزواج من الميزات والتدريب وحالات الاختبار.



(demo) krrguest@amd2700vii:~/src/demo$ Python3
>>> import vkfencoder
>>> nam = vkfencoder.DataLoad('./files/vv_red.csv', 7, 'verges', 'trains', 'red_wine', ';', '127.0.0.1', 'root', 'toor')


تحدد الوسيطة الثانية العتبة (7 في حالتنا) ، والتي تم بعدها الإعلان عن المثال إيجابيًا. جدال '؛' يطابق المحدد (الافتراضي هو '،').



كما هو مبين في الملاحظة السابقة للمؤلف ، يختلف الإجراء عن حالة الميزات المنفصلة. أولاً ، نحسب الانحدار اللوجستي باستخدام فئة vkf.Join ، التي يتم تخزين معاملاتها في الجدول `` المعقد ''.



>>> join = vkf.Join('trains', 'red_wine', '127.0.0.1', 'root', 'toor')
>>> join.compute_save('complex', 'red_wine', '127.0.0.1', 'root', 'toor') 


الآن ، باستخدام نظرية المعلومات ، نقوم بحساب العتبات باستخدام فئة vkf.Generator ، والتي يتم تخزينها ، إلى جانب الحد الأقصى والحد الأدنى ، في جدول "الحواف".



>>> gen = vkf.Generator('complex', 'trains', 'verges', 'red_wine', 7, '127.0.0.1', 'root', 'toor')


تحدد الوسيطة الخامسة عدد العتبات على الميزات الأصلية. افتراضيًا (وبقيمة 0) ، يتم حسابها على أنها لوغاريتم عدد الميزات. تبحث الانحدارات عن عتبة واحدة.



الآن ننتقل إلى تجربة VKF الفعلية: نقوم بتوصيل برامج التشفير ، وتحميل الفرضيات المحسوبة مسبقًا (إن وجدت) ، وحساب العدد الإضافي (300) من الفرضيات في العدد المحدد (8) تدفقات وحفظها في جدول 'vkfhyps'.



>>> qual = vkf.Qualifier('verges', 'red_wine', '127.0.0.1', 'root', 'toor')
>>> beg = vkf.Beget('complex', 'red_wine', '127.0.0.1', 'root', 'toor')
>>> ind = vkf.Induction()
>>> ind.load_continuous_hypotheses(qual, beg, 'trains', 'vkfhyps', 'red_wine', '127.0.0.1', 'root', 'toor') 
>>> ind.add_hypotheses(300, 8) 
>>> ind.save_continuous_hypotheses(qual, 'vkfhyps', 'red_wine', '127.0.0.1', 'root', 'toor')


يمكنك الحصول على قائمة Python من الثلاثيات (feature_name ، (lower_bound ، upper_bound)) لفرضية CCF المرقمة ndx



>>> ind.show_continuous_hypothesis(enc, ndx)


أخيرا ، ننتقل إلى التنبؤ. نقوم بإنشاء عينة اختبار لتقييم جودة الفرضيات المتولدة وفي نفس الوقت التنبؤ بالخاصية المستهدفة لعناصرها



>>> tes = vkf.TestSample(qual, ind, beg, 'trains', 'red_wine', '127.0.0.1', 'root', 'toor')
>>> tes.correct_positive_cases()
>>> tes.correct_negative_cases()
>>> exit()


نظرًا لأن لدينا ملفًا واحدًا فقط ، فقد استخدمنا هنا مجموعة التدريب كحالات اختبار.



4. ملاحظة حول تحميل الملفات



استخدمت مكتبة ملفات aiofiles لتحميل الملفات (مثل "mushrooms.xml") إلى خادم ويب. في ما يلي جزء من الرمز قد تجده مفيدًا



import aiofiles
import os
import vkfencoder

async def write_file(path, body):
    async with aiofiles.open(path, 'wb') as file_write:
        await file_write.write(body)
    file_write.close()

async def xml_upload(request):
    #determine names of tables
    encoder_table_name = request.form.get('encoder_table_name')
    lattices_table_name = request.form.get('lattices_table_name')
    #Create upload folder if doesn't exist
    if not os.path.exists(Settings.UPLOAD_DIR):
        os.makedirs(Settings.UPLOAD_DIR)
    #Ensure a file was sent
    upload_file = request.files.get('file_name')
    if not upload_file:
        return response.redirect("/?error=no_file")
    #write the file to disk and redirect back to main
    short_name = upload_file.name.split('/')[-1]
    full_path = f"{Settings.UPLOAD_DIR}/{short_name}"
    try:
        await write_file(full_path, upload_file.body)
    except Exception as exc:
        return response.redirect('/?error='+ str(exc))
    return response.redirect('/ask_data')


خاتمة



تحتوي مكتبة vkf.cpython-38-x86_64-linux-gnu.so على العديد من الفئات والخوارزميات المخفية. يستخدمون مفاهيم رياضية متقدمة مثل العمليات المغلقة بمفردها ، والتقييم البطيء ، وسلاسل ماركوف المزدوجة ، والحالات العابرة لسلسلة ماركوف ، وقياس الاختلاف الكلي ، وما



إلى ذلك. ) أظهر التطبيق الحقيقي لبرنامج C ++ "طريقة VKF" على البيانات متوسطة الحجم (تحتوي مجموعة الكبار على 32560 تدريب و 16280 حالة اختبار).



تفوق نظام "طريقة VKF" (من حيث دقة التنبؤ) على نظام CLIP3 (Integer Programming Coverage Learning v.3) على صفيف SPECT ، حيث CLIP3 هو برنامج تم إنشاؤه بواسطة مؤلفي صفيف SPECT. على مجموعة الفطر (مقسمة عشوائيًا إلى عينات تدريب واختبار) ، أظهر نظام طريقة VKF دقة 100٪ (كلاهما فيما يتعلق بمعيار سمية الفطر ومعيار الصالحة للأكل). تم تطبيق البرنامج أيضًا على مجموعة الكبار لتوليد أكثر من مليون فرضية (لا توجد أخطاء).



تخضع رموز مصدر مكتبة vkf CPython للإشراف المسبق على savannah.nongnu.org. يمكن الحصول على رموز مكتبة مساعدة vkfencoder من Bitbucket .



يود المؤلف أن يشكر زملائه وطلابه (D.A Anokhin ، E.D. Baranova ، I.V. Nikulin ، E.Yu.Sidorova ، LA LA Yakimova) على دعمهم ومناقشاتهم المفيدة وبحوثهم المشتركة. ومع ذلك ، كالعادة ، المؤلف هو المسؤول الوحيد عن جميع أوجه القصور الموجودة.



All Articles