في نافذة الطباعة اختر «حفظ كملف PDF» كوجهة.
تعلم الآلة، الأسبوع 5
صنف عينة جديدة بسؤال أقرب K من جيرانها، ثم ابن النموذج وقيمه واضبطه باستخدام scikit-learn.
StandardScaler، وبيان سبب حاجة المسافة إليهKNeighborsClassifier، ثم قراءة مصفوفة الالتباس (confusion matrix) والدقة (accuracy) والضبط (precision) والاستدعاء (recall)الأسبوع 5 من الخطة
| الجزء | ما نفعله | الزمن |
|---|---|---|
| 1 | الفكرة، ومثال محلول يدويا | 30 دقيقة |
| 2 | الدفتر 1: التحجيم، والتدريب، والتقييم | 25 دقيقة |
| 3 | اختيار K بطريقة الكوع | 10 دقائق |
| 4 | الدفتر 2 على iris، والأخطاء، ومشروعك | 20 دقيقة |
| 5 | تمارين مع الإجابات، ثم الخلاصة | 35 دقيقة |
الجزء 1
المدخلات المتشابهة لها تسميات متشابهة
| المصطلح | في بيانات iris |
|---|---|
الخصائص X | طول السبلة (sepal)، وعرض السبلة، وطول البتلة (petal)، وعرض البتلة (سم) |
التسمية (label) y | النوع: 0 setosa، و1 versicolor، و2 virginica |
| مجموعة التدريب (training set) | الأزهار التي يخزنها النموذج |
| نقطة الاستعلام (query) | زهرة جديدة نريد معرفة نوعها |
| K | عدد الجيران الذين يصوتون، وهو n_neighbors في scikit-learn |
fit إلى فعله)x صف تدريب، وq نقطة الاستعلام، وn عدد الخصائصيدويا
تسع أزهار iris حقيقية، وخاصيتان: طول البتلة وعرض البتلة بوحدة سم. الزهرة الجديدة هي (4.7, 1.7).
| الزهرة | النوع | (الطول، العرض) |
|---|---|---|
| F1 | setosa | (1.4, 0.2) |
| F2 | versicolor | (4.7, 1.6) |
| F3 | versicolor | (5.0, 1.7) |
| F4 | versicolor | (5.1, 1.6) |
| F5 | versicolor | (4.9, 1.5) |
| الزهرة | النوع | (الطول، العرض) |
|---|---|---|
| F6 | virginica | (4.9, 1.8) |
| F7 | virginica | (4.8, 1.8) |
| F8 | virginica | (5.0, 1.5) |
| F9 | virginica | (5.1, 1.8) |
الفرق = الزهرة ناقص نقطة الاستعلام، للطول وللعرض
| الزهرة | الفروق | مربع المسافة |
|---|---|---|
| F1 | -3.30, -1.50 | 10.89 + 2.25 = 13.14 |
| F2 | 0, -0.10 | 0 + 0.01 = 0.01 |
| F3 | +0.30, 0 | 0.09 + 0 = 0.09 |
| F4 | +0.40, -0.10 | 0.16 + 0.01 = 0.17 |
| F5 | +0.20, -0.20 | 0.04 + 0.04 = 0.08 |
| الزهرة | الفروق | مربع المسافة |
|---|---|---|
| F6 | +0.20, +0.10 | 0.04 + 0.01 = 0.05 |
| F7 | +0.10, +0.10 | 0.01 + 0.01 = 0.02 |
| F8 | +0.30, -0.20 | 0.09 + 0.04 = 0.13 |
| F9 | +0.40, +0.10 | 0.16 + 0.01 = 0.17 |
| الترتيب | الزهرة | النوع | المسافة d |
|---|---|---|---|
| 1 | F2 | versicolor | √0.01 = 0.100 |
| 2 | F7 | virginica | √0.02 = 0.141 |
| 3 | F6 | virginica | √0.05 = 0.224 |
| 4 | F5 | versicolor | √0.08 = 0.283 |
| 5 | F3 | versicolor | √0.09 = 0.300 |
الجزء 2
التحجيم، والتقسيم، والتدريب، والتقييم
https://colab.research.google.com/github/
tirthajyoti/Machine-Learning-with-Python/blob/
master/Classification/KNN_Classification.ipynbimport pandas as pd
import numpy as np
url = ("https://raw.githubusercontent.com/"
"tirthajyoti/Machine-Learning-with-Python/"
"master/Datasets/Classified%20Data")
df = pd.read_csv(url, index_col=0)
df.info()WTT، PTI، ...)TARGET CLASS، وقيمه 0 و1StandardScaler تحجيم كل خاصية إلى متوسط 0 (mean) وانحراف معياري 1 (standard deviation)، فيصبح لكل خاصية صوت عادلالصف 0 من WTT: x = 0.913917، والمتوسط 0.949682، والانحراف المعياري 0.289490
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(df.drop('TARGET CLASS', axis=1))
scaled_features = scaler.transform(df.drop('TARGET CLASS', axis=1))
df_feat = pd.DataFrame(scaled_features, columns=df.columns[:-1])
df_feat.head()from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
scaled_features, df['TARGET CLASS'], test_size=0.50, random_state=101)
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train, y_train)
pred = knn.predict(X_test)print(confusion_matrix(y_test, pred))
| التنبؤ 0 | التنبؤ 1 | |
|---|---|---|
| الفعلي 0 | 233 | 17 |
| الفعلي 1 | 24 | 226 |
الجزء 3
طريقة الكوع
error_rate = []
for i in range(1, 60):
knn = KNeighborsClassifier(n_neighbors=i)
knn.fit(X_train, y_train)
pred_i = knn.predict(X_test)
error_rate.append(np.mean(pred_i != y_test))نسبة الخطأ على 500 صف اختبار
| K | نسبة الخطأ | الصفوف الخاطئة |
|---|---|---|
| 1 | 0.082 | 41 |
| 2 | 0.094 | 47 |
| 5 | 0.054 | 27 |
| 11 | 0.048 | 24 |
| 24 | 0.046 | 23 |
الجزء 4
150 عينة، وثلاثة أنواع
from sklearn.datasets import load_iris
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['class'] = iris.target
df['class name'] = iris.target_names[iris['target']]
df.head()
sns.pairplot(df)x_train, x_test, y_train, y_test = train_test_split(
iris.data, iris.target, test_size=0.2, random_state=0)
model = KNeighborsClassifier()
model.fit(x_train, y_train)
model.score(x_test, y_test)predicted_class = model.predict([[5.6, 4.4, 1.2, 0.4]])
print(predicted_class)
print(iris.target_names[predicted_class[0]])يسردهم model.kneighbors: الخمسة كلهم من setosa، والتصويت 5 مقابل 0
| الجار | النوع | المسافة |
|---|---|---|
| (5.7, 4.4, 1.5, 0.4) | setosa | 0.3162 |
| (5.8, 4, 1.2, 0.2) | setosa | 0.4899 |
| (5.2, 4.1, 1.5, 0.1) | setosa | 0.6557 |
| (5.4, 3.9, 1.7, 0.4) | setosa | 0.7348 |
| (5.7, 3.8, 1.7, 0.3) | setosa | 0.7937 |
confusion_matrix(y_test, model.predict(x_test))
| التنبؤ setosa | التنبؤ versicolor | التنبؤ virginica | |
|---|---|---|---|
| setosa | 11 | 0 | 0 |
| versicolor | 0 | 12 | 1 |
| virginica | 0 | 0 | 6 |
قبل التمارين
predict: فهي تحتاج إلى [[...]]"Classified Data" في Colab من مجلد لا يحتويهمشروع فريقك
KNeighborsClassifier وتنبأ بمجموعة الاختبارclassification_reportالجزء 5
نحو 30 دقيقة، والإجابات تلي كل مهمة
نحو 10 دقائق
الإجابات
| الترتيب | الزهرة | النوع | مربع المسافة |
|---|---|---|---|
| 1 | F9 | virginica | 0.0025 |
| 2 | F3 | versicolor | 0.0125 |
| 3 | F4 | versicolor | 0.0225 |
| 4 | F6 | virginica | 0.0425 |
| 5 | F8 | virginica | 0.0725 |
الإجابات
نحو 5 دقائق
| التنبؤ 0 | التنبؤ 1 | |
|---|---|---|
| الفعلي 0 | 238 | 12 |
| الفعلي 1 | 12 | 238 |
نحو 5 دقائق
لخاصية واحدة القيم الخمس 4, 6, 8, 10, 12
نحو 10 دقائق
model.score(x_test, y_test)[[6.0, 2.9, 4.5, 1.5]] واطبع اسم نوعهاmodel.kneighbors عليها: كيف صوت جيرانها الخمسة؟الإجابات
| السؤال | الإجابة |
|---|---|
نوع [6.0, 2.9, 4.5, 1.5] | versicolor |
| الجيران الخمسة | 4 versicolor، و1 virginica |
| أقرب جار | (6.1, 3, 4.6, 1.4)، والمسافة 0.2000 |
| النتيجة 1.0 عند K = | 1 و4، ومن 6 إلى 15 |
| النتيجة 0.9667 عند K = | 2 و3 و5 |
Mahmoud Abas|التصنيف بخوارزمية أقرب الجيران (KNN)