Найти в Дзене
Аналитика данных

Machine Learning VS Задача* 1 класс. Петерсон – 3 часть

Задача со звёздочкой, по-этому всё серьёзно. Вооружаемся: python, Jupyter notebook, машинное обучение: Открываем ноутбук, пишем... import pandas as pd import numpy as np from sklearn.linear_model import LinearRegression from sklearn.tree import DecisionTreeRegressor from sklearn.ensemble import RandomForestRegressor from sklearn.neighbors import KNeighborsRegressor from sklearn.svm import SVR data = {'Feature1': [5, 9, 7], 'Target': [4, 6, np.nan], 'Feature2': [1, 3, 2]}
df = pd.DataFrame(data) df.info() print("Исходный датафрейм:")
display(df) Т.к. данных мало :) , то обойдёмся без тестовых данных. X = df[['Feature1', 'Feature2']] # Фичи
y = df['Target'] # Таргет
# Убираем последнюю строку из данных для обучения
X_train = X.iloc[:-1] # Все строки, кроме последней
y_train = y.iloc[:-1] # Все строки, кроме последней
X_test¹ = X.iloc[[-1]] # Последняя строка (предсказание) ¹ X_test – это не тестовая выборка, просто по традиции называется text, и уже боевая часть для предсказания. И
Оглавление

*Как найти число в средней клетке?

Рисунок к задаче из учебника
Рисунок к задаче из учебника

Задача со звёздочкой, по-этому всё серьёзно. Вооружаемся: python, Jupyter notebook, машинное обучение:

  • Модель 1: Линейная регрессия
  • Модель 2: Дерево решений
  • Модель 3: Случайный лес
  • Модель 4: Метод k-ближайших соседей (KNN)
  • Модель 5: Метод опорных векторов (SVR)

Кодинг

Открываем ноутбук, пишем...

Импортируем библиотеки:

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.neighbors import KNeighborsRegressor
from sklearn.svm import SVR

Моделируем исходные данные задачи

data = {'Feature1': [5, 9, 7], 'Target': [4, 6, np.nan], 'Feature2': [1, 3, 2]}
df = pd.DataFrame(data)

Смотрим, что получилось

df.info()
Вывод df.info()
Вывод df.info()

Выводим датафрейм в виде таблицы

print("Исходный датафрейм:")
display(df)
Вывод display(df)
Вывод display(df)

Разделяем данные на фичи и таргет

Т.к. данных мало :) , то обойдёмся без тестовых данных.

X = df[['Feature1', 'Feature2']] # Фичи
y = df['Target'] # Таргет

# Убираем последнюю строку из данных для обучения
X_train = X.iloc[:-1] # Все строки, кроме последней
y_train = y.iloc[:-1] # Все строки, кроме последней
X_test¹ = X.iloc[[-1]] # Последняя строка (предсказание)

¹ X_test – это не тестовая выборка, просто по традиции называется text, и уже боевая часть для предсказания.

Ответ к задаче

Интересно будет сравнить предсказания моделей с правильным ответом, поэтому заводим переменную:

correct_answer = 5

Добавляем в код модели

# Модель 1: Линейная регрессия

model_lr = LinearRegression()
model_lr.fit(X_train, y_train)
y_pred_lr = model_lr.predict(X_test)
y_pred_lr = np.round(y_pred_lr).astype(int) # Округляем до целого числа
error_lr = abs(y_pred_lr[0] - correct_answer) # Ошибка

# Модель 2: Дерево решений

model_dt = DecisionTreeRegressor(random_state=42)
model_dt.fit(X_train, y_train)
y_pred_dt = model_dt.predict(X_test)
y_pred_dt = np.round(y_pred_dt).astype(int) # Округляем до целого числа
error_dt = abs(y_pred_dt[0] - correct_answer) # Ошибка

# Модель 3: Случайный лес

model_rf = RandomForestRegressor(random_state=42)
model_rf.fit(X_train, y_train)
y_pred_rf = model_rf.predict(X_test)
y_pred_rf = np.round(y_pred_rf).astype(int) # Округляем до целого числа
error_rf = abs(y_pred_rf[0] - correct_answer) # Ошибка

# Модель 4: Метод k-ближайших соседей (KNN)

model_knn = KNeighborsRegressor(n_neighbors=2)
model_knn.fit(X_train, y_train)
y_pred_knn = model_knn.predict(X_test)
y_pred_knn = np.round(y_pred_knn).astype(int) # Округляем до целого числа
error_knn = abs(y_pred_knn[0] - correct_answer) # Ошибка

# Модель 5: Метод опорных векторов (SVR)

model_svr = SVR(kernel='linear')
model_svr.fit(X_train, y_train)
y_pred_svr = model_svr.predict(X_test)
y_pred_svr = np.round(y_pred_svr).astype(int) # Округляем до целого числа
error_svr = abs(y_pred_svr[0] - correct_answer) # Ошибка

Результаты

# Создаем датафрейм с результатами предсказаний и ошибками
results = pd.DataFrame({'Модель': ['Линейная регрессия', 'Дерево решений', 'Случайный лес', 'KNN', 'SVR'],
'Предсказание': [y_pred_lr[0], y_pred_dt[0], y_pred_rf[0], y_pred_knn[0], y_pred_svr[0]],
'Отклонение от правильного ответа': [error_lr, error_dt, error_rf, error_knn, error_svr]})
# Выводим результаты в виде таблицы
display(results)
Результаты
Результаты

Как видно предсказательные модели лажают. Задачки из 1 класса им пока не по плечу. В очередной раз восстание машин откладывается :)