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

Обсуждение, новости, материал и сплетни — все здесь https://t.me/CodeLabMLChat
Download Telegram
⚡️ DeepSeek убил весь американский рынок — минус ТРИЛЛИОН долларов за день.

Это почти в два раза больше всего российского рынка акций.
👍1🤯1
🧑‍💻 Друзья, вот полный код того, что мы разбирали последние уроки!

import numpy as np # для работы с массивами
from matplotlib import pyplot as plt # для визуализации данных
from sklearn.preprocessing import StandardScaler # для стандартизации данных (Z - score)
from sklearn.linear_model import LinearRegression # для построения линейной регрессии

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) # атрибут, занимает 4 байта памяти и хранит в себе числа с дробной частью

x = np.arange(len(raw_data)).reshape(-1,1) # создаем массив индексов от 0 до 18 (по кол-ву элементов raw_data)
# reshape(-1, 1) -- преобразует одномерный массив в двумерный
scaler = StandardScaler() # объект стандартизации
transformed_data = scaler.fit_transform(raw_data.reshape(-1, 1)).reshape(-1) # вычисляем среднее и стандартное отклонение, а затем применяем Z-score преобразование

reg_raw = LinearRegression().fit(x, raw_data) # создаем объект линейной регрессии и обучем модель на исходных данных
y_pred_raw = reg_raw.predict(x) # предсказывает значения для индексов X

reg_transformed = LinearRegression().fit(x, transformed_data) # создаем объект линейной регрессии и обучем модель на стандартизированных данных
y_pred_transformed = reg_transformed.predict(x) # предсказывает значения для индексов X

plt.figure(figsize = (14, 6)) # фигура для графиков

plt.subplot(1, 2, 1) # создает 1 график на 1 фигуре с 2 столбцами
plt.scatter(x, raw_data, color = 'blue', label = 'Z трансформация') # строим точки по координатам x и raw_data
plt.plot(x, y_pred_raw, color='orange', label='Линейная регрессия') # Линия регрессии
plt.title('Исходные данные регрессии')
plt.xlabel('индекс')
plt.ylabel('Z значение')
plt.legend()

plt.subplot(1, 2, 2)
plt.scatter(x, transformed_data, color='green', label='Z-трансформированные данные')
plt.plot(x, y_pred_transformed, color='orange', label='Линейная регрессия')
plt.title('Стандартизированные данные и регрессия')
plt.xlabel('Индекс')
plt.ylabel('Z-значение')
plt.legend()

plt.tight_layout() # улучшает расположение графиков
plt.show()
❤‍🔥1🤯1🤓1
👍1🤯1🤓1
2🥰2🤡1🤓1
💀⚙️ ИИ-индустрия сошла с ума — китайцы дропают нейронки каждый день. Ещё вчера DeepSeek обрушила фондовый рынок США — сегодня ей уже нет места на рынке.

Восстанавливаем всю хронологию:

38 дней назад релиз DeepSeek V3 — главная нейронка начала 25 года.

Неделю назад Трамп снял все ограничения на развитие ИИ и вложил, на минуточку, 500 МЛРД в развитие ИИ в Америке.

Четыре дня назад Китай ответил и банк вложил 1 ТРЛН юаней в свои нейронки.

Вчера из-за DeepSeek фондовый рынок США рухнул на 1,5 ТРЛН долларов — NVIDIA потеряла пятую часть стоимости компании, 600 МЛРД.

Ночью Alibaba нанесла первый удар — релиз Qwen2.5-VL.

Полчаса назад Alibaba на наших глазах обошла DeepSeek.

🙏 RIP GPT
3🤯1
⚙️ Итак, выкладываю последний пост по теме Z-core стандартизации касаемо нашего кода. Рассмотрим вывод наших данных: готовый код у вас уже есть, поэтому писать его еще раз я смысла не вижу. Возьмем буквально пару строчек для понимания:

0️⃣ Итак, у нас есть одномерный массив raw_data, содержащий 18 значений.

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)


1️⃣ Также, у нас есть массив индексов x (последовательность от 0 до длины raw_data, то есть, от 0 до 18 )

x = np.arrange(len(raw_data)).reshape(-1, 1)


