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

Обсуждение, новости, материал и сплетни — все здесь https://t.me/CodeLabMLChat
Download Telegram
⚙️ Дальше применим Z-core стандартизацию к исходным данным:

scaler_zcore = StandardScaler() #Тут создаем объект
X_zcore = scaler_zcore.fit_transform(X) # тут обучаем и трансформируем данные X


⚙️ Обучаем модель линейной регрессии на стандартизированных данных:

model_zcore = LinearRegression() # Создаем объект линейной регресии
model_zcore.fit(X, y) # обучаем модель на стандартизированных данных и y
y_pred_zcore = model_zcore.predict(X_zcore) # Затем предсказываем


⚙️ Вычисляем метрику качества для стандартизированных данных:

mse_zcore = mean_squared_error(y, y_pred_zcore)
print('MSE для стандартизованных данных (Z-core): %.4f' % mse_zcore)
❤‍🔥2👍1🤓1
⚙️ Применяем MinMaxScaling:

scaler_minmax = MinMaxScaler()
X_minmax = scaler_minmax.fit_transform(X)


⚙️ Обучаем модель:

model_minmax = LinearRegression()
model_minmax.fit(X_minmax, y)
y_pred_minmax = model_minmax.predict(X_minmax)


⚙️ Вычисляем метрику качества для нормализованных данных:

mse_minmax = mean_squared_error(y, y_pred_minmax)
print('MSE для нормализованных данных (Min-Max Scaling): %.4f' %mse_minmax)
1❤‍🔥1
CodeLab
П И Ш Е М К О Д 🧑‍💻⚙️ Нам нужно будет построить модель, вычислить метрику качества (MSE) для исходных, нормализованных и стандартизованных данных. Выполнить (Min-Max Scaling и Z-core), затем снова вычислить метрику качества и, если она выросла — применить…
⚙️ Теперь, как уже писалось вот здесь, нам нужно сравнить метрики качества для двух трансформаций данных.

if mse_minmax < mse:
print('Метрика качества улучшилась после Min-Max Scaling.')
else:
print('Метрика качества не улучшилась после Min-Max Scaling.')
if mse_zcore < mse:
print('Метрика качества улучшилось после Z-core (Standardization).')
else:
print('Метрика качества не улучшилось после Z-core (Standardization).')


⚙️ Дальше идет визуализация графиков один графиков для исходных данных с линейной регрессией, второй для нормализованных данных с линейной регрессией, третий для стандартизованных данных с линейной регрессией):

plt.figure(figsize=(18, 6))

plt.subplot(1, 3, 1)
plt.scatter(X, y, color='blue', label='Исходные данные')
plt.plot(X, y_pred, color='red', label='Линейная регрессия (исходные данные)')
plt.title('Исходные данные и линейная регрессия')
plt.xlabel('X')
plt.ylabel('y')
plt.grid(True)
plt.legend()

# Нормализованные данные (Min-Max Scaling) и линейная регрессия
plt.subplot(1, 3, 2)
plt.scatter(X_minmax, y, color='green', label='Нормализованные данные (Min-Max Scaling)')
plt.plot(X_minmax, y_pred_minmax, color='orange', label='Линейная регрессия (Min-Max Scaling)')
plt.title('Нормализованные данные (Min-Max Scaling) и линейная регрессия')
plt.xlabel('X (нормализованный)')
plt.ylabel('y')
plt.grid(True)
plt.legend()

# Стандартизованные данные (Z-core) и линейная регрессия
plt.subplot(1, 3, 3)
plt.scatter(X_zcore, y, color='purple', label='Стандартизованные данные (Z-core)')
plt.plot(X_zcore, y_pred_zcore, color='magenta', label='Линейная регрессия (Z-core)')
plt.title('Стандартизованные данные (Z-core) и линейная регрессия')
plt.xlabel('X (стандартизованный)')
plt.ylabel('y')
plt.grid(True)
plt.legend()

plt.tight_layout()
plt.show()


⚙️ Вывод:

Исходный датасет X: [0.47189467 6.0558107  1.05857812 3.94111923 2.79860657]
Целевая переменная y: [[ 5.87071292]
[21.7874835 ]
[ 7.96166193]
[15.56482486]
[13.32796767]]
MSE для исходных данных: 0.9591
MSE для стандартизированных данных (Min-Max Scaling): 0.9591
MSE для нормализованных данных (Min-Max Scaling): 0.9591
Метрика качества улучшилась после Min-Max Scaling.
Метрика качества не улучшилось после Z-core (Standardization).
3
⚙️ Полный код:

import numpy as np
from matplotlib import pyplot as plt
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

np.random.seed(30)
X = 2 * np.random.randn(100, 1) + 3 # Признак X (нормальное распределение со средним 3 и стандартным отклонением 2)
y = 4 + 3 * X + np.random.randn(100, 1) # Целевая переменная y с шумом

print('Исходный датасет X: %s' % X[:5].flatten())
print('Целевая переменная y: %s' % y[:5].reshape(-1, 1))

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

mse = mean_squared_error(y, y_pred)
print('MSE для исходных данных: %.4f' % mse)

# Применяем Z-core (Standardization)
scaler_zcore = StandardScaler()
X_zcore = scaler_zcore.fit_transform(X)

# Построение модели на стандартизованных данных (Z-core)
model_zcore = LinearRegression()
model_zcore.fit(X_zcore, y)
y_pred_zcore = model_zcore.predict(X_zcore)

# Вычисление метрики качества (MSE) для стандартизованных данных (Z-core)
mse_zcore = mean_squared_error(y, y_pred_zcore)
print('MSE для стандартизованных данных (Z-core): %.4f' % mse_zcore)

# Применяем MinMaxScaling
scaler_minmax = MinMaxScaler()
X_minmax = scaler_minmax.fit_transform(X)

# Построение модели на нормализованных данных (Min-Max Scaling)
model_minmax = LinearRegression()
model_minmax.fit(X_minmax, y)
y_pred_minmax = model_minmax.predict(X_minmax)

# Вычисление метрики качества (MSE) для нормализованных данных (Min-Max Scaling)
mse_minmax = mean_squared_error(y, y_pred_minmax)
print('MSE для нормализованных данных (Min-Max Scaling): %.4f' % mse_minmax)

if mse_minmax < mse:
print('Метрика качества улучшилась после Min-Max Scaling.')
else:
print('Метрика качества не улучшилась после Min-Max Scaling.')

if mse_zcore < mse:
print('Метрика качества улучшилось после Z-core (Standardization).')
else:
print('Метрика качества не улучшилось после Z-core (Standardization).')

plt.figure(figsize=(18, 6))

plt.subplot(1, 3, 1)
plt.scatter(X, y, color='blue', label='Исходные данные')
plt.plot(X, y_pred, color='red', label='Линейная регрессия (исходные данные)')
plt.title('Исходные данные и линейная регрессия')
plt.xlabel('X')
plt.ylabel('y')
plt.grid(True)
plt.legend()

plt.subplot(1, 3, 2)
plt.scatter(X_minmax, y, color='green', label='Нормализованные данные (Min-Max Scaling)')
plt.plot(X_minmax, y_pred_minmax, color='orange', label='Линейная регрессия (Min-Max Scaling)')
plt.title('Нормализованные данные (Min-Max Scaling) и линейная регрессия')
plt.xlabel('X (нормализованный)')
plt.ylabel('y')
plt.grid(True)
plt.legend()

plt.subplot(1, 3, 3)
plt.scatter(X_zcore, y, color='purple', label='Стандартизованные данные (Z-core)')
plt.plot(X_zcore, y_pred_zcore, color='magenta', label='Линейная регрессия (Z-core)')
plt.title('Стандартизованные данные (Z-core) и линейная регрессия')
plt.xlabel('X (стандартизованный)')
plt.ylabel('y')
plt.grid(True)
plt.legend()

plt.tight_layout()
plt.show()
❤‍🔥21👍1
🖕
👍32🤯1🤡1
На практике гораздо
чаще применяются средняя абсолютная погрешность и средняя квадратиче-
ская погрешность
. Они определяются аналогичным образом (тут речь про абсолютные и квадратические погрешности ), за исключени-
ем того, что вместо сумм мы вычисляем средние значения. Таким образом,
средняя абсолютная погрешность — это среднее значение вертикальных
расстояний от точек до прямой, а средняя квадратическая погрешность — это
среднее значение квадратов этих же расстояний.
2
🧑‍💻📈 Выполняем задание Тайлера Дердена: у нас даны точки x и значения в этих точках y. Нужно нормализовать y с помощью z-core и построить график зависимости нормализованных значений от x (для построения графика нужно использовать plt.scatter(x, y_transformed)).

