🤔 Что такое precision?
Precision (точность) — это метрика классификации, которая показывает долю правильных положительных предсказаний среди всех предсказанных положительных классов. Она рассчитывается как отношение количества истинно положительных предсказаний к сумме истинно положительных и ложно положительных. Precision важен, когда цена ложноположительных результатов высока. Высокое значение precision указывает на то, что модель почти не ошибается при предсказании положительного класса.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍4
🤔 Как оценивать эффективность работы рекомендательных моделей?
Оценка эффективности рекомендательных моделей делится на точностные и ранговые метрики.
🚩Точностные метрики
🟠RMSE (Среднеквадратичная ошибка)
Формула
Пример
🟠MAE (Средняя абсолютная ошибка)
Формула
Пример
🚩Ранговые метрики
🟠Precision@K и Recall@K
Precision@K: Доля релевантных элементов среди первых K предложений.
Recall@K: Доля найденных релевантных элементов среди всех возможных релевантных.
Пример
🟠MAP (Средний показатель)
Пример
Ставь 👍 и забирай 📚 Базу знаний
Оценка эффективности рекомендательных моделей делится на точностные и ранговые метрики.
🚩Точностные метрики
🟠RMSE (Среднеквадратичная ошибка)
Формула
RMSE = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2}Пример
from sklearn.metrics import mean_squared_error
import numpy as np
y_true = np.array([4, 3, 5, 2])
y_pred = np.array([3.8, 2.9, 5.1, 2.2])
rmse = np.sqrt(mean_squared_error(y_true, y_pred))
print(f'RMSE: {rmse}')
🟠MAE (Средняя абсолютная ошибка)
Формула
MAE = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i|Пример
from sklearn.metrics import mean_absolute_error
y_true = np.array([4, 3, 5, 2])
y_pred = np.array([3.8, 2.9, 5.1, 2.2])
mae = mean_absolute_error(y_true, y_pred)
print(f'MAE: {mae}')
🚩Ранговые метрики
🟠Precision@K и Recall@K
Precision@K: Доля релевантных элементов среди первых K предложений.
Recall@K: Доля найденных релевантных элементов среди всех возможных релевантных.
Пример
def precision_at_k(recommended_items, relevant_items, k):
return len(set(recommended_items[:k]) & set(relevant_items)) / k
def recall_at_k(recommended_items, relevant_items, k):
return len(set(recommended_items[:k]) & set(relevant_items)) / len(relevant_items)
recommended_items = [1, 2, 3, 4, 5]
relevant_items = [3, 4, 5, 6, 7]
k = 3
print(f'Precision@{k}: {precision_at_k(recommended_items, relevant_items, k)}')
print(f'Recall@{k}: {recall_at_k(recommended_items, relevant_items, k)}')
🟠MAP (Средний показатель)
Пример
def average_precision(recommended_items, relevant_items):
score = 0.0
num_hits = 0.0
for i, item in enumerate(recommended_items):
if item in relevant_items:
num_hits += 1.0
score += num_hits / (i + 1.0)
return score / len(relevant_items)
def mean_average_precision(recommended_items_list, relevant_items_list):
return np.mean([average_precision(r, t) for r, t in zip(recommended_items_list, relevant_items_list)])
recommended_items_list = [[1, 2, 3, 4, 5], [2, 3, 4, 5, 6]]
relevant_items_list = [[3, 4, 5, 6, 7], [1, 2, 3, 4, 5]]
print(f'MAP: {mean_average_precision(recommended_items_list, relevant_items_list)}')
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что можешь сказать про оконные функции?
Оконные функции в SQL и в библиотеках анализа данных, таких как pandas, позволяют выполнять вычисления по подмножествам данных (окнам), которые связаны с текущей строкой. Это включает в себя операции, такие как суммирование, вычисление среднего, и другие статистические функции, применяемые к "окну" данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍3
🤔 Какие переменные (типы данных) можно использовать в качестве ключей?
Хэшируемые типы данных, такие как числа, строки, кортежи с неизменяемыми элементами. Это важно, если требуется быстро сопоставить значения в структуре данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Хэшируемые типы данных, такие как числа, строки, кортежи с неизменяемыми элементами. Это важно, если требуется быстро сопоставить значения в структуре данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 Расскажи о Gradient-boosted trees
Gradient-boosted trees — это ансамблевый метод машинного обучения, который строит серию деревьев решений, каждое из которых исправляет ошибки предыдущих. Процесс обучения происходит путем последовательного добавления деревьев, каждое из которых минимизирует ошибку путем градиентного спуска, усиливая правильные прогнозы. Gradient boosting широко используется для задач регрессии и классификации, обеспечивая высокую точность и гибкость в работе с разными типами данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как валидировать временные ряды?
Валидация по времени включает разбиение данных на интервалы с учётом временной последовательности. Методы: time series split (скользящее окно), расширяемое окно или кросс-валидация по времени.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что станет с предсказаниями, если в bagging/boosting убрать первое дерево ?
В ансамблевых методах, таких как bagging (bootstrap aggregating) и boosting, удаление первого дерева будет иметь разные последствия из-за различий в подходах к обучению и агрегированию предсказаний.
🚩Bagging
🟠Независимые деревья
В этом методе деревья обучаются независимо друг от друга на разных случайных подвыборках данных. Таким образом, каждое дерево обучается на собственном наборе данных, и предсказания делаются путем усреднения (для регрессии) или голосования (для классификации).
🟠Удаление первого дерева
Если удалить первое дерево из ансамбля, это немного изменит итоговые предсказания, но в большинстве случаев эффект будет минимальным. Причина в том, что каждое дерево в bagging имеет равный вес, и удаление одного дерева из большого числа деревьев не сильно повлияет на общее предсказание ансамбля.
🚩Boosting
🟠Последовательное обучение
В этом методе деревья обучаются последовательно, каждая последующая модель исправляет ошибки предыдущих. Первое дерево имеет важное значение, так как оно задает начальное направление для коррекции ошибок последующими деревьями.
🟠Удаление первого дерева
Удаление первого дерева в boosting значительно изменит предсказания. Это связано с тем, что каждое последующее дерево основывает свое обучение на ошибках, сделанных предыдущими деревьями. Если первое дерево удалено, то все остальные деревья будут обучаться на других ошибках, что приведет к совершенно другим предсказаниям.
Для Gradient Boosting (boosting)
🟠Bagging (например, Random Forest)
Удаление первого дерева окажет незначительное влияние на предсказания, так как каждое дерево обучается независимо.
🟠Boosting (например, Gradient Boosting)
Удаление первого дерева существенно изменит предсказания, так как каждое последующее дерево исправляет ошибки предыдущих, и первое дерево задает начальное направление для коррекции ошибок.
Ставь 👍 и забирай 📚 Базу знаний
В ансамблевых методах, таких как bagging (bootstrap aggregating) и boosting, удаление первого дерева будет иметь разные последствия из-за различий в подходах к обучению и агрегированию предсказаний.
🚩Bagging
🟠Независимые деревья
В этом методе деревья обучаются независимо друг от друга на разных случайных подвыборках данных. Таким образом, каждое дерево обучается на собственном наборе данных, и предсказания делаются путем усреднения (для регрессии) или голосования (для классификации).
🟠Удаление первого дерева
Если удалить первое дерево из ансамбля, это немного изменит итоговые предсказания, но в большинстве случаев эффект будет минимальным. Причина в том, что каждое дерево в bagging имеет равный вес, и удаление одного дерева из большого числа деревьев не сильно повлияет на общее предсказание ансамбля.
🚩Boosting
🟠Последовательное обучение
В этом методе деревья обучаются последовательно, каждая последующая модель исправляет ошибки предыдущих. Первое дерево имеет важное значение, так как оно задает начальное направление для коррекции ошибок последующими деревьями.
🟠Удаление первого дерева
Удаление первого дерева в boosting значительно изменит предсказания. Это связано с тем, что каждое последующее дерево основывает свое обучение на ошибках, сделанных предыдущими деревьями. Если первое дерево удалено, то все остальные деревья будут обучаться на других ошибках, что приведет к совершенно другим предсказаниям.
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# Загрузка данных
data = load_iris()
X = data.data
y = data.target
# Разделение на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Обучение модели Random Forest
model = RandomForestClassifier(n_estimators=10, random_state=42)
model.fit(X_train, y_train)
# Предсказания
y_pred = model.predict(X_test)
# Удаление первого дерева и повторные предсказания
model.estimators_ = model.estimators_[1:]
y_pred_without_first_tree = model.predict(X_test)
print(f"Accuracy с первым деревом: {accuracy_score(y_test, y_pred)}")
print(f"Accuracy без первого дерева: {accuracy_score(y_test, y_pred_without_first_tree)}")
Для Gradient Boosting (boosting)
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# Загрузка данных
data = load_iris()
X = data.data
y = data.target
# Разделение на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Обучение модели Gradient Boosting
model = GradientBoostingClassifier(n_estimators=10, random_state=42)
model.fit(X_train, y_train)
# Предсказания
y_pred = model.predict(X_test)
# Удаление первого дерева и повторные предсказания
model.estimators_ = model.estimators_[1:]
y_pred_without_first_tree = model.predict(X_test)
print(f"Accuracy с первым деревом: {accuracy_score(y_test, y_pred)}")
print(f"Accuracy без первого дерева: {accuracy_score(y_test, y_pred_without_first_tree)}")
🟠Bagging (например, Random Forest)
Удаление первого дерева окажет незначительное влияние на предсказания, так как каждое дерево обучается независимо.
🟠Boosting (например, Gradient Boosting)
Удаление первого дерева существенно изменит предсказания, так как каждое последующее дерево исправляет ошибки предыдущих, и первое дерево задает начальное направление для коррекции ошибок.
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 В чём смысл Information Value (IV)?
Это метрика, используемая для оценки предсказательной способности признака относительно целевой переменной.
1. Высокое значение IV говорит о сильной связи между признаком и целевой переменной.
2. Часто используется в кредитном скоринге для выбора наиболее значимых признаков.
3. Значения IV помогают определить, какие признаки следует включить в модель, а какие можно исключить.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
1. Высокое значение IV говорит о сильной связи между признаком и целевой переменной.
2. Часто используется в кредитном скоринге для выбора наиболее значимых признаков.
3. Значения IV помогают определить, какие признаки следует включить в модель, а какие можно исключить.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Почему нейроные сети усложняют добавлением слоев, а не количеством нейронов в слое?
Основная идея заключается в том, что глубокие сети могут моделировать более сложные и абстрактные паттерны данных, чем более широкие, но менее глубокие сети. Ниже приведены основные причины, почему это так.
🟠Иерархическое представление признаков
Глубокие нейронные сети способны изучать иерархию признаков. В случае глубоких сетей, таких как свёрточные нейронные сети (CNN), первые слои могут изучать базовые признаки, такие как границы и углы, средние слои учатся распознавать более сложные структуры (например, текстуры или части объектов), а глубокие слои могут выявлять высокоуровневые аспекты, такие как целые объекты или сложные сцены. Это иерархическое представление не может быть эффективно достигнуто просто увеличением количества нейронов в одном или нескольких слоях без увеличения глубины сети.
🟠Способность к обобщению
Глубокие сети часто лучше обобщают данные благодаря своей способности выделять абстрактные признаки, которые более универсальны и менее привязаны к конкретным особенностям входных данных, которые могут варьироваться между наборами данных. Это универсальное представление признаков делает модель менее подверженной переобучению по сравнению с более широкими, но менее глубокими сетями.
🟠Вычислительная эффективность
Хотя глубокие сети могут быть вычислительно более сложными для тренировки, использование методов, таких как свёртки (в CNN), позволяет сократить количество параметров по сравнению с полносвязными слоями того же размера. Это делает обучение глубоких сетей более эффективным по сравнению с попыткой обучить очень широкую сеть, где каждый слой содержит большое количество нейронов, что приводит к огромному количеству параметров и требует значительных вычислительных ресурсов.
🟠Выразительные возможности
Теоретические исследования показывают, что глубокие сети могут эффективно аппроксимировать сложные функции, которые более сложные сети с меньшим количеством слоёв могут не смочь. Таким образом, добавление слоёв может драматически увеличить выразительные возможности сети, позволяя ей моделировать более сложные зависимости в данных.
Ставь 👍 и забирай 📚 Базу знаний
Основная идея заключается в том, что глубокие сети могут моделировать более сложные и абстрактные паттерны данных, чем более широкие, но менее глубокие сети. Ниже приведены основные причины, почему это так.
🟠Иерархическое представление признаков
Глубокие нейронные сети способны изучать иерархию признаков. В случае глубоких сетей, таких как свёрточные нейронные сети (CNN), первые слои могут изучать базовые признаки, такие как границы и углы, средние слои учатся распознавать более сложные структуры (например, текстуры или части объектов), а глубокие слои могут выявлять высокоуровневые аспекты, такие как целые объекты или сложные сцены. Это иерархическое представление не может быть эффективно достигнуто просто увеличением количества нейронов в одном или нескольких слоях без увеличения глубины сети.
🟠Способность к обобщению
Глубокие сети часто лучше обобщают данные благодаря своей способности выделять абстрактные признаки, которые более универсальны и менее привязаны к конкретным особенностям входных данных, которые могут варьироваться между наборами данных. Это универсальное представление признаков делает модель менее подверженной переобучению по сравнению с более широкими, но менее глубокими сетями.
🟠Вычислительная эффективность
Хотя глубокие сети могут быть вычислительно более сложными для тренировки, использование методов, таких как свёртки (в CNN), позволяет сократить количество параметров по сравнению с полносвязными слоями того же размера. Это делает обучение глубоких сетей более эффективным по сравнению с попыткой обучить очень широкую сеть, где каждый слой содержит большое количество нейронов, что приводит к огромному количеству параметров и требует значительных вычислительных ресурсов.
🟠Выразительные возможности
Теоретические исследования показывают, что глубокие сети могут эффективно аппроксимировать сложные функции, которые более сложные сети с меньшим количеством слоёв могут не смочь. Таким образом, добавление слоёв может драматически увеличить выразительные возможности сети, позволяя ей моделировать более сложные зависимости в данных.
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Где использование линейных моделей целесообразно?
Линейные модели применяются, когда данные линейно разделимы или зависимости между признаками и целевой переменной близки к линейным.
1. Они эффективны на высоких объёмах данных благодаря низкой вычислительной сложности.
2. Хорошо интерпретируемы, что важно в задачах с требованием объяснимости.
3. Используются в случаях, когда признаки предварительно масштабированы и очищены.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
1. Они эффективны на высоких объёмах данных благодаря низкой вычислительной сложности.
2. Хорошо интерпретируемы, что важно в задачах с требованием объяснимости.
3. Используются в случаях, когда признаки предварительно масштабированы и очищены.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Какие реализации бустинга есть?
AdaBoost, Gradient Boosting, XGBoost, CatBoost и LightGBM. Они различаются производительностью и подходами к построению деревьев.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
AdaBoost, Gradient Boosting, XGBoost, CatBoost и LightGBM. Они различаются производительностью и подходами к построению деревьев.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 В каких моделях используются несимметрические метрики?
Несимметрические метрики часто используются в моделях, где присутствует дисбаланс классов или когда ошибки в одних классах имеют более высокую стоимость, чем ошибки в других. Например, в медицинской диагностике, финансовом мошенничестве или кредитном скоринге, где пропуск положительного случая (например, болезни) может быть критичным.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Как делать прогноз для новых пользователей?
Прогнозирование для новых пользователей, особенно в контексте пожизненной ценности (LTV) или других метрик вовлеченности, представляет собой сложную задачу из-за отсутствия исторических данных о поведении этих пользователей. Вот несколько стратегий и методов, которые могут помочь сделать эффективные прогнозы для новых пользователей:
🟠Использование демографических данных
Если доступна информация о демографических характеристиках новых пользователей (например, возраст, география, пол), можно использовать эти данные для создания профилей, похожих на профили существующих пользователей, чьё поведение уже известно. Это позволяет применять модели, основанные на сходстве в демографических данных.
🟠Модели на основе сегментации
Создайте сегменты пользователей на основе доступных признаков и исторических данных о поведении и LTV в каждом сегменте. Для новых пользователей применяйте средние или медианные значения LTV соответствующего сегмента. Это подход часто используется как первичное приближение в отсутствие другой информации.
🟠Коэффициенты оттока и вовлеченности
Для прогнозирования поведения новых пользователей можно использовать статистические данные об оттоке и вовлеченности, собранные из аналогичных пользовательских когорт. Эти коэффициенты помогут оценить, как быстро пользователи могут покинуть сервис или насколько активно они будут его использовать.
🟠Модели на основе поведения на ранних этапах
Анализируйте первые взаимодействия новых пользователей с продуктом. Иногда даже ограниченные данные о первых действиях могут дать представление о будущем поведении пользователя. Например, частота использования сервиса в первые дни после регистрации может быть хорошим предиктором долгосрочной вовлеченности.
🟠Использование машинного обучения
Разработайте прогностические модели машинного обучения, которые могут обучаться на основе исторических данных и обновляться по мере поступления новой информации о поведении пользователей. Такие модели могут включать регрессионные модели, случайные леса, градиентный бустинг или нейронные сети.
🟠А/Б тестирование и непрерывное обучение
Проведение экспериментов и непрерывное обучение моделей на основе новых данных поможет уточнить и оптимизировать прогностические модели. Это позволяет адаптироваться к изменениям в поведении пользователей и улучшать точность прогнозов.
🟠Отслеживание и анализ поведенческих паттернов
Внимательное наблюдение за изменениями в поведении пользователей и их взаимодействиями с продуктом может дать дополнительные данные для анализа и использования в моделях прогнозирования.
Ставь 👍 и забирай 📚 Базу знаний
Прогнозирование для новых пользователей, особенно в контексте пожизненной ценности (LTV) или других метрик вовлеченности, представляет собой сложную задачу из-за отсутствия исторических данных о поведении этих пользователей. Вот несколько стратегий и методов, которые могут помочь сделать эффективные прогнозы для новых пользователей:
🟠Использование демографических данных
Если доступна информация о демографических характеристиках новых пользователей (например, возраст, география, пол), можно использовать эти данные для создания профилей, похожих на профили существующих пользователей, чьё поведение уже известно. Это позволяет применять модели, основанные на сходстве в демографических данных.
🟠Модели на основе сегментации
Создайте сегменты пользователей на основе доступных признаков и исторических данных о поведении и LTV в каждом сегменте. Для новых пользователей применяйте средние или медианные значения LTV соответствующего сегмента. Это подход часто используется как первичное приближение в отсутствие другой информации.
🟠Коэффициенты оттока и вовлеченности
Для прогнозирования поведения новых пользователей можно использовать статистические данные об оттоке и вовлеченности, собранные из аналогичных пользовательских когорт. Эти коэффициенты помогут оценить, как быстро пользователи могут покинуть сервис или насколько активно они будут его использовать.
🟠Модели на основе поведения на ранних этапах
Анализируйте первые взаимодействия новых пользователей с продуктом. Иногда даже ограниченные данные о первых действиях могут дать представление о будущем поведении пользователя. Например, частота использования сервиса в первые дни после регистрации может быть хорошим предиктором долгосрочной вовлеченности.
🟠Использование машинного обучения
Разработайте прогностические модели машинного обучения, которые могут обучаться на основе исторических данных и обновляться по мере поступления новой информации о поведении пользователей. Такие модели могут включать регрессионные модели, случайные леса, градиентный бустинг или нейронные сети.
🟠А/Б тестирование и непрерывное обучение
Проведение экспериментов и непрерывное обучение моделей на основе новых данных поможет уточнить и оптимизировать прогностические модели. Это позволяет адаптироваться к изменениям в поведении пользователей и улучшать точность прогнозов.
🟠Отслеживание и анализ поведенческих паттернов
Внимательное наблюдение за изменениями в поведении пользователей и их взаимодействиями с продуктом может дать дополнительные данные для анализа и использования в моделях прогнозирования.
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
# Предположим, X - признаки, а y - метки классов (0 - останется, 1 - отток)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LogisticRegression()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
print(classification_report(y_test, predictions))
Ставь 👍 и забирай 📚 Базу знаний
🤔 Что знаешь про early stopping?
Early stopping — это техника регуляризации, которая завершает обучение модели, если метрика качества на валидационном наборе перестаёт улучшаться. Это предотвращает переобучение, позволяя сохранить оптимальные параметры до ухудшения обобщающей способности. Метод основан на мониторинге функции ошибки или качества модели во время каждой итерации обучения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥1
🤔 Чем отличается having от where?
Ключевые отличия между операторами HAVING и WHERE заключаются в их использовании и моменте применения при обработке запроса:
🟠Момент применения
WHERE: Фильтрует строки до того, как будут выполнены группировка или агрегирование. Это означает, что WHERE ограничивает записи, которые войдут в последующий процесс агрегации или будут доступны для дальнейших операций в запросе.
HAVING: Применяется после выполнения группировки и агрегации. HAVING используется для фильтрации агрегированных результатов, которые возвращаются оператором GROUP BY. Таким образом, HAVING может использовать результаты агрегатных функций для фильтрации групп данных.
🟠Типы данных для фильтрации
WHERE: Может использовать только те колонки, которые физически присутствуют в таблице. WHERE не может фильтровать результаты агрегатных функций, так как он действует до их применения.
HAVING: Может использовать агрегатные функции, такие как SUM(), AVG(), MAX(), COUNT() и т.д., что позволяет фильтровать данные на основе результатов этих функций после группировки.
🟠Возможности использования
WHERE: Обычно используется в большинстве SQL запросов для фильтрации записей перед выполнением операций, таких как выборка, агрегирование или группировка. Это основной инструмент для уменьшения набора данных до агрегации.
HAVING: Основное использование HAVING — это уточнение результатов, полученных с помощью агрегации в комбинации с GROUP BY. Это более специализированный инструмент, который полезен в отчетах и анализе данных, где нужно работать с агрегированными суммами, средними значениями или другими агрегатами.
Представим, что у нас есть таблица
Ставь 👍 и забирай 📚 Базу знаний
Ключевые отличия между операторами HAVING и WHERE заключаются в их использовании и моменте применения при обработке запроса:
🟠Момент применения
WHERE: Фильтрует строки до того, как будут выполнены группировка или агрегирование. Это означает, что WHERE ограничивает записи, которые войдут в последующий процесс агрегации или будут доступны для дальнейших операций в запросе.
HAVING: Применяется после выполнения группировки и агрегации. HAVING используется для фильтрации агрегированных результатов, которые возвращаются оператором GROUP BY. Таким образом, HAVING может использовать результаты агрегатных функций для фильтрации групп данных.
🟠Типы данных для фильтрации
WHERE: Может использовать только те колонки, которые физически присутствуют в таблице. WHERE не может фильтровать результаты агрегатных функций, так как он действует до их применения.
HAVING: Может использовать агрегатные функции, такие как SUM(), AVG(), MAX(), COUNT() и т.д., что позволяет фильтровать данные на основе результатов этих функций после группировки.
🟠Возможности использования
WHERE: Обычно используется в большинстве SQL запросов для фильтрации записей перед выполнением операций, таких как выборка, агрегирование или группировка. Это основной инструмент для уменьшения набора данных до агрегации.
HAVING: Основное использование HAVING — это уточнение результатов, полученных с помощью агрегации в комбинации с GROUP BY. Это более специализированный инструмент, который полезен в отчетах и анализе данных, где нужно работать с агрегированными суммами, средними значениями или другими агрегатами.
Представим, что у нас есть таблица
orders с полями customer_id, order_date, и amount. Мы хотим выбрать клиентов, которые совершили заказы на общую сумму более 500 долларов, но только те заказы, которые были сделаны в 2021 году.SELECT customer_id, SUM(amount) AS total_amount
FROM orders
WHERE order_date BETWEEN '2021-01-01' AND '2021-12-31'
GROUP BY customer_id
HAVING SUM(amount) > 500;
Ставь 👍 и забирай 📚 Базу знаний
🤔 Какие подходы понижения размерности известны?
Основные подходы понижения размерности включают метод главных компонент (PCA), сингулярное разложение (SVD), t-SNE и UMAP. PCA снижает размерность данных, находя новые оси, которые объясняют наибольшую дисперсию данных. t-SNE и UMAP используются для визуализации данных в пространстве низкой размерности, сохраняя их топологическую структуру. Эти методы позволяют уменьшить количество признаков при сохранении важной информации.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 В чем отличия между чар и варчар?
Типы данных CHAR и VARCHAR используются для хранения символьных (текстовых) данных, но они работают по-разному и предназначены для разных сценариев использования.
🚩Основные отличия
🟠Хранение
CHAR: Это фиксированный тип размера, что означает, что выделяемое пространство для каждой строки одинаково, независимо от фактической длины хранимой строки. Если строка короче заявленной длины, оставшееся пространство заполняется специальными символами (обычно пробелами). Например, если вы определяете столбец как CHAR(10) и сохраняете строку "abc", она будет храниться как "abc " (с добавлением семи пробелов).
VARCHAR: Это переменный тип размера. VARCHAR требует только столько места, сколько необходимо для хранения символов, плюс дополнительное место для хранения информации о длине строки. Если столбец определён как VARCHAR(10) и вы сохраняете строку "abc", она будет занимать только место, необходимое для хранения трёх символов и длины.
🟠Производительность
CHAR: Быстрее при выполнении операций, потому что все значения фиксированной длины, что упрощает вычисление позиций данных в памяти. Хорошо подходит для данных, размер которых известен и стабилен, например, некоторые идентификаторы, коды стран, коды состояний.
VARCHAR: Может быть медленнее CHAR из-за дополнительных затрат на обработку переменной длины, но это зависит от сценария и системы управления базой данных. Лучше подходит для текстовых данных, длина которых может сильно варьироваться, например, имена, адреса электронной почты.
🟠Использование памяти
CHAR: Может неэффективно использовать пространство, если данные значительно короче максимальной длины.
VARCHAR: Эффективнее использует память, когда данные значительно короче максимально допустимой длины.
🟠Советы по использованию
Используйте
Используйте
Ставь 👍 и забирай 📚 Базу знаний
Типы данных CHAR и VARCHAR используются для хранения символьных (текстовых) данных, но они работают по-разному и предназначены для разных сценариев использования.
🚩Основные отличия
🟠Хранение
CHAR: Это фиксированный тип размера, что означает, что выделяемое пространство для каждой строки одинаково, независимо от фактической длины хранимой строки. Если строка короче заявленной длины, оставшееся пространство заполняется специальными символами (обычно пробелами). Например, если вы определяете столбец как CHAR(10) и сохраняете строку "abc", она будет храниться как "abc " (с добавлением семи пробелов).
VARCHAR: Это переменный тип размера. VARCHAR требует только столько места, сколько необходимо для хранения символов, плюс дополнительное место для хранения информации о длине строки. Если столбец определён как VARCHAR(10) и вы сохраняете строку "abc", она будет занимать только место, необходимое для хранения трёх символов и длины.
🟠Производительность
CHAR: Быстрее при выполнении операций, потому что все значения фиксированной длины, что упрощает вычисление позиций данных в памяти. Хорошо подходит для данных, размер которых известен и стабилен, например, некоторые идентификаторы, коды стран, коды состояний.
VARCHAR: Может быть медленнее CHAR из-за дополнительных затрат на обработку переменной длины, но это зависит от сценария и системы управления базой данных. Лучше подходит для текстовых данных, длина которых может сильно варьироваться, например, имена, адреса электронной почты.
🟠Использование памяти
CHAR: Может неэффективно использовать пространство, если данные значительно короче максимальной длины.
VARCHAR: Эффективнее использует память, когда данные значительно короче максимально допустимой длины.
🟠Советы по использованию
Используйте
CHAR, если длина данных всегда одинакова.Используйте
VARCHAR, если длина данных может значительно отличаться.CREATE TABLE example (
fixed_char CHAR(10),
variable_char VARCHAR(10)
);
INSERT INTO example (fixed_char, variable_char) VALUES ('text', 'text');
SELECT LENGTH(fixed_char), LENGTH(variable_char) FROM example;
Ставь 👍 и забирай 📚 Базу знаний
🤔 Как обучаются линейные модели?
Линейные модели обучаются путём нахождения оптимальных весов, которые минимизируют функцию потери, обычно через градиентный спуск. В случае простых моделей (например, линейной регрессии) может быть использовано аналитическое решение (метод наименьших квадратов). При больших данных или сложных задачах применяется итеративный подход для более эффективной оптимизации.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Сколько слоёв многослойного перцептрона с линейной функцией активации понадобится для приближения полинома третьей степени?
Многослойный перцептрон (MLP) с линейными функциями активации, независимо от числа слоев, не способен аппроксимировать полином третьей степени или любую другую нелинейную функцию.
🚩Линейные функции активации
Имеет вид
Когда используется линейная функция активации в многослойном перцептроне, каждая следующая линейная комбинация входных данных остается линейной. Независимо от количества слоев, итоговая функция будет просто линейной комбинацией входных данных. Если рассматривать MLP с линейной активацией, то каждый слой \( l \) вычисляется как
🚩Полиномиальные функции
Полином третьей степени имеет вид
🚩Необходимость нелинейной активации
Для аппроксимации полинома третьей степени необходимо использовать нелинейные функции активации, такие как:
Сигмоида (\(\sigma(x) = \frac{1}{1 + e^{-x}}\))
ReLU (Rectified Linear Unit, \( \text{ReLU}(x) = \max(0, x) \))
Тангенс гиперболический (\(\tanh(x)\))
Использование нелинейных функций активации позволяет многослойному перцептрону моделировать сложные функции, включая полиномы более высокой степени.
Ставь 👍 и забирай 📚 Базу знаний
Многослойный перцептрон (MLP) с линейными функциями активации, независимо от числа слоев, не способен аппроксимировать полином третьей степени или любую другую нелинейную функцию.
🚩Линейные функции активации
Имеет вид
f(x) = x
Когда используется линейная функция активации в многослойном перцептроне, каждая следующая линейная комбинация входных данных остается линейной. Независимо от количества слоев, итоговая функция будет просто линейной комбинацией входных данных. Если рассматривать MLP с линейной активацией, то каждый слой \( l \) вычисляется как
\mathbf{z}^{(l)} = \mathbf{W}^{(l)} \mathbf{a}^{(l-1)} + \mathbf{b}^{(l)}🚩Полиномиальные функции
Полином третьей степени имеет вид
f(x) = a_3 x^3 + a_2 x^2 + a_1 x + a_0
🚩Необходимость нелинейной активации
Для аппроксимации полинома третьей степени необходимо использовать нелинейные функции активации, такие как:
Сигмоида (\(\sigma(x) = \frac{1}{1 + e^{-x}}\))
ReLU (Rectified Linear Unit, \( \text{ReLU}(x) = \max(0, x) \))
Тангенс гиперболический (\(\tanh(x)\))
Использование нелинейных функций активации позволяет многослойному перцептрону моделировать сложные функции, включая полиномы более высокой степени.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neural_network import MLPRegressor
# Генерация данных
np.random.seed(42)
X = np.linspace(-2, 2, 100).reshape(-1, 1)
y = 3*X**3 - 2*X**2 + X + 1 + np.random.normal(0, 0.2, X.shape)
# Обучение MLP
mlp = MLPRegressor(hidden_layer_sizes=(100, 100), activation='relu', max_iter=10000, random_state=42)
mlp.fit(X, y.ravel())
# Предсказания
y_pred = mlp.predict(X)
# Визуализация
plt.scatter(X, y, color='blue', label='Original data')
plt.plot(X, y_pred, color='red', label='MLP prediction')
plt.legend()
plt.show()
Ставь 👍 и забирай 📚 Базу знаний