‼️ По сути, на этом этапе у нас есть все для построения линейной регрессии, где каждый элемент x будет соответствовать индексу в raw_data
,

2️⃣ Далее, главный момент — применяем стандартизацию. Суть стандартизации в том, что происходит распределение данные со средним значением 0 и стандартным отклонением 1.

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


⚙️ Кстате, заметьте какую функцию мы вызываем (.fit_transform). То есть, к массиву raw_data применяем функцию 'обучения и трансформации'

3️⃣🌶 САМЫЙ ВАЖНЫЙ МОМЕНТ

⚙️ Что по итогу показывают наши данные и как они получаются:

⚙️ Для начала, выведем предсказания регрессии для исходных данных (это тип показывает как модель интерпретирует зависимость между индексами и значениями raw_data):

print(y_pred_raw) 

[ 0.36842105 0.94736842 1.52631579 2.10526316 2.68421053 3.26315789
3.84210526 4.42105263 5. 5.57894737 6.15789474 6.73684211
7.31578947 7.89473684 8.47368421 9.05263158 9.63157895 10.21052632
10.78947368]


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

print(y_pred_transformed)

[-9.08754215e-01 -8.07781525e-01 -7.06808835e-01 -6.05836146e-01
-5.04863456e-01 -4.03890766e-01 -3.02918077e-01 -2.01945387e-01
-1.00972697e-01 -7.45058060e-09 1.00972682e-01 2.01945372e-01
3.02918062e-01 4.03890751e-01 5.04863441e-01 6.05836131e-01
7.06808820e-01 8.07781510e-01 9.08754200e-01]


‼️ Мы сместили наши значения, вычли из них среднее и разделили на дисперсию — это и есть процесс 'сглаживания'. Z - core трансформация центрирует данные вокруг 0 и масштабирует их так, чтобы стандартное отклонение стало равным единице.


Если Z-score равен 0, то значение равно среднему значению.
Если Z-score положительный, то значение больше среднего.
Если Z-score отрицательный, то значение меньше среднего.
Чем больше абсолютное значение Z-score, тем дальше значение от среднего.
🤯2🥰1
🟰Z = (X−μ) / σ 🟰

z — Z-оценка;
x — оцениваемое значение (исходное);
μ — среднее значение;
σ — стандартное отклонение.


🔗 Допустим, берем первый элемент y_pred_raw (предсказанные значения для индексов X по формуле линейной регресии), у нас это:

y_pred_raw[0] = 0.36842105


🔗 Теперь возьмем первый элемент raw_data — это одномерный массив чисел (наши исходные данные)

raw_data[0] = 1 # первый элемент в массиве это единица
2
❤‍🔥1🤯1👀1
Теперь лайты, просто подставляем в формулу:

⚙️ За единицу у нас будет X (оцениваемое значение)
. ⁉️ Почему единица? Потому что мы берем первый элемент массива raw_data

Z = (1−μ) / σ — формула потихоньку собирается

⚙️ Дальше берем среднее значение (μ), можем вычислить примерно так:

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)

mean = np.mean(raw_data)
print(f'среднее: {mean}')

# Вывод: 5.5789475440979


⚙️ И остается нам вычисление стандартного отклонения:

# Вычисление стандартного отклонения
std_dev = np.std(raw_data)
print(f'Стандартное отклонение: {std_dev}')

# Вывод: 5.733702659606934


Z = (1 - 5.5789475440979) / 5.5789475440979

Z = -0.7986022
❤‍🔥3
⚙️ САМОЕ ВАЖНОЕ:

0️⃣ У нас есть массив исходных данных raw_data

1️⃣ Мы применяем Z-score преобразование к исходным данным, чтобы получить новые стандартизированные данные transformed_data. Эти данные имеют среднее значение 0 и стандартное отклонение 1.

2️⃣ Мы обучаем модель линейной регрессии на исходных данных и делаем предсказания для этих данных.

3️⃣ Мы обучаем модель линейной регрессии на Z-score преобразованных данных и делаем предсказания для этих данных.


import numpy as np # для работы с массивами
from matplotlib import pyplot as plt # для визуализации данных
from sklearn.preprocessing import StandardScaler # для стандартизации данных (Z - score)
from sklearn.linear_model import LinearRegression # для построения линейной регрессии

