🧑💻 Друзья, вот полный код того, что мы разбирали последние уроки!
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
💀⚙️ ИИ-индустрия сошла с ума — китайцы дропают нейронки каждый день. Ещё вчера DeepSeek обрушила фондовый рынок США — сегодня ей уже нет места на рынке.
Восстанавливаем всю хронологию:
• 38 дней назад релиз DeepSeek V3 — главная нейронка начала 25 года.
• Неделю назад Трамп снял все ограничения на развитие ИИ и вложил, на минуточку, 500 МЛРД в развитие ИИ в Америке.
• Четыре дня назад Китай ответил и банк вложил 1 ТРЛН юаней в свои нейронки.
• Вчера из-за DeepSeek фондовый рынок США рухнул на 1,5 ТРЛН долларов — NVIDIA потеряла пятую часть стоимости компании, 600 МЛРД.
• Ночью Alibaba нанесла первый удар — релиз Qwen2.5-VL.
• Полчаса назад Alibaba на наших глазах обошла DeepSeek.
🙏 RIP GPT
Восстанавливаем всю хронологию:
• 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 значений.
1️⃣ Также, у нас есть массив индексов x (последовательность от 0 до длины raw_data, то есть, от 0 до 18 )
‼️ По сути, на этом этапе у нас есть все для построения линейной регрессии, где каждый элемент x будет соответствовать индексу в raw_data,
2️⃣✅ Далее, главный момент — применяем стандартизацию. Суть стандартизации в том, что происходит распределение данные со средним значением 0 и стандартным отклонением 1.
⚙️ Кстате, заметьте какую функцию мы вызываем (.fit_transform). То есть, к массиву raw_data применяем функцию 'обучения и трансформации'
3️⃣🌶 САМЫЙ ВАЖНЫЙ МОМЕНТ
⚙️ Что по итогу показывают наши данные и как они получаются:
⚙️ Для начала, выведем предсказания регрессии для исходных данных (это тип показывает как модель интерпретирует зависимость между индексами и значениями raw_data):
⚙️ Выводим предсказания линейной регрессии для стандартизированных данных:
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 по формуле линейной регресии), у нас это:
🔗 Теперь возьмем первый элемент raw_data — это одномерный массив чисел (наши исходные данные)
z — Z-оценка;
x — оцениваемое значение (исходное);
μ — среднее значение;
σ — стандартное отклонение.
🔗 Допустим, берем первый элемент y_pred_raw (предсказанные значения для индексов X по формуле линейной регресии), у нас это:
y_pred_raw[0] = 0.36842105
🔗 Теперь возьмем первый элемент raw_data — это одномерный массив чисел (наши исходные данные)
raw_data[0] = 1 # первый элемент в массиве это единица
❤2
✅ Теперь лайты, просто подставляем в формулу:
⚙️ За единицу у нас будет X (оцениваемое значение). ⁉️ Почему единица? Потому что мы берем первый элемент массива raw_data
Z = (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 преобразованных данных и делаем предсказания для этих данных.
⚙️ Выводы:
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
🧑💻 Здарова ребят, хочу пояснить касаемо этих двух графиков:
y = mx + b — базовая (уже) формула линейной регрессии, где m — наклон, b — y-пересечение.
Дак вот, что меняется на графике?
1️⃣ На первом графике масштаб оси Y соответствует исходным данным.
2️⃣ На втором графике масштаб оси Y изменен, так как данные были стандартизированы. Теперь они находятся в диапазоне около [-3, 3]
________
1️⃣ Касаемо точек, на первом графике точки расположены в соответствии с исходными данными.
2️⃣ На втором графике точки На втором графике точки расположены в соответствии со стандартизированными данными.
________
1️⃣ Коэффициенты модели первой линейной регрессии зависят от масштаба исходных данных
2️⃣ Коэффициенты второй зависят от масштаба стандартизированных данных, который всегда будет иметь среднее значение 0 и стандартное отклонение 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 доступной всем БЕСПЛАТНО.
⚙️ Встречайте САМУЮ МОЩНУЮ нейронку в мире:
• Базовая o3 на 30% (!) сильнее o1 в коде.
• Сразу после первых тестов o3 обошла людей в тесте на AGI.
• o3 заняла 175 место в рейтинге самых сильных кодеров мира.
• Альтман уже пообещал сделать o3-mini доступной всем БЕСПЛАТНО.
❤1❤🔥1
М А Ш И Н Н О Е О Б У Ч Е Н И Е — Ч А С Т Ь 4
Часть 3 — ТУТ
1️⃣5️⃣ НАЧИНАЕМ РАЗБИРАТЬ ЛИНЕЙНУЮ РЕГРЕССИЮ
1️⃣6️⃣ Выводим матрицу X 🔗 Выводим матрицу для Y
1️⃣7️⃣ Реализация формулы (Очень важно!!!) 🔗 Примеры использования наших функций 🔗 Дописываем формулу до конца 🔗 Разбираем вывод
1️⃣8️⃣ Разбираем код Линейной регрессии (формулу прописываем сами) 🟰 Продолжение 🟰Продолжение 🟰 Создаем точки (дописываем код) 🟰 Результат
1️⃣9️⃣ Продолжаем изучать линейную регрессию 🟰 Метод наименьших квадратов (важно)
2️⃣0️⃣ Знакомимся с Sklearn и методом fit
2️⃣1️⃣ Разбираем наш первый датасет!
2️⃣2️⃣ Мотивационный ролик на целый год вам
2️⃣3️⃣ Продолжаем разбирать структуру датасета 🟰 Продолжение
Часть 3 — ТУТ
1️⃣5️⃣ НАЧИНАЕМ РАЗБИРАТЬ ЛИНЕЙНУЮ РЕГРЕССИЮ
1️⃣6️⃣ Выводим матрицу X 🔗 Выводим матрицу для Y
1️⃣7️⃣ Реализация формулы (Очень важно!!!) 🔗 Примеры использования наших функций 🔗 Дописываем формулу до конца 🔗 Разбираем вывод
1️⃣8️⃣ Разбираем код Линейной регрессии (формулу прописываем сами) 🟰 Продолжение 🟰Продолжение 🟰 Создаем точки (дописываем код) 🟰 Результат
1️⃣9️⃣ Продолжаем изучать линейную регрессию 🟰 Метод наименьших квадратов (важно)
2️⃣0️⃣ Знакомимся с Sklearn и методом fit
2️⃣1️⃣ Разбираем наш первый датасет!
2️⃣2️⃣ Мотивационный ролик на целый год вам
2️⃣3️⃣ Продолжаем разбирать структуру датасета 🟰 Продолжение
🥰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 стандартное отклонение от среднего значения.
📊 Эти гистограммы идеально показывают распределение значений в наших массивах данных. Каждый столбик показывает количество значений, которые попадают в определенный диапазон.
📈 Первый график (исходные данные — 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 преобразование приводит данные к нулевому среднему значению.
⚙️ Для стандартизированных данных среднее значение всегда равно 0, так как Z-score преобразование приводит данные к нулевому среднему значению.
📈 Центр гистограммы: ⬇️
⚙️ Среднее значение указывает на центр гистограммы. Если данные симметричны, то большинство значений будут расположены вокруг среднего значения.
📉 Расположение бинов: ⬇️
⚙️ Бины на гистограмме будут расположены относительно среднего значения. Например, у нас есть бин от -1 до 0, он будет находиться слева от среднего значения (0), а бин от 0 до 1 будет находиться справа от среднего значения.
❤1🥰1🤓1