English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تعلم خوارزمية الت拟合 الخطي العريض والرسم البياني الخطي في Python

عادةً ما يتم تقسيم مشاكل التنبؤ في التعلم الآلي إلى نوعين: التنبؤ والتصنيف.

بشكل بسيط، التنبؤ هو التنبؤ بالعدد، بينما التصنيف هو وضع علامة على البيانات وتصنيفها.

هذا المقال يشرح كيفية القيام بتصفية البيانات الأساسية باستخدام بايثون وكيفية تحليل أخطاء نتائج التصفية.

في هذا المثال، يتم إنشاء 500 نقطة باستخدام وظيفة ثنائية ومزيج عشوائي، ثم محاولة تفصيل البيانات باستخدام تفاضلية من درجات 1، 2، و100.

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

كود كما يلي:

import matplotlib.pyplot as plt 
import numpy as np 
import scipy as sp 
from scipy.stats import norm 
from sklearn.pipeline import Pipeline 
from sklearn.linear_model import LinearRegression 
from sklearn.preprocessing import PolynomialFeatures 
from sklearn import linear_model 
''''' بيانات إنشاء ''' 
x = np.arange(0, 1, 0.002) 
y = norm.rvs(0, size=500, scale=0.1) 
y = y + x**2 
''''' 均方误差根 ''' 
def rmse(y_test, y): 
 return sp.sqrt(sp.mean((y_test - y) ** 2)) 
''''' 与均值相比的优秀程度,介于[0~1]。0表示不如均值。1表示完美预测.这个版本的实现是参考scikit-learn官网文档 ''' 
def R2(y_test, y_true): 
 return 1 - ((y_test - y_true)**2).sum() / ((y_true - y_true.mean())**2).sum() 
''''' 这是Conway&White《机器学习使用案例解析》里的版本 ''' 
def R22(y_test, y_true): 
 y_mean = np.array(y_true) 
 y_mean[:] = y_mean.mean() 
 return 1 - rmse(y_test, y_true) / rmse(y_mean, y_true) 
plt.scatter(x, y, s=5) 
degree = [1,2,100] 
y_test = [] 
y_test = np.array(y_test) 
for d in degree: 
 clf = Pipeline([('poly', PolynomialFeatures(degree=d)), 
     ('linear', LinearRegression(fit_intercept=False))]) 
 clf.fit(x[:, np.newaxis], y) 
 y_test = clf.predict(x[:, np.newaxis]) 
 print(clf.named_steps['linear'].coef_) 
 print('rmse=%.2f, R2=%.2f, R22=%.2f, clf.score=%.2f' % 
  (rmse(y_test, y), 
  R2(y_test, y), 
  R22(y_test, y), 
  clf.score(x[:, np.newaxis], y)))  
 plt.plot(x, y_test, linewidth=2) 
plt.grid() 
plt.legend(['1','2','100'], loc='upper left') 
plt.show() 

نتائج تشغيل البرنامج كما يلي:

[-0.16140183  0.99268453]
rmse=0.13, R2=0.82, R22=0.58, clf.score=0.82
[ 0.00934527 -0.03591245  1.03065829]
rmse=0.11, R2=0.88, R22=0.66, clf.score=0.88
[  6.07130354e-02  -1.02247150e+00   6.66972089e+01  -1.85696012e+04
......
-9.43408707e+12  -9.78954604e+12  -9.99872105e+12  -1.00742526e+13
-1.00303296e+13  -9.88198843e+12  -9.64452002e+12  -9.33298267e+12
  -1.00580760e+12]
rmse=0.10, R2=0.89, R22=0.67, clf.score=0.89
الcoef_ المظهر هو معامل المعادلة التربيعية. مثل النتيجة التربيعية المرة الأولى
y = 0.99268453x -0.16140183
هنا يجب أن نلاحظ هذه النقاط:
1、تحليل الأخطاء.
للتحليل التنبؤي، العناصر المهمة في الخطأ هي الجذر التربيعية للخطأ المتوسط (RMSE) و R-المربع (R2).
RMSEهي متوسط مربعات الجذر التربيعية لخطأ التنبؤ. هذا النوع من القياس شائع جدًا (طريقة تقييم مسابقة Netflix التعلم الآلي)، وهو طريقة ل权衡 الكمية.
R2الطريقة هي مقارنة القيمة المتوقعة مع الحالة التي يتم فيها استخدام المعدل فقط، لمعرفة مدى تحسينها. عادة ما تكون هذه النطاقات بين (0،1). 0 تعني أنه لا يفيد حتى التنبؤ بشيء، ولكن يأخذ المعدل مباشرة، بينما 1 تعني أن جميع التنبؤات تتطابق بشكل مثالي مع النتائج الحقيقية.
طرق حساب R2 تختلف قليلاً من وثيقة إلى أخرى. مثل في هذا المقال، يتم تنفيذ وظيفة R2 بناءً على وثائق موقع scikit-learn، وهي متطابقة مع نتائج clf.score.
بينما تنفيذ وظيفة R22 مأخوذة من كتاب Conway في كتاب《تحليل الحالات الممكنة في التعلم الآلي》,الفرق أنه يستخدم نسبة رابطين RMSE لتحديد R2.
نحن نرى أن درجة المعادلة التربيعية هي 1، على الرغم من أن الترجيح ليس جيدًا جدًا، يمكن أن يصل R2 إلى 0.82.提高了二次多项ية إلى 0.88. بينما زادت درجة إلى 100 مرة، زاد R2 فقط إلى 0.89.
2、التوافق الزائد.
استخدام المعادلة التربيعية 100 مرة كتجسيد، النتائج بالفعل أفضل بعض الشيء، ولكن قدرة النموذج في التنبؤ سيئة للغاية.
ولاحظ أن قيم معادلات التجميع التربيعية تحتوي على الكثير من القيم الكبيرة، حتى تصل إلى 10^12.
في هذا السياق، قمنا بتعديل الكود لاستبعاد آخر 2 عينة من مجموعة التدريب من بين 500 عينة. ومع ذلك، تستمر الاختبارات في اختبار جميع 500 عينة.
clf.fit(x[:498, np.newaxis], y[:498)]
نتائج التجميع التربيعي بعد التعديل كالتالي:

[-0.17933531  1.0052037 ]
الخطأ الجذري المعياري = 0.12, R2 = 0.85, R22 = 0.61, clf.score=0.85
[-0.01631935  0.01922011  0.99193521]
الخطأ الجذري المعياري = 0.10, R2 = 0.90, R22 = 0.69, clf.score=0.90
...
الخطأ الجذري المعياري = 0.21, R2 = 0.57, R22 = 0.34, clf.score=0.57
فقط بفقدان آخر 2 عينة تدريبية، تحولت التنبؤات للخط الأحمر (نتيجة التجميع التربيعي 100 مرة) بشكل كبير، وانخفض R2 بشكل كبير إلى 0.57.
ومع ذلك، رأينا أن معادلة التربيعية 1 و2 مرة رفعت R2 قليلاً.
هذا يعني أن المعادلة التربيعية العالية المرات تفترض بيانات التدريب بشكل كبير، بما في ذلك الكثير من الضوضاء، مما يؤدي إلى فقدان قدرتها على التنبؤ باتجاه البيانات تمامًا. كما رأينا سابقًا، كانت القيم العددية للمعاملات في المعادلة التربيعية 100 مرة كبيرة بشكل لا يصدق.
المبدأ الأساسي هو إضافة مجموع القيم المطلقة لجميع معادلات التجميع التربيعية أو مجموع القيم المربعة (الترقيض L2) إلى نموذج العقوبة، مع تحديد معامل العقوبة w، لتجنب إنتاج هذه المعاملات المشوهة.
هذه الفكرة تطبق في طرق مثل Ridge Regression (استخدام الترقيض L2)، Lasso Method (استخدام الترقيض L1)، Elastic Net (استخدام الترقيض L1+L2)، وتجنب التكيف الزائد بشكل فعال. لمزيد من المعلومات يمكن الرجوع إلى المواد ذات الصلة.
نرى في هذا المثال باستخدام تعليمات Ridge Regression كيفية فعالية تطبيق 100 مرة للمعادلة التربيعية.
clf = Pipeline([('poly', PolynomialFeatures(degree=d)),
                    ('linear', linear_model.Ridge ())])
clf.fit(x[:400, np.newaxis], y[:400)]

النتائج كالتالي:

[ 0.                          0.75873781]
الخطأ الجذري المعياري = 0.15, R2 = 0.78, R22 = 0.53, clf.score = 0.78
[ 0.                          0.35936882  0.52392172]
rmse=0.11, R2=0.87, R22=0.64, clf.score=0.87
[  0.00000000e+00  2.63903249e-01  3.14973328e-01  2.43389461e-01
   1.67075328e-01 1.10674280e-01 7.30672237e-02 4.88605804e-02
   ......
   3.70018540e-11 2.93631291e-11 2.32992690e-11 1.84860002e-11
   1.46657377e-11]
rmse=0.10, R2=0.90, R22=0.68, clf.score=0.90
يمكن رؤية أن معاملات المعادلة الأسية 100 أصبحت صغيرة جدًا. معظمها قريب من الصفر.
بالإضافة إلى ذلك، يجب الانتباه إلى أن استخدام نماذج العقوبات مثل Ridge Regression قد يقلل قليلاً من قيمة R2 للمتغيرات الخطية الأولية والثانية.
ومع ذلك، هذا النموذج، حتى إذا تم استخدامه 100 مرة من الأسس المتعددة، في تدريب 400 عينة، وتنبؤ 500 عينة، ليس فقط أقل خطأ R2، بل يتمتع أيضًا بقدرة تنبؤية ممتازة.

هذا هو نهاية محتوى هذا المقال، نأمل أن يكون قد ساعدكم في التعلم، ونأمل أيضًا أن تدعموا دليل النفخ.

بيان: محتوى هذا المقال تم جمعه من الإنترنت، ويتمتع ملكية حقوق الطبع والنشر للمالك الأصلي، ويتم جمعه من قبل المستخدمين عبر الإنترنت بشكل متعاوني وتم تحميله بشكل مستقل، ويتمتع هذا الموقع بملكية حقوق الملكية، ولا يتم تعديل المحتوى بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية متعلقة بذلك. إذا كنت قد وجدت محتوى يشتبه في انتهاك حقوق النسخ، فنرجو منك إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # بـ @) لإبلاغنا، وقدم الأدلة ذات الصلة، وسيتم حذف المحتوى المزعوم الذي يشتبه في انتهاك حقوق النسخ فورًا.

سيحبك أيضًا