🔗 Импортируем нашу базу (блок кода ниже — это наше ДАНО):

import numpy as np
from matplotlib import pyplot as plt
from sklearn.preprocessing import StadardScaler

x = np.linspace(1, 10, num = 10)
y = np.array(
[1., 3., 4., 2., 10., 5., 5., 2., 5., 10.]
)


🔗 Так ну че тут, создаем массив из 10 значений от 1 до 10. ‼️ Тут важный момент есть, ведь третьим аргументов мы указываем num = 10, что означает, что на интервале от 1 до 10 будет создано 10 точек. Если мы третий аргумент не ставим (он не обязательный кстати), то значений будет 50 (по умолчанию так).
❤‍🔥2🥰1
⚙️ Дальше мы все знаем, ребята мы не глупые, создаем объект нормализации (Z-core стандартизации):

scaler = StandardScaler()

y_transformed = scaler.fit_transform(y.reshape(-1, 1)).reshape(-1)


‼️ Кстати, интересный момент: в конце второй строки сверху пишем в конце reshape(-1). Первый reshape нам нужен в связи с тем, что нам нужен двумерный массив (так требует StandardScaler). ⁉️ Воот, а зачем нам второй reshape?

-1 означает, что NumPy сам определит размерность по этой оси на основе данных и указанного размера по другой оси (в данном случае — 1).


🔗 Вот так будет выглядеть вывод, если в конце не ставить reshape(-1)

y_transformed = scaler.fit_transform(y.reshape(-1, 1))

#Вывод:
array([[-1.24656167],
[-0.57274455],
[-0.23583599],
[-0.90965311],
[ 1.78561537],
[ 0.10107257],
[ 0.10107257],
[-0.90965311],
[ 0.10107257],
[ 1.78561537]])


⁉️ Отвечаю на вопрос, зачем нам 'второй' reshape(-1): После того как мы преобразовали одномерный массив в двумерный, мы делаем обратное дейтсвие (чтобы мы могли строить график).

Также вместо reshape(-1) мы можем использовать flatten()


📈 Остается построить график и готово:

plt.figure(figsize=(8, 6))
plt.scatter(x, y_transformed, color='blue', label='Нормализованные данные')
plt.title('График зависимости нормализованных значений от x')
plt.xlabel('x')
plt.ylabel('y (нормализованный)')
plt.grid(True)
plt.legend()
plt.show()
❤‍🔥1🥰1
🧑‍💻 Всем здарова, пишу на ночь глядя, но ничего, хотя бы начнем!

Мы не раз еще будем возвращаться к Линейной регрессии, но пора бы пойти дальше:

П О Л И Н О М И А Л Ь Н А Я Р Е Г Р Е С С И Я
2🤯2🤓1
🧑‍💻 Всем здарова, начинаем воркать!

Полиномиальная регрессия — это метод регрессионного анализа, который используется для моделирования нелинейных зависимостей между независимой переменной x и зависимой переменной y. В отличие от линейной регрессии, где зависимость моделируется прямой линией, полиномиальная регрессия использует полиномы (например, квадратичные, кубические или более высоких степеней) для описания данных.


⚙️ Для начала, попробуем тривиальное преобразование y = x, затем x² и x³. После преобразований, нарисуем график, представляющий собой сумму 0.1x + 2.5x² + 0.5x³ — сложим функции с разными коэффициентами, за работу!

from matplotlib import pyplot as plt
import numpy as np

x =np.linspace(-10, 10, num = 100)

y = x

plt.plot(x, y)
plt.show()


Получили тривиальную зависимость y = x

⚙️ Тривиальное преобразование y = x — это простейшая форма зависимости, где значение y напрямую равно значению x
🥰2👍1🤯1👨‍💻1
📈 Теперь парабола — это вторая степень (или квадратичная зависимость)

from matplotlib import pyplot as plt
import numpy as np

x = np.linspace(-10, 10, num = 100)

y = x * x
plt.plot(x, y)
plt.show()