# Исходные данные
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) # атрибут, занимает 4 байта памяти и хранит в себе числа с дробной частью

# Вычисление среднего значения
mean = np.mean(raw_data)
print(f"Среднее: {mean}")

# Создаем массив индексов от 0 до 18 (по кол-ву элементов raw_data)
x = np.arange(len(raw_data)).reshape(-1, 1)

# Объект стандартизации
scaler = StandardScaler()

# Применяем Z-score преобразование
transformed_data = scaler.fit_transform(raw_data.reshape(-1, 1)).reshape(-1)

# Выводим Z-score преобразованные значения
print("Z-score преобразованные значения:")
print(transformed_data)

# Обучаем модель линейной регрессии на исходных данных
reg_raw = LinearRegression().fit(x, raw_data)
y_pred_raw = reg_raw.predict(x) # предсказывает значения для индексов X

# Обучаем модель линейной регрессии на стандартизированных данных
reg_transformed = LinearRegression().fit(x, transformed_data)
y_pred_transformed = reg_transformed.predict(x) # предсказывает значения для индексов X

# Визуализация результатов
plt.figure(figsize=(14, 6)) # фигура для графиков

# График для исходных данных
plt.subplot(1, 2, 1) # создает 1 график на 1 фигуре с 2 столбцами
plt.scatter(x, raw_data, color='blue', label='Исходные данные') # строим точки по координатам x и raw_data
plt.plot(x, y_pred_raw, color='orange', label='Линейная регрессия') # Линия регрессии
plt.title('Исходные данные регрессии')
plt.xlabel('индекс')
plt.ylabel('значение')
plt.legend()

# График для стандартизированных данных
plt.subplot(1, 2, 2)
plt.scatter(x, transformed_data, color='green', label='Z-трансформированные данные')
plt.plot(x, y_pred_transformed, color='orange', label='Линейная регрессия')
plt.title('Стандартизированные данные и регрессия')
plt.xlabel('Индекс')
plt.ylabel('Z-значение')
plt.legend()

plt.tight_layout() # улучшает расположение графиков
plt.show()

# Вывод предсказанных значений
print("Предсказанные значения для исходных данных:")
print(y_pred_raw)
print("\nПредсказанные значения для стандартизированных данных:")
print(y_pred_transformed)


⚙️ Выводы:

Среднее: 5.5789475440979

Z-score преобразованные значения:
[-0.7986022 -0.4497874 -0.6241948 -0.27538007 -0.6241948 0.7710641
-0.6241948 -0.10097269 -0.6241948 -0.6241948 -0.7986022 0.24784204
-0.10097269 -0.6241948 -0.10097269 1.8175085 0.7710641 -0.4497874
3.2127674 ]

Предсказанные значения для исходных данных:
[ 0.36842105 0.94736842 1.52631579 2.10526316 2.68421053 3.26315789
3.84210526 4.42105263 5. 5.57894737 6.15789474 6.73684211
7.31578947 7.89473684 8.47368421 9.05263158 9.63157895 10.21052632
10.78947368]

Предсказанные значения для стандартизированных данных:
[-9.08754215e-01 -8.07781525e-01 -7.06808835e-01 -6.05836146e-01
-5.04863456e-01 -4.03890766e-01 -3.02918077e-01 -2.01945387e-01
-1.00972697e-01 -7.45058060e-09 1.00972682e-01 2.01945372e-01
3.02918062e-01 4.03890751e-01 5.04863441e-01 6.05836131e-01
7.06808820e-01 8.07781510e-01 9.08754200e-01]
❤‍🔥2🥰2
🤯3👍1🤓1👨‍💻1
🧑‍💻 Здарова ребят, хочу пояснить касаемо этих двух графиков:

⚙️ Напомню, что на 2 графике у нас отображаются именно предсказанные значения модели линейной регрессии, обученной на стандартизованных данных — это первый момент.


y = mx + b — базовая (уже) формула линейной регрессии, где m — наклон, b — y-пересечение.

Дак вот, что меняется на графике?

1️⃣ На первом графике масштаб оси Y соответствует исходным данным.

