River لتعلم الآلة عبر الإنترنت: مثال
15 أكتوبر 2021
River هي حزمة التعلم الآلي عبر الإنترنت في Python. يمكن أن يعمل مع مجموعة متنوعة من مشاكل التعلم الآلي سواء كان ذلك الانحدار أو التصنيف.
يتكون River من Creme و Scikit-Multiflow ويهدف إلى العمل على البيانات التي يتم إنشاؤها باستمرار. توضح هذه المدونة إجراء خطوة بخطوة لاستخدام River في نموذج لمجموعة بيانات بدءًا من التثبيت. تمت مناقشة أساسيات نهر بالتفصيل في مدونتي السابقة. إذا لم تكن قد قرأت ذلك ، فمن المستحسن قراءته أولاً قبل اتباع هذه المدونة لفهم أفضل.
تثبيت
يتم تثبيت River مثل تثبيت حزم Python الأخرى. يمكنك استخدام النقطة لتثبيته في بيئتك.
pip install river
المهام
لنأخذ مثالاً لبناء نموذج بسيط لتصنيف النص باستخدام River. الهدف هو تصنيف النص المعطى إما على أنه برنامج أو جهاز. لهذا الغرض ، سنستخدم BagOfWords () كمحول لتحويل النص إلى ميزات و Naive Bayes MultinomialNB لنمذجة البيانات. لذلك ، نقوم أولاً باستيراد الحزم المطلوبة.
from river.naive_bayes import MultinomialNB
from river.feature_extraction import BagOfWords,TFIDF
from river.compose import Pipeline
from river.metrics import ClassificationReport, Accuracy
دعونا ننشئ خط أنابيب للتعلم الآلي ونقيس أيضًا أداء النموذج بناءً على دقته. يمكننا أخذ عينة من مجموعة بيانات المشاعر هنا وهي مجرد قائمة من المجموعات تتكون من النص والتسمية المرتبطة به. الهدف هو تصنيف النص في إحدى المشاعر ؛ سعيد أو حزين. يمكن أيضًا استيعاب البيانات من مصدر دفق. يمكن القيام بالشيء نفسه عن طريق قراءة البيانات من ملف csv ، ولكن في هذه الحالة ، يلزم تحويل إطار البيانات إلى قاموس باستخدام حزمة Pandas المعتادة.
import pandas as pd
df = pd.read_csv("emotion_dataset.csv")
# Convert to Format
df.to_dict(records)
# Convert to Tuple
df.to_records(index=False)
مجموعة البيانات
فيما يلي مجموعة بيانات المشاعر التي يمكننا استخدامها لمتابعة الخطوات:
data = [("My dreams have come true", "happy"),
("He is happy as a pig in mud", "happy"),
("Broke My Heart", "sad"),
("He jumped with joy", "happy"),
("Cut up about something", "sad"),
("Are you feeling down", "sad"),
("Friends, you made my day", "happy"),
("He walked away with heavy heart", "sad"),
("I'm so happy, I'm on cloud nine", "happy"),
("He is in sad state of mind", "sad"),
("You are on the of the world", "happy"),
("Why are you shedding tears", "sad"),
("She is walking over the moon", "happy"),
("She finds herself under the weather", "sad")]
نموذج التصنيف
سنقوم الآن بإنشاء خط أنابيب من مرحلتين ؛ مرحلة المحول والمقدر. بمجرد بناء خط الأنابيب ، يمكننا تصور ذلك باستخدام وظيفة الرسم.
pipe_nb = Pipeline(('vectorizer',BagOfWords(lowercase=True)),
('nb',MultinomialNB()))
pipe_nb.steps
نظرًا لأن البيانات يتم الحصول عليها في وقت التشغيل ، فسوف نلائم النموذج على البيانات واحدًا تلو الآخر. لهذا الغرض ، سوف نستخدم وظيفة .learn_one (x، y) أثناء التدريب. يمكننا محاكاة هذا من خلال التكرار عبر بياناتنا باستخدام حلقة for.
for text,label in data:
pipe_nb = pipe_nb.learn_one(text,label)
أوجد احتمالية التنبؤ
لاختبار النموذج على إدخال عينة ، نستخدم وظيفة توقع_واحد (). سيؤدي هذا إلى إرجاع الفئة التي ينتمي إليها إدخال العينة. إذا كنت تريد معرفة الاحتمال المرتبط ، يمكنك أيضًا استخدام الوظيفة توقع_بروبا_ون.
pipe_nb.predict_one('She is dancing with joy')
pipe_nb.predict_proba_one('She is dancing with joy')
مقياس أداء النموذج
بمجرد تدريب النموذج ، سنقوم بتقييم أداء النموذج باستخدام وظائف من الوحدة الفرعية للقياسات النهرية مثل الدقة وتقرير التصنيف وما إلى ذلك.
metric_accuracy = Accuracy()
for x,y in data:
y_predict_before = pipe_nb.predict_one(x)
# Check Acccuracy
metric_accuracy = metric_accuracy.update(y,y_predict_before)
pipe_nb = pipe_nb.fit_one(x,y)
print("Final Accuracy",metric_accuracy)
ضع في اعتبارك البيانات النموذجية التالية ، والتي سنستخدمها للتحقق من مدى ملاءمة نموذجنا للبيانات.
sample_data = ["You colour me happy",
"My friend cracked a smile to see me",
"He cried his eyes out",
“You are down in the dumps”]
y_actual = ["happy", "happy", "sad", "sad"]
دعنا ننتقل عبر بيانات العينة للتنبؤ بمخرجاتها.
y_predict = []
for i in sample_data:
result = pipe_nb.predict_one(i)
print("{}: Prediction: {}".format(i,result))
y_predict.append(result)
للحصول على نتيجة التصنيف في شكل تقرير تصنيف ، سنستخدم مجموعة بيانات اختبار العينة المذكورة أعلاه.
report = ClassificationReport()
for y_act, y_pred in zip(y_actual, y_predict):
report = report.update(y_act, y_pred)
report
هذا ممتع حقًا وسريع جدًا أيضًا. أليس كذلك؟ لقد استمتعت باستكشاف وظائفها. اتمنى ان تعجبك ايضا
اكتشاف المزيد من موقع الرمح . تقنية وأكثر
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.