CodeLab
145 subscribers
538 photos
20 videos
159 links
Говорим просто о сложном

Обсуждение, новости, материал и сплетни — все здесь https://t.me/CodeLabMLChat
Download Telegram
📱📱 Друзья, нужен буст для канала, нам нужен лютейший визуал!

https://t.me/boost/pywithCodeLab
Please open Telegram to view this post
VIEW IN TELEGRAM
432
📱 Всем здарова, продолжаем воркать!

↗️ Первое, что касаемо этих двух строк ниже: почему мы во второй строке не применяем fit?

🔗 Потому что fit нужно вызывать только на обучающих данных, чтобы модель "научилась" на них. На тестовых данных мы применяем уже обученное преобразование (transform).

x_train_transformed = poly.fit_transform(x_train) # Обучается на тренировачных данных и сразу применяет преобразование ()

x_test_transformed = poly.transform(x_test) #


5⃣📊 Теперь продолжаем: строим модель Линейной регрессии и обучаем ее на преобразованных данных:

model = LinearRegression()
model.fit(x_train_transformed, y_train)


🧠 Ща вам объясню как это работает: x_train_transformed — это по сути наши преобразованные тренировочные данные (признаки X). Если вы вспомните, при создании объекта для генерации признаков Полиномиальной регрессии, мы поставили 2 степень, вот строчка:

poly = PolynomialFeatures(degree=2, include_bias=False) 


⚙️ После применения PolynomialFeatures(degree=2) к x_train данные выглядят как-то так:

[[1, 1], Первый столбец — исходные значения
[2, 4], Второй столбец — X² (Квадрат исходных значений)
[3, 9]]


📊 y_train — это целевые значения для тренировочных данных

📁 Подводим итог:

📇 modelfit(x_train_transformed, y_train) обучает модель на преобразованных тренировочных данных и находит зависимость между признаками (x_train_transformed) и целевой переменной (y_train), при этом, подбирая коэффициенты w₀, w₁, w₂

w₀ intercept (свободный член). это значение y, когда все признаки X, X² равны нулю, отвечает за смещение модели вдоль оси y, вверх или вниз

w₁ — коэффициент для X, показывает, как y изменяется при изменении X (отвечает за наклон, линейность зависимости)

w₂ коэффициент для X², показывает, как y изменяется при изменении X² (отвечает за кривизну (нелинейность зависимости)
Please open Telegram to view this post
VIEW IN TELEGRAM
4222111
🧑‍💻 Друзья, возможно, при первом впечатлении, становится непонятно, что тут происходит, поэтому скоро ждите памятку в закрепе 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
533
📱
Please open Telegram to view this post
VIEW IN TELEGRAM
22211
🪖
Please open Telegram to view this post
VIEW IN TELEGRAM
5221
Grok 3, господа 📱
Please open Telegram to view this post
VIEW IN TELEGRAM
1322
🧑‍💻🖥 Гайс, посты будут с утра и днем, хочу повторить метрики качества и до конца разберем Полиномиальную регрессию!
Please open Telegram to view this post
VIEW IN TELEGRAM
411
👨‍💻⚙️ Так, для начала повторим метрики качества:

0⃣ Импортируем:

import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error


1⃣ Создаем данные:

np.random.seed(42)
X = np.linspace(-3, 3, 100).reshape(-1, 1)
y = 0.5 * X**2 + X + 2 + np.random.normal(0, 1, (100, 1))


2⃣ Наши исходные данные преобразуем в полиномиальные признаки:

poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X)


3⃣ Создаем модель линейной регрессии, ее то мы и будем обучать на наших полиномиальных признаках

model = LinearRegression()
model.fit(X_poly, y)


4⃣ Получаем предсказанные данные:

y_pred = model.predict(X_poly)


5⃣ Вычисляем метрики качества:

r2 = r2_score(y, y_pred)
mae = mean_absolute_error(y, y_pred)
mse = mean_squared_error(y, y_pred)
rmse = np.sqrt(mse)


6⃣ Ну и сам вывод:

print(f"R²: {r2:.4f}")
print(f"MAE: {mae:.4f}")
print(f"MSE: {mse:.4f}")
print(f"RMSE: {rmse:.4f}")


7⃣ Касаемо метрик и вывода мы сейчас еще поговорим:

R²: 0.8657
MAE: 0.7167
MSE: 0.8118
RMSE: 0.9010


8⃣⚙️ Итак, начнем с R² (R-squared, коэффициент детерминации) — диапазон метрики от 0 до 1, и чем больше значение к 1, тем лучше. У нас R² практически 0.9, то есть, наша модель объясняет 'практически' 90% дисперсии (показатель разброса данных). У нас значение 0.7167, следовательно, модель предсказывает хорошо.

🔗 Сама метрика показывает, насколько хорошо модель объясняет дисперсию данных.


⁉️ Как искать? Для начала, считаем, насколько наша модель ошиблась в предсказаниях → сравниваем ее со средним всех исходных значений → чем ближе к 1, тем лучше, чем ближе к 0, тем модель бесполезнее.

0⃣📊 Идем дальше — MAE (Mean Absolute Error), средняя абсолютная ошибка. Показывает, насколько в среднем предсказания отклоняются от истинных значений. ⁉️Как понять, хороша ли наша модель? Чем меньше, тем лучше. У нас MAE = 0.7167, значит наша модель в среднем ошибается меньше чем не единицу. Диапазон у MAE — от 0 до ∞

⁉️ Как искать? Для каждого предсказания считаем разницу между реальным значением и предсказанным → берём модуль (чтобы не было отрицательных значений) → считаем среднее всех этих разниц.

🔟📁 Третья по счету метрика качества — MSE (Mean Squared Error, средняя квадратичная ошибка), диапазон — также от 0 до ∞. Чем меньше — тем лучше.

🔗 Учитывает квадраты ошибок, что делает её более чувствительной к выбросам


⁉️ Как искать? Для каждого предсказания считаем разницу между реальным значением и предсказанным → возводим эту разницу в квадрат (чтобы большие ошибки влияли сильнее) → считаем среднее всех этих квадратов

1⃣1⃣ RMSE (Root Mean Squared Error, корень из среднеквадратичной ошибки) — RMSE удобен тем, что возвращает ошибку в тех же единицах, что и исходные данные. То есть, если предсказания цен на квартиры даются в рублях, то RMSE тоже будет в рублях (в отличие от MSE, которая в рублях в квадрате).

⁉️ Как искать? Читаем, что у нас выше (я про MSE) → берём из него квадратный корень, чтобы вернуть в нормальные единицы. Проще говоря, находим MSE, берем корень из этого числа.
Please open Telegram to view this post
VIEW IN TELEGRAM
42111
CodeLab
📱 Всем здарова, продолжаем воркать! ↗️ Первое, что касаемо этих двух строк ниже: почему мы во второй строке не применяем fit? 🔗 Потому что fit нужно вызывать только на обучающих данных, чтобы модель "научилась" на них. На тестовых данных мы применяем…
6⃣🧠 Продолжаем воркать:

🔗 Последнее, что мы сделали — создали модель линейной регрессии и обучили ее на полиномиальных признаках.

📊 Теперь, предсказываем данные:

y_pred = model.predict(x_test_transformed)


7⃣⚠️ Выводим ошибки (в посте сверху был разбор)

r2 = r2_score(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred) # Средняя абсолютная ошибка
mse = mean_squared_error(y_test, y_pred) # Средняя квадратическая ошибка


8⃣📇 Далее, выводим наши ошибки и визуал:

plt.plot(X, y, 'b.')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Исходные данные')
plt.show()

print(f'R**2 score: {r2:.4f}')
print(f'MAE: {mae:.4f}')
print(f'MSE: {mse:.4f}')

plt.plot(x_test, y_test, 'b.', label = 'Тестовые данные')
plt.plot(x_test, y_pred, 'r.', label = 'Предсказанные значения')
plt.title('Реальные и предсказанные значения')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()


0⃣📁 Вывод коэффициентов модели:

print("Коэффициенты модели:", model.coef_)
print('Свободный член (intercept):', model.intercept_)


Визуализация предсказаний на новых данных
....

Продолжим завтра, я спать 🥱💤

🧑‍💻 Держите пока часть кода:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error

np.random.seed(43)

X = 6 * np.random.rand(200, 1) - 3
y = 0.8 * X**2 + 0.9 * X + 2 + np.random.randn(200, 1)

x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)

poly = PolynomialFeatures(degree = 2, include_bias = False)

'''
fit (изучение) используется только на обучающих данных;

transform: Применяет преобразование; в тестовых данных
нам нужно просто применить transform, поскольку параметры
рассчитали выше
'''

x_train_transformed = poly.fit_transform(x_train)
x_test_transformed = poly.transform(x_test)

model = LinearRegression()
model.fit(x_train_transformed, y_train)

y_pred = model.predict(x_test_transformed)

