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

Обсуждение, новости, материал и сплетни — все здесь https://t.me/CodeLabMLChat
Download Telegram
🌸🔤🔤🌷 🔤🔤 🔤🔤🔤🔤🌷

⚙️ Как я уже сказал, этот канал — это мои заметки на стероидах. Я буквально разжевываю все темы, которые сам изучаю и выкладываю здесь, ровно поэтому у тебя не составит труда это понять.

⚙️ Этот канал абсолютно для всех. Тут уже собрана внушительная база по решениям заданий со Stepik'a, общая база по Python, огромные разборы тем по алгоритмам, даже есть разборы задач на C. Короче говоря, соскучиться тебе здесь не дам!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥22
🔤🔤🔤🔤🔤🔤🌼

📱 НАКОНЕЦ! Мы победили Z-core стандартизацию и двигаемся дальше. На пути у нас min-max normalization.

⚙️ Важный момент: что предыдущий, что нынешний метод — это методы для приведения данных к общему масштабу. ⁉️ А в чем отличия?

⚙️ Ну, во первых, формулы разные (это потом). Во вторых, Z-core стандартизирует данные и приводит их к одному масштабу (притом среднее значение μ=0, стандартное отклонение σ=1). В то время как min-max normalization нормализирует данные а заданный диапазон (по сути также приводит данные к одному масштабу) обычно диапазон [0, 1] или [-1, 1],
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1🤯1🤓1👨‍💻1
🔬 Вот так выглядит формула для метода min-max normalization (каждый нормализированный элемент признака будет вычисляться по этой формуле)

▫️X — исходное значение признака.

▫️ X min — минимальное значение признака в выборке.

▫️X max — максимальное значение признака в выборке.

▫️X norm— нормализованное значение признака
.

Формула предполагает собой, что мы будем нормализовать данные в диапазон [0,1].
2❤‍🔥3👍3🥰2🤯1
🤯1🤡1🤓1👀1
Всем даров, начнем воркать и разберем такой код

⚙️ Разберем такой код:

from sklearn.preprocessing import MinMaxScaler
import numpy as np


🔗 Для начала, импортируем привычные нам библиотеки а также модуль MinMaxScaler()

raw_data = np.array([1., 3., 2., 4., 2., 10., 2., 5., 2., 2., 1., 7., 5., 2., 5., 16., 10., 3., 24.], dtype=np.float32) #датасет привычный

print('Сырой датасет: %s' % raw_data[:8])

transformed_data = MinMaxScaler().fit_transform(raw_data.reshape(-1, 1)).reshape(-1) # Обучаем модель + нормализуем данные

print('MIN-MAX scale датасет: %s' % transformed_data[:8])


⚙️ По итогу, мы применяем MinMaxScaler нормализацию и обучаем модель на этих данных.

⚙️ Вывод:

Сырой датасет: [ 1.  3.  2.  4.  2. 10.  2.  5.]
MIN-MAX scale датасет: [0. 0.08695652 0.04347826 0.13043478 0.04347826 0.39130437
0.04347826 0.17391305]
👍2🤯1🤓1👨‍💻1
⚙️ Еще один код для понимания того, как происходит нормализация:

⁉️ Кстати, мы применили reshape(-1, 1), что это вообще такое? В нашем случае мы применяем reshape(-1, 1), потому что на вход ожидается двумерный массив.

Reshape в контексте машинного обучения — это процесс изменения формы массива без изменения его содержимого. Основная идея состоит в том, чтобы изменить многомерный массив в другую форму, сохраняя при этом общее количество элементов.


raw_data = np.array([1., 3., 2., 4., 2., 10., 2., 5., 2., 2., 1., 7., 5., 2., 5., 16., 10., 3., 24.], dtype=np.float32) #датасет привычный

print('Исходный датасет: %s' % raw_data)

from sklearn.preprocessing import MinMaxScaler

transformed_data = MinMaxScaler().fit_transform(raw_data.reshape(-1, 1))

transformed_data


🔗 Вот еще пример:

⚙️ Здесь мы преобразуем одномерный массив в двумерный:


import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6])
reshaped_arr = arr.reshape(2, 3)

print(reeshaped_arr)
🤯3👍1🥰1👨‍💻1👀1
❤‍🔥1🤯1🤓1
П И Ш Е М К О Д

🧑‍💻⚙️ Нам нужно будет построить модель, вычислить метрику качества (MSE) для исходных, нормализованных и стандартизованных данных. Выполнить (Min-Max Scaling и Z-core), затем снова вычислить метрику качества и, если она выросла — применить найденную трансформацию ко входным данным перед тем, как подавать а вход модели.
❤‍🔥2🤯1
0️⃣ Импортируем базовые библиотеки:

