كما ذكرنا لحل مشاكل تعلم الالة، هناك مجموعة من الخطوات التي نسير عليها لنصل الى افضل نموذج model وهو كالاتي
- تعريف المشكلة.
- تحليل و تجهيز البيانات.
- اختيار الخوارزمية.
- تدريب الخوازمية
- تقييم الخوارزمية.
تعريف المشكلة.
مجموعة بيانات بوسطن ترجع الى الى العام 1970 حيث تم تجميع اسعار(MEDV) مجموعة من 506 بيت من مدينة بوسطن مع 13 عامل اخر لوصف البيت مثل: عدد الغرف في البيت و معدل الجريمة في المنطقة (CRIM) ومساحة رقعة المباني للمنطقة (ZN) و تركيز غاز الاكسجين في الجو(NOX) و نسبة السود في المدينة!!!! (B) وغيرها.
نستطيع استنتاج من تلك البيانات انها مشكلة انحدار regression وان المطلوب هو توقع سعر البيوت بناءا على تلك المتغيرات.
تحليل و تجهيز البيانات.
اولا نحتاج الى الى تحميل المكتبات التي نستخدمها و مجموعة البيانات
تشغيلimport numpy as np import pandas as pd from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt from sklearn import datasets boston = datasets.load_boston()
توفر مكتبة scikit learn او اختصارا sklearn العديد من مجموعات البيانات المشهورة التي نستطيع استخدامها ومنها مجموعة بيانات بوسطن Boston ويتم تحميلها كما بالكود.
لبداية فهم البيانات نحتاج ان نعرض عينة من البيانات و ملخص عنها
تشغيلfeature_names = boston.feature_names boston_df = pd.DataFrame(boston.data, columns = boston.feature_names) boston_df['PRICE'] = boston.target print(boston_df.head()) print("-----------------------------------------------------------------") print("-----------------------------------------------------------------") print("-----------------------------------------------------------------") print("Summary of dataset: ") print(boston_df.info()) print("-----------------------------------------------------------------") print(boston_df.describe())
عدد القياسات في تلك المسألة كبير 13 متغير، وقد يوجد منها من لا يؤثر على سعر السكن وبالتالي استخدامه يؤثر بالسلب على النموذج. لمعرفة اسة من تلك المتغيرات يتناسب مع السعر نستخدم معامل الارتباط correlation.
معامل الارتباط Correlation
هو احد المعاملات الاحصائية التي تستنتج العلاقة بين المتغيرات بناءا على مجموعة من البيانات المتوفرة. تكون قيم معامل الارتباط من -1 : 1
كلما كانت القيمة قريبة من 1 مثل 0.7
او 0.9
تعني انه هناك علاقة طردية قوية بين المتغيرات. واذا كانت القيم قريبة من -1 مثل -0.7
او -0.9
تكون علاقة عكسية قوية. اما اذا كانت قيم معامل الارتباط قريبة من الصفر تكون العلاقة ضعيفة.
نستطيع استعراض معامل الارتباط بين المتغيرات بما فيها السعر باستخدام اطار البيانات Dataframe من مكتبة pandas كالاتي:
تشغيلcorr = boston_df.corr() corr.style.background_gradient(cmap='coolwarm').set_precision(2)
نلاحظ ان معامل الارتباط بين بعض المتغيرات و السعر(PRICE) اعلى من غيرها كالاتي
- LSTAT: معامل الارتباط
-0.74
- RM: معامل الارتباط
0.7
- PTRATIO: معامل الارتباط
-0.51
بالطبع هناك بعض المتغيرات التي معامل الارتباط فيها قوي مثل TAX و NOX لكن في هذا الدرس سوف نكتفي فقط بالمتغيرات التي قيمتها اعلى من 0.5 او اقل من -0.5.
نقوم باستخدام مخطط التشتت لرسم العلاقة بين تلك المتغيرات و السعر كالاتي:
تشغيلfiltered_features = ['LSTAT', 'RM', 'PTRATIO'] price = boston_df['PRICE'] for i, col in enumerate(filtered_features): plt.subplot(1, len(filtered_features) , i+1) X = boston_df[col] y = price plt.scatter(X, y, marker='o') #plt.title("Variation in House prices") plt.xlabel(col) plt.ylabel('House prices') plt.figure(figsize=(20, 5)) plt.show()
نجهز بيانات التدريب والاختبار من مجموعة البيانات المتاحة كالاتي
تشغيلX = boston_df[filtered_features] y = boston_df['PRICE'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.35, random_state=1)
تستخدم الدالة train_test_split
الى تقسيم البيانات بطريقة عشوائية (حتى تكون البيانات موزعة بشكل عادل بين مجموعة التدريب ومجموعة الاختبار) و بنسبة محددة (35% في هذا المثال). البيانات التي ترجعها دالة train_test_split
منقسمة الى 4 اجزاء
- X_train : هي قياسات التدريب اي بيانات كل من LSTAT و RM و PTRATIO لمجموعة بيانات التدريب .
- ْX_test : هي قياسات التدريب اي بيانات كل من LSTAT و RM و PTRATIO لمجموعة بيانات الاختبار.
- y_train: هي نتائج التدريب اي سعر السكن لمجموعة بيانات التدريب.
- y_test: هي نتائج التدريب اي سعر السكن لمجموعة بيانات الاختبار.
اختيار وتدريب الخوارزمية*
سنحاول اختبار عدد من خوازميات الانحدار المشهورة لمعرفة ايهما يحقق افضل نتائج لنختاره
نموذج linear regression
هو احد النماذج الاحصائية الذي يستخدم في عملية الانحدار regression
تشغيلfrom sklearn.linear_model import LinearRegression from sklearn.metrics import r2_score regressor = LinearRegression() regressor.fit(X_train, y_train) prediction = regressor.predict(X_test) print('Coefficient of determination: ', r2_score(y_test, prediction)) plt.scatter(y_test, prediction, marker='o') plt.xlabel('Actual Prices in 1000$') plt.ylabel('Predicted Prices in 1000$') plt.show()
تسهل علينا مكتبة sklearn
تدريب واختبار النماذج. تستخدم الدالة fit
لتدريب وانشاء النموذج.
بعد تدريب النموذج نقوم باستخدام بيانات الاختبار X_test
لنرى ماذا سوف يتنبأ النموذج وذلك عن طريق
الدالة predict
. لنرى كفاءة النموذج نقارن بين النتائج التى توقعها النموذج و نتائج الاختبار الصحيحة y_test
.
لمعرفة كفاءة النموذج نستخدم الدالة r2_score
التي تمثل معامل التحديد.
معامل التحديد R 2
معامل التحديد Coefficient of determination او R 2 هو احد الطرق الاحصائية التي نستطيع بها تحديد كفاءة نماذج الانحدار حيث انه يحدد نسبة التباين بين متغيريين وهما في حالتنا: النتيجة التي يتوقعها النموذج prediction و نتيجة الاختبار y_test وتكون النتيجة بين 0 : 1
كلما كان المتغير قريب من 1 تكون كفاءة النموذج اعلى
لاظهار العلاقة بين النتائج الاي يتوقعها النموذج و النتائج الصحيحة للاختبار نقوم بعرض البيانات (x,y) على مخطط التشتت scatter كما بالكود بالاعلى.
نموذج Decision Tree Regressor
هو احد نماذج الانحدار التي تعتمد على فكرة شجرة القرار لاستخراج الناتج
تشغيلfrom sklearn.tree import DecisionTreeRegressor from sklearn.metrics import r2_score regressor = DecisionTreeRegressor() regressor.fit(X_train, y_train) prediction = regressor.predict(X_test) print('Coefficient of determination: ', r2_score(y_test, prediction)) plt.scatter(y_test, prediction, marker='o') plt.xlabel('Actual Prices in 1000$') plt.ylabel('Predicted Prices in 1000$') plt.show()