2️⃣ На втором графике масштаб оси Y изменен, так как данные были стандартизированы. Теперь они находятся в диапазоне около [-3, 3]
________

1️⃣ Касаемо точек, на первом графике точки расположены в соответствии с исходными данными.

2️⃣ На втором графике точки На втором графике точки расположены в соответствии со стандартизированными данными.
________

1️⃣ Коэффициенты модели первой линейной регрессии зависят от масштаба исходных данных

2️⃣ Коэффициенты второй зависят от масштаба стандартизированных данных, который всегда будет иметь среднее значение 0 и стандартное отклонение 1
❤‍🔥1👍1🥰1👨‍💻1👀1
Коэффициенты второй зависят от масштаба стандартизированных данных, который всегда будет иметь среднее значение 0 и стандартное отклонение 1


Итак, добавлю вам 2 гистограммы для понимания среднего значения и стандартного отклонения.

1️⃣ На первой гистограмме мы видим значения массива raw_data с исходными данными. Черными крестиками показаны все наши точки массива raw_data.

Эта первая гистограмма показывает распределение значений из raw_data
:

⚙️ Столбец около 0 показывает, сколько значений в raw_data близко к 0.

⚙️ Столбец около 5 показывает, сколько значений в raw_data близко к 5.


2️⃣ На второй гистограмме показано распределение Z-score преобразованных значений:

⚙️ Столбец около -1 показывает, сколько значений в transformed_data имеют Z-score около -1.

⚙️ Столбец около 0 показывает, сколько значений в transformed_data близко к среднему значению (0).

⚙️ Столбец около 1 показывает, сколько значений в transformed_data имеют Z-score около 1.
❤‍🔥1🤯1
🧑‍💻⚙️⚙️⚙️ OpenAI СРОЧНО дропнет o3-mini сегодня — в компании паника невиданных масштабов из-за DeepSeek.

⚙️ Встречайте САМУЮ МОЩНУЮ нейронку в мире:

• Базовая o3 на 30% (!) сильнее o1 в коде.
• Сразу после первых тестов o3 обошла людей в тесте на AGI.
• o3 заняла 175 место в рейтинге самых сильных кодеров мира.
• Альтман уже пообещал сделать o3-mini доступной всем БЕСПЛАТНО.
1❤‍🔥1
🟰Сегодня ждите обнову навигации🟰
1❤‍🔥1
1👍1
🧑‍💻 Гайс, всем привет! Заебал я вас уже Z-core стандартизацией, но выбора у вас, увы, нет! Хочу просто показать, чем мы все это время занимались...

📊 Эти гистограммы идеально показывают распределение значений в наших массивах данных. Каждый столбик показывает количество значений, которые попадают в определенный диапазон.

📈 Первый график (исходные данные — raw_data)

▫️Столбец около 0 показывает, сколько значений в raw_data близко к 0.

▫️Столбец около 5 показывает, сколько значений в raw_data близко к 5.

📕Красная пунктирная линия обозначает среднее значение исходных данных.

📉 Второй график (стандартизированные данные — transformed_data):

▫️Столбец около -1 показывает, сколько значений в transformed_data имеют Z-score около -1.

▫️Столбец около 0 показывает, сколько значений в transformed_data близко к среднему значению (0).

▫️Столбец около 1 показывает, сколько значений в transformed_data имеют Z-score около 1.

📙 Оранжевые штриховые линии обозначают ±1 стандартное отклонение от среднего значения.
❤‍🔥2🤓2👨‍💻2👀2👍1
Среднее значение (μ) — это 'главное' значение распределения данных (Это наша красная пунктирная линия).

⚙️ Для стандартизированных данных среднее значение всегда равно 0, так как Z-score преобразование приводит данные к нулевому среднему значению.

📈 Центр гистограммы: ⬇️

⚙️ Среднее значение указывает на центр гистограммы. Если данные симметричны, то большинство значений будут расположены вокруг среднего значения.

📉 Расположение бинов: ⬇️

⚙️ Бины на гистограмме будут расположены относительно среднего значения. Например, у нас есть бин от -1 до 0, он будет находиться слева от среднего значения (0), а бин от 0 до 1 будет находиться справа от среднего значения.
1🥰1🤓1