كما ذكرنا لحل مشاكل تعلم الالة، هناك مجموعة من الخطوات التي نسير عليها لنصل الى افضل نموذج model وهو كالاتي

  1. تعريف المشكلة.
  2. تحليل و تجهيز البيانات.
  3. اختيار الخوارزمية.
  4. تدريب الخوازمية
  5. تقييم الخوارزمية.

تعريف المشكلة.

مجموعة بيانات بوسطن ترجع الى الى العام 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()

guest
0 تعليقات
Inline Feedbacks
اظهر كل التعليقات