▫️numpy — для генерации данных

▫️matplotlib.pyplot — визуал

▫️sklearn.preprocessing (MinMaxScaler, StandardScaler) — для нормализации (в диапазон [0, 1]) и стандартизации (Z-core normalization, среднее — 0, стандартное отклонение — 1) , соответственно

▫️LinearRegression — модель линейной регрессии из sklearn.linear_model

▫️MSE — среднеквадратичная ошибка из sklearn.metrics

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
2🤯1
⚙️1️⃣ Дальше идет такая поебень, с которой я сидел щас разбирался:

np.random.seed(42)
X = 2 * np.random.randn(100, 1) + 3
y = 4 + 3 * X + np.random.randn(100, 1)


⁉️ Что тут происходит?

Разберем первую строчку 🟰np.random.seed(30)🟰 — выражение означает, что генератор случайных чисел запускается и генерирует ту же последовательность чисел, что и раньше.

⁉️ Почему 30 в скобках? — Да в целом без разницы, что там в скобках, хоть 1 поставьте. Число в скобках это стартовый ключ генератора, то есть, мы задаем начало последовательности и при повторном запуске числа будут идентичны.

⚙️ Идем дальше, строка — 🟰X = 2 * np.random.randn(100, 1) + 3🟰. Мы создаем массив из 100 элементов (матрица 100 × 1). Каждый элемент базировано распределен по стандартному распределению (среднее значение 0 и стандартное отклонение 1). 👨‍💻 Но, как вы видите, мы сначала умножаем на 2 (это стандартное отклонение), а затем, к каждому элементу прибавляем 3 — это смещает среднее значение распределения до 3, при этом сохраняя стандартное отклонение равным 2.

⚙️ Последняя строка —🟰 y = 4 + 3 * X + np.random.randn(100, 1)🟰 ‼️ Вот тут важный момент — мы умножаем каждый элемент вектора X на 3 и тут создается линейная зависимость между X и y. Также прибавляем 4 (сдвиг всех значений вверх на 4 единицы). В конце добавляем шум (просто случайное отклонение)
1👍1🤯1
👍21🤯1
2️⃣ Друзья, добрый день! Воркаем дальше:

⚙️ Мы вчера написали и разобрали несколько строчек:

np.random.seed(42)
X = 2 * np.random.randn(100, 1) + 3
y = 4 + 3 * X + np.random.randn(100, 1)


⚙️ Теперь выведем, что получается:

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


🔗 Пару моментов:

⁉️ Что делает flatten?

▫️Исходный массив: [[1, 2, 3], [4, 5, 6]] (форма (2, 3)) (массив просто рандомный, к нашему это не относится). После применения функции flatten массив будет [1, 2, 3, 4, 5, 6] (форма (6,))

▫️Я специально написал сначала flatten, потом reshape для понимания.

Flatten: Автоматически преобразует данные в одномерный вектор.

Reshape: Позволяет задать любую форму, но требует указания размеров.


import numpy as np

data = np.array([[1, 2, 3], [4, 5, 6]])

flattened = data.flatten() # [1, 2, 3, 4, 5, 6]

reshaped = data.reshape(6) # [1, 2, 3, 4, 5, 6]


▫️А что касаемо нашего вывода (первые строки в начале поста):

Исходный датасет X: [0.47189467 6.0558107  1.05857812 3.94111923 2.79860657]
Целевая переменная y: [[ 5.87071292]
[21.7874835 ]
[ 7.96166193]
[15.56482486]
[13.32796767]]


⁉️⚙️ Что такое %s? Дак вот, оно заменяет местро в строке на строковое значение типа string. Вот возьмем наш случай: у нас %s подставляет значение переменной в строку.

print('Исходный датасет X: %s' % X[:5].flatten()) 
print('Целевая переменная y: %s' % y[:5].reshape(-1, 1))
1❤‍🔥1
⚙️ Дальше база: обучаем модель и вычисляем метрику качества (MSE) для исходных данных и y:

model = LinearRegression()

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

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


🔗 Вывод метрики качества MSE:

MSE для исходных данных: 0.9591


⁉️🔗 Что такое %.4f? Заменяет %.4f на значение переменной, округленное до 4 знаков после запятой.Вот пример:

name = "knownasgod"
age = 21
print("Имя: %s, Возраст: %d" % (name, age))

#Вывод: Имя: knownasgod, Возраст: 21
❤‍🔥22🤯2
⚙️ Дальше применим 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