⚙️ Как вы заметили, y здесь не используется, можно его добавить и код будет выглядеть так:

from matplotlib import pyplot as plt
import numpy as np

x = np.linspace(-10, 10, num=100)

y = x * x x^2

plt.plot(x, y)
plt.show()
🥰2❤‍🔥1👍1🤯1🤓1
⚙️ Третья степень, друзья, продолжаем воркать! 📈 На этот раз делаем гиперболу

import numpy as np
from matplotlib import pyplot as plt

x = np.linspace(-10, 10, num = 100)

y = x * x * x
plt.plot(x, y)
plt.show()
🤯2❤‍🔥1👍1
⚙️ Теперь складываем все три функции и подставляем в формулу — эта + эта + эта

0.1x + 2.5x² + 0.5x³

import numpy as np
from matplotlib import pyplot as plt

x = np.linspace(-10, 10, num = 100)

y = x * x * x
plt.plot(x, 0.5 * x * x * x + 2.5 * x * x + 0.1 * x)
plt.show()
❤‍🔥2🤯1
В конце декабря 2024 года китайцы тихонько выкатывают DeepSeek-V3. Сразу о ней пишут мало, но спустя пару недель люди начинают понимать, что это бомба замедленного действия.

Середина января 2025 года. Дональд Трамп легким движением руки подписывает указ о снятии всех ограничении на развитие искусственного интеллекта и на весь мир заявляет о вливании $500 млрд в развитие отечественных нейросетей.

Эхо от его речей быстро дошло до Поднебесной и спустя пару дней один из крупнейших банков Китая делает мощную денежную инъекцию ($140 млрд) в развитие местной передовой ИИ-системы.

27 января красный дракон нанес мощный удар по белоголовому орлу: успех DeepSeek спровоцировал обвал фондового рынка США на $1 трлн., а акции Nvidia таяли на глазах — Хуанг лишился $600 млрд.

В ночь с 27 на 28 января в битву вступил Alibaba со своей моделью Qwen2.5-VL — универсальный солдат, способный выполнять множество задач на приемлемом уровне.

Вечером 28 января инфополе заполнила еще одна нейрока QWEN-MAX от Alibaba, которая умеет все и на бенчмарках уничтожает даже DeepSeek.

Сэм Альтман в Твиттере написал, что его впечатлила DeepSeek, но «OpenAI, ОЧЕВИДНО, будет поставлять гораздо лучшие модели». Что ж, на словах он Лев Толстой.
❤‍🔥21
🧑‍💻⚙️ Друзья, добрый вечер! Нашел я для вас прикольный код, начнем же разбирать!

⚙️ Импортируем привычные библиотеки (почти):

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


🔗 Хорошо, половину мы уже знаем, разберем неизвестные:

📈 У нас что-то новенькое — функция для разделения данных на обучающую и тестовую выборки:

from sklearn.model_selection import train_test_split


⚙️ Следующая библиотека — как раз наша полиномиальная регрессия (библиотека ниже преобразует данные в полиномиальные признаки (квадраты кубы, их мы рассматривали на этих днях))

from sklearn.preprocessing import PolynomialFeatures


🔗 Еще импортируем метрику качества r2_score, но ее мы уже прошли:

from sklearn.metrics import r2_score
❤‍🔥21🤓1👀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

🔗 y — зависимая переменная (также создаем двумерный массив 200 на 1)

plt.plot(X, y, 'b.')
plt.xlabel('X')
plt.ylabel('y')
plt.show()


завтра продолжим ... 💤
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯3🤓1👀1
⚙️ Друзья, привет! Продолжаем воркать:

📱 Мы импортировали библиотеку для разделения данных на обучающую и тестовую выборки,

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


🔗 Базово создаем модель линейной регрессии:

model = LinearRegression()
model.fit(x_train, y_train)
y_pred = model.predict(x_test)
print(r2_score(y_test, y_pred))


📈 Ну и под конец выводим новый график:

plt.plot(x_train, model.predict(x_train), color = 'red')
plt.plot(X, y, 'b.')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
Please open Telegram to view this post
VIEW IN TELEGRAM
2🤯1🤓1
📱📱 Друзья, нужен буст для канала, нам нужен лютейший визуал!

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