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

Обсуждение, новости, материал и сплетни — все здесь https://t.me/CodeLabMLChat
Download Telegram
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
🧑‍💻Пишем еще один код:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.metrics import r2_score


📊 Касаемо генерации данных:

📱 Мы можем придумать любую нелинейную зависимость между 🔤 и 🔤.

⚙️ Линейная: y= 3x + 2

⚙️ Квадратичная: y = -2x² + 4x + 1

.... и так далее


⁉️Так, что тут происходит?

🔵Мы берем 1⃣0⃣ точек в диапазоне [-3. 3]

🔵Создаем зависимость y = ... (здесь, 2x³ — делает зависимость нелинейной,
-3x² — добавляет изгиб
x — линейная зависимоть
+5 — смещение вверх, чтобы
🔤 не был около 0)

🔵y += np.random.randn(100, 1) * 5 — в конце добавляем шум

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


🧠 Теперь делаем все тоже самое, но с применением функции:

def plot_poly_regression(X, y, degree):
poly = PolynomialFeatures(degree = degree)
X_poly = poly.fit_transform(X)

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


⚙️Шлифуем визуалом:

  r2 = r2_score(y, y_pred)
plt.scatter(X, y, color = 'blue', label = 'Исходные данные')
plt.plot(X, y_pred, color = 'blue', label = f'Полином {degree} - й степени (R)²={r2:.3f})')
plt.title(f'Полиномиальная регрессия (степень {degree})')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()

plot_poly_regression(X, y, 1)
plot_poly_regression(X, y, 2)
plot_poly_regression(X, y, 3)
plot_poly_regression(X, y, 5)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
433
Друзья, готовлю крупный крутецкий пост, наберитесь терпения 🙏🙏
Please open Telegram to view this post
VIEW IN TELEGRAM
653
🔤🔤🔤🌹🔤🪷 🔤🔤🌷🌸🔤🌹🔤

👨‍💻Сегодня разберем код для простой нейросетки, которая по входным признакам будет определять пол человека.

⁉️ Что мы имеем?

🔵2 входа (две переменные для входных данных) — Input Layer

🔵Скрытый слой из 2 нейронов (h1 и h2) — Hidden Layers

🔵Выходной слой с 1 нейроном (o1) — Output Layer

🔵Также у нас будет функция обучения (для настройки веса нашей сети)

0⃣📱 Нейросеть будет написана с 0, поэтому импортируем одну лишь библиотеку — Numpy

import numpy as np


1⃣ Функция активации — сигмоида

def sigmoid(x):
return 1 / (1 + np.exp(-x))


🛍 В общем, эта штука называется функцией активации. Мы подаем данные и она преобразует его в диапазон от 0 до 1. По итогу вычислений, чем больше x, тем ближе он к единице. Также и в обратную сторону — чем меньше x, тем ближе к 0. Если же x = 0, вероятность 50% (наша нейронка будет не уверена в ответе).

2⃣ Производная сигмоиды (главная функция для гладиентного спуска):

def deriv_sigmoid(x):
fx = sigmoid(x)
return fx * (1 - fx)


‼️ Вот тут надо подробнее:

⚙️ Эта функция вычисляет, насколько сильно x влияет на результат. 📊 Это нужно для корректировки веса во время обучения (сюда включаем градиентный спуск)...
Please open Telegram to view this post
VIEW IN TELEGRAM
322
21
211