Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Реалізація k-NN | Класифікатор K-NN
Класифікація з Python

bookРеалізація k-NN

KNeighborsClassifier

Реалізація методу k-найближчих сусідів є досить простою. Необхідно лише імпортувати та використати клас KNeighborsClassifier.

Після імпорту класу та створення об'єкта класу наступним чином:

# Importing the class
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=3)

Потрібно передати йому тренувальні дані за допомогою методу .fit():

knn.fit(X_scaled, y)

На цьому все! Тепер можна передбачати нові значення.

y_pred = knn.predict(X_new_scaled)

Масштабування даних

Однак пам'ятайте, що дані мають бути масштабовані. Для цього зазвичай використовується StandardScaler:

Необхідно обчислювати xˉ\bar x (середнє значення) та ss (стандартне відхилення) на тренувальній вибірці за допомогою методів .fit() або .fit_transform(). Цей крок гарантує, що параметри масштабування отримані саме з тренувальних даних.

Коли у вас є тестова вибірка для прогнозування, потрібно використовувати ті ж xˉ\bar x та ss для попередньої обробки цих даних за допомогою .transform(). Така послідовність важлива, оскільки забезпечує однакове масштабування тестових даних і тренувальної вибірки, що зберігає коректність прогнозів моделі.

# Importing the class
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
# Calculating x̄ and s and scaling `X_train`
X_train_scaled = scaler.fit_transform(X_train)
# Scaling `X_test` with x̄ and s calculated in the previous line
X_test_scaled = scaler.transform(X_test)

Якщо використовувати різні xˉ\bar x та ss для тренувальної та тестової вибірок, точність прогнозів, ймовірно, погіршиться.

Приклад

Розглянемо простий приклад, у якому потрібно передбачити, чи сподобається людині фільм «Зоряні війни VI» на основі її оцінок для «Зоряних війн IV» та «Зоряних війн V». Дані взято з The Movies Dataset з додатковою попередньою обробкою. Вважається, що людині подобається «Зоряні війни VI», якщо вона оцінила його більше ніж на 45).

Після навчання моделі зробимо прогнози для двох осіб із тестової вибірки. Перша особа оцінила «Зоряні війни IV» та «Зоряні війни V» як 5 і 5 відповідно, а друга — як 4.5 та 4.

123456789101112131415161718192021222324252627
from sklearn.neighbors import KNeighborsClassifier from sklearn.preprocessing import StandardScaler import numpy as np import pandas as pd import warnings warnings.filterwarnings('ignore') df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/starwars_binary.csv') # Dropping the target column and leaving only features as `X_train` X_train = df.drop('StarWars6', axis=1) # Storing target column as `y_train`, which contains 1 (liked SW 6) or 0 (didn't like SW 6) y_train = df['StarWars6'] # Test set of two people X_test = np.array([[5, 5], [4.5, 4]]) # Scaling the data scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) # Building a model and predict new instances knn = KNeighborsClassifier(n_neighbors=13).fit(X_train, y_train) y_pred = knn.predict(X_test) print(y_pred)
copy
question mark

Які з наведених нижче назв класів із бібліотеки scikit-learn використовуються для реалізації класифікатора k-найближчих сусідів та для масштабування ознак під час підготовки даних для k-NN?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 4

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 4.17

bookРеалізація k-NN

Свайпніть щоб показати меню

KNeighborsClassifier

Реалізація методу k-найближчих сусідів є досить простою. Необхідно лише імпортувати та використати клас KNeighborsClassifier.

Після імпорту класу та створення об'єкта класу наступним чином:

# Importing the class
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=3)

Потрібно передати йому тренувальні дані за допомогою методу .fit():

knn.fit(X_scaled, y)

На цьому все! Тепер можна передбачати нові значення.

y_pred = knn.predict(X_new_scaled)

Масштабування даних

Однак пам'ятайте, що дані мають бути масштабовані. Для цього зазвичай використовується StandardScaler:

Необхідно обчислювати xˉ\bar x (середнє значення) та ss (стандартне відхилення) на тренувальній вибірці за допомогою методів .fit() або .fit_transform(). Цей крок гарантує, що параметри масштабування отримані саме з тренувальних даних.

Коли у вас є тестова вибірка для прогнозування, потрібно використовувати ті ж xˉ\bar x та ss для попередньої обробки цих даних за допомогою .transform(). Така послідовність важлива, оскільки забезпечує однакове масштабування тестових даних і тренувальної вибірки, що зберігає коректність прогнозів моделі.

# Importing the class
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
# Calculating x̄ and s and scaling `X_train`
X_train_scaled = scaler.fit_transform(X_train)
# Scaling `X_test` with x̄ and s calculated in the previous line
X_test_scaled = scaler.transform(X_test)

Якщо використовувати різні xˉ\bar x та ss для тренувальної та тестової вибірок, точність прогнозів, ймовірно, погіршиться.

Приклад

Розглянемо простий приклад, у якому потрібно передбачити, чи сподобається людині фільм «Зоряні війни VI» на основі її оцінок для «Зоряних війн IV» та «Зоряних війн V». Дані взято з The Movies Dataset з додатковою попередньою обробкою. Вважається, що людині подобається «Зоряні війни VI», якщо вона оцінила його більше ніж на 45).

Після навчання моделі зробимо прогнози для двох осіб із тестової вибірки. Перша особа оцінила «Зоряні війни IV» та «Зоряні війни V» як 5 і 5 відповідно, а друга — як 4.5 та 4.

123456789101112131415161718192021222324252627
from sklearn.neighbors import KNeighborsClassifier from sklearn.preprocessing import StandardScaler import numpy as np import pandas as pd import warnings warnings.filterwarnings('ignore') df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/starwars_binary.csv') # Dropping the target column and leaving only features as `X_train` X_train = df.drop('StarWars6', axis=1) # Storing target column as `y_train`, which contains 1 (liked SW 6) or 0 (didn't like SW 6) y_train = df['StarWars6'] # Test set of two people X_test = np.array([[5, 5], [4.5, 4]]) # Scaling the data scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test) # Building a model and predict new instances knn = KNeighborsClassifier(n_neighbors=13).fit(X_train, y_train) y_pred = knn.predict(X_test) print(y_pred)
copy
question mark

Які з наведених нижче назв класів із бібліотеки scikit-learn використовуються для реалізації класифікатора k-найближчих сусідів та для масштабування ознак під час підготовки даних для k-NN?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 4
some-alt