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
❤‍🔥2🥰1🤡1🤓1👨‍💻1👀1
🥰211
📱Йоу, всем воссап, начинаем воркать!

🧑‍💻 Разберем сейчас небольшой код, а дальше будем прошлые посты доделывать.

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

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures #Импортирует класс PolynomialFeatures; преобразование входных данных в полиномиальные признаки (возведение исходных признаков в разные степени)
from sklearn.linear_model import LinearRegression


📊 Дальше наши данные:

np.random.seed(0) #Начальное значение 
x = np.random.rand(100, 1) * 10 # массив x из 100 случайных чисел, равномерно распределенных в диапазоне от 0 до 1
y = 2.5 * x**2 - 3 * x + 5 + np.random.randn(100, 1) * 5 #Создает зависимость, добавляя случайный шум (нормальное распределение = 5


📈 Создаем полиномиальные признаки:

poly = PolynomialFeatures(degree=2)  # Степень полинома
x_poly = poly.fit(x) #Применяет преобразование к данным x, кароч теперь x_poly содержит полиномиальные обученные данные


📊 Обучаем нашу модель

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


📁 Предсказываем данные

x_fit = np.arange(0, 10, 0.1).reshape(-1, 1)
x_fit_poly = poly.transform(x_fit)
y_fit = model.predict(x_fit_poly)


📊
Визуал

plt.scatter(x, y, color='blue', label='Данные')
plt.plot(x_fit, y_fit, color='red', label='Полиномиальная регрессия')
plt.title('Полиномиальная регрессия')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
Please open Telegram to view this post
VIEW IN TELEGRAM
2111
CodeLab
⚙️ Друзья, привет! Продолжаем воркать: 📱 Мы импортировали библиотеку для разделения данных на обучающую и тестовую выборки, x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=2) 🔗 Базово создаем модель линейной регрессии:…
🖥 Так гайс, я немного изменил код, пора разбираться:

0⃣📱К библиотекам добавляем метрики качества: MAE, MSE, R²

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


1⃣📊 Нам нужны какие то данные, создадим два массива

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


📊 Первый x — 200 случайный чисел в диапазоне от -3 до 3 , тут давайте поподробнее:

⚙️ Изначально функция np.random.rand(200, 1) создает массив из 200 случайных чисел в диапазоне [0, 1] — каждое число будет от 0 до 1

📇 Затем мы умножаем на 6 → минимальное значение становится равным 0, максимальное — 6 (умножаем на диапазон [0, 1]) → [0, 6]

Вычитаем 3 из каждого числа в диапазоне [0, 6] → получаем [-3, 3]

📂 Второй массив является квадратичной функцией

2⃣🖥 Дальше визуал:

plt.plot(X, y, 'b.') 
plt.xlabel('X')
plt.ylabel('y')
plt.title('Исходные данные')
plt.show()
Please open Telegram to view this post
VIEW IN TELEGRAM
32111
👨‍💻 Продолжаем воркать

3⃣📈 Воспользуемся функцией train_test_split из библиотеки sklearn.model_selection, чтобы разбить наши данные на 📎обучающую выборку📎 и 📎тестовую выборку📎

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


Так, че тут происходит? У нас есть X (признаки, фичи), есть целевая переменная y.

🔗 test_size определяет какая доля используется для тестовой выборки (для оценки качества будущей модели), а какая для обучающей выборки (для обучения модели)

🔗 Еще есть random_state = 0.42 (значение пох какое, можете хоть 1) — начальное значение для генератора случайных чисел — проще говоря, наши точки будут сгенерированы один раз и при последующем выводе мы увидим точно такие же точки. Мы как то уже использовали подобную функцию в Numpy — random.seed, а наша функция из библиотеки Sklearn.

4⃣📊 Дальше нам нужно преобразовать данные в полиномиальные признаки степени 2:

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


🔗 Преобразуем обучающие данные:

x_train_transformed = poly.fit_transform(x_train)


🔗 Тоже самое, только теперь тестовые данные:

x_test_transformed = poly.transform(x_test)
Please open Telegram to view this post
VIEW IN TELEGRAM
21111
📱 че стелит
Please open Telegram to view this post
VIEW IN TELEGRAM
42111
🧠 «Умнейший ИИ на Земле» выкатят уже завтра: Илон Маск объявил о релизе Grok 3 в своём X/Twitter.

Никакой цензуры 🔞
Please open Telegram to view this post
VIEW IN TELEGRAM
5111
📱📱 Друзья, нужен буст для канала, нам нужен лютейший визуал!

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