r2 = r2_score(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred) # Средняя абсолютная ошибка
mse = mean_squared_error(y_test, y_pred) # Средняя квадратическая ошибка

plt.plot(X, y, 'b.')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Исходные данные')
plt.show()


print(f'R**2 score: {r2:.4f}')
print(f'MAE: {mae:.4f}')
print(f'MSE: {mse:.4f}')


plt.plot(x_test, y_test, 'b.', label = 'Тестовые данные')
plt.plot(x_test, y_pred, 'r.', label = 'Предсказанные значения')
plt.title('Реальные и предсказанные значения')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()


print("Коэффициенты модели:", model.coef_)
print('Свободный член (intercept):', model.intercept_)
Please open Telegram to view this post
VIEW IN TELEGRAM
421
1
Друзья, полноценный пост будет завтра, сегодня попробую вам че нить написать интересное 🫡
Please open Telegram to view this post
VIEW IN TELEGRAM
4
6
Литерали лучший бой за мою жизнь, мы гордимся тобой ❤️
611
CodeLab
📱 Всем здарова, продолжаем воркать! ↗️ Первое, что касаемо этих двух строк ниже: почему мы во второй строке не применяем fit? 🔗 Потому что fit нужно вызывать только на обучающих данных, чтобы модель "научилась" на них. На тестовых данных мы применяем…
🧑‍💻Всем привет! Дописываем наконец часть кода, и я вам объясню че мы по итогу получили:

📊 Строим график предсказаний?

X_new = np.linspace(-3, 3, 200).reshape(200, 1)  # Создаем равномерные точки в диапазоне [-3, 3]
X_new_poly = poly.transform(X_new) # Применяем полиномиальное преобразование
y_new = model.predict(X_new_poly) # Предсказываем значения


📈 Дальше визуал:

plt.plot(X_new, y_new, "r-", linewidth=2, label="Predictions") # Линия предсказаний (красная потому что r)
plt.plot(x_train, y_train, "b.", label='Training points') # Обучающие данные (синие )
plt.plot(x_test, y_test, "g.", label='Testing points') # Тестовые данные (зеленые)

plt.xlabel("X")
plt.ylabel("y")
plt.legend()
plt.show()
Please open Telegram to view this post
VIEW IN TELEGRAM
6432
⚙️Так, подведем итоги:

0️⃣ Мы начали отсюда — заходим сюда

📊 Мы импортировали библиотеки, сгенерировали данные и создали два массива: один на 200 случайных чисел, другой — квадратичная функция.

1⃣ Дальше нам нужно разбить данные на обучающую и тестовую выборкиделаем это здесь

📂 Тут ничего необычного, просто делим данные на обучающую (80%) и тестовую (20%) выборки ➡️ создаем объект PolynomialFeatures (он нам нужен для дальнейшего преобразования входных данных в полиномиальные признаки) ➡️Обучаем и трансформируем тренировочные данные ➡️ # Только трансформируем данные для тестирования

2⃣ Обучаем модель линейной регрессии — тут

⚙️ Создаем объект линейной регрессии и обучаем ее на полиномиальных признаках ➡️предсказываем 🔤 на тестовых данных данных

3⃣ Оценка качества модели — тут

📇 Тут мы используем три разных метрики ➡️занимаемся визуалом нашей модели ➡️визуализируем предсказания на тестовых данных ➡️выводим коэффициенты модели (это наши найденные зависимости: coef_ – это коэффициенты при признаках β₁.. , intercept_ – это свободный член, который отвечает за смещение графика)

📊 То есть, если модель выдала:

print(model.coef_)   # [[1.5  0.7]]
print(model.intercept_) # [2.0]


‼️ Это означает, что мы получаем такое уравнение: y = 1.5 ⋅ X + 0.7 ⋅ X² + 2

🔵Коэффициенты (coef_): 1.5 при X, 0.7 при X²

🔵Свободный член (intercept_): 2.0

4⃣ Строим график предсказаний — тут

Что будет выводить⁉️

R**2 score: 0.8533
MAE: 0.8395
MSE: 1.0314


Коэффициенты модели: [[0.95958032 0.785119  ]]
Свободный член (intercept): [2.13459906]
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
311
‼️ Еще раз:

📊 График 1 исходных данных показывает — просто точки, которые мы сгенерировали с шумом (без предсказаний, только реальные значения)

📇 График 2 (Реальные и Предсказанные значения) показывает — сравнение настоящих y и предсказанных 🔤 на тестовых данных.

📈 График 3 полиномиальной регрессии показывает полиномиальную кривую на 200 точках
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
321