Data Science | Вопросы собесов
4.91K subscribers
38 photos
1.49K links
Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy

Контакт для рекламы: @easyoffer_adv
Download Telegram
🤔 Когда нужно использовать метод главных компонентов в бизнесе?

Метод главных компонентов (Principal Component Analysis, PCA) используется в бизнесе для уменьшения размерности данных, что позволяет легче анализировать и визуализировать большие наборы данных, а также выявлять скрытые структуры и взаимосвязи между переменными.

🚩Когда использовать PCA

🟠Большие наборы данных
Когда у вас есть данные с большим количеством переменных (столбцов), и они могут содержать избыточную информацию. Пример: В маркетинговом исследовании у вас может быть множество переменных, таких как возраст, доход, покупательские привычки, предпочтения и т.д.

🟠Проблемы многоколлинеарности
Когда переменные сильно коррелируют друг с другом, что может затруднить анализ. Пример: В финансовом анализе цены на различные активы могут быть сильно связаны друг с другом.

🟠Упрощение визуализации
Когда нужно визуализировать данные с множеством измерений на двумерных или трехмерных графиках для более простого понимания. Пример: Анализ клиентов на основе различных демографических и поведенческих параметров.

🚩Зачем использовать PCA

🟠Уменьшение размерности
PCA уменьшает количество переменных, сохраняя при этом как можно больше информации. Пример: Из набора данных с 100 переменных можно выделить 2-3 главных компонента, которые объясняют основную вариацию в данных.

🟠Улучшение производительности моделей
Меньшее количество переменных может уменьшить время обучения моделей машинного обучения и улучшить их производительность. Пример: В прогнозировании спроса на продукцию можно использовать PCA для предварительной обработки данных, чтобы улучшить точность модели.

🟠Удаление шума
PCA помогает устранить случайные шумы и незначимые переменные, фокусируясь на важнейших компонентах данных. Пример: В анализе рынка ценных бумаг это может помочь сосредоточиться на основных трендах, а не на случайных колебаниях.

🚩Как это используется

🟠Предобработка данных
Перед применением PCA необходимо стандартизировать данные (например, с помощью Z-оценки), чтобы каждая переменная имела одинаковый вес.
     from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import pandas as pd

# Загрузка данных
data = pd.read_csv('data.csv')

# Стандартизация данных
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)

# Применение PCA
pca = PCA(n_components=2) # Уменьшение до 2 компонент
principal_components = pca.fit_transform(scaled_data)

# Преобразование обратно в DataFrame
pca_df = pd.DataFrame(data=principal_components, columns=['PC1', 'PC2'])


🟠Интерпретация результатов
После применения PCA, нужно интерпретировать главные компоненты и их вклад в общую вариацию. Пример: Визуализация двух главных компонент может показать кластеры клиентов с различными характеристиками.

Ставь 👍 и забирай 📚 Базу знаний
🤔 Как объяснить бизнесу, что значат ошибки I и II рода?

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

🚩Объяснение

🟠Ошибка I рода (Ложно-положительный результат)
Возникает, когда мы отвергаем нулевую гипотезу, хотя она на самом деле верна. Представьте, что у вас есть система детекции мошенничества для онлайн-платежей. Ошибка I рода в этом контексте будет означать, что система пометила законную транзакцию как мошенническую. Клиенты могут быть недовольны блокировкой их законных транзакций, что может привести к потере доверия и уменьшению числа пользователей.

🟠Ошибка II рода (Ложно-отрицательный результат)
Происходит, когда мы не отвергаем нулевую гипотезу, хотя она на самом деле ложна. В системе детекции мошенничества, ошибка II рода будет означать, что система не распознала мошенническую транзакцию и пропустила её. Пропуск мошеннических транзакций может привести к финансовым потерям и возможным проблемам с репутацией.

🚩Объяснение на метафорах

🟠Ошибка I рода (Ложно-положительный результат)
Представьте, что у вас есть сигнализация в доме, которая должна срабатывать только в случае кражи. Ошибка I рода - это когда сигнализация срабатывает, даже если кражи нет, например, от шума ветра.
Последствия: Частые ложные срабатывания сигнализации могут вызвать недовольство и раздражение, возможно, вы даже решите отключить систему.

🟠Ошибка II рода (Ложно-отрицательный результат)
Теперь представьте, что сигнализация в вашем доме не срабатывает, когда происходит кража. Это и есть ошибка II рода.
Последствия: Вор может свободно украсть ваше имущество, и вы останетесь без защиты.

🚩Как ошибки влияют на бизнес

🟠Ошибка I рода
Маркетинговая кампания, направленная на привлечение новых клиентов, ошибочно определяет некоторых текущих клиентов как новых и отправляет им специальные предложения, что увеличивает расходы без получения новых клиентов.
Риски: Дополнительные расходы, снижение эффективности кампаний, ухудшение клиентского опыта.

🟠Ошибка II рода
Кампания по удержанию клиентов не распознает реальных клиентов, склонных к уходу, и не предпринимает мер для их удержания.
Риски: Потеря клиентов, снижение доходов, ухудшение клиентской базы.

Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое градиентный спуск?

Градиентный спуск — это метод оптимизации, который используется для нахождения минимального значения функции ошибки модели путём итеративного изменения параметров модели (например, весов). На каждом шаге вычисляется градиент функции ошибки по параметрам, и параметры корректируются в направлении, противоположном градиенту. Шаг изменения регулируется параметром скорости обучения (learning rate). Градиентный спуск эффективен для обучения моделей с большим количеством параметров.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что такое интерквантили?

Это статистическая мера вариативности, которая описывает диапазон центральных 50% данных в наборе. IQR используется для оценки разброса данных и для выявления выбросов.

🚩Понятия

🟠Квартили
Первый квартиль (Q1): Значение, ниже которого находится 25% данных.
Второй квартиль (Q2): Это медиана, значение, ниже которого находится 50% данных.
Третий квартиль (Q3): Значение, ниже которого находится 75% данных.

🟠Интерквартильный размах (IQR)
Разница между третьим и первым квартилями. Интерпретация: IQR показывает диапазон, в котором находится центральная половина данных, и помогает понять разброс данных вокруг медианы.
IQR = Q3 - Q1


🚩Примеры

🟠Сортировка данных

[1, 3, 3, 6, 7, 8, 9, 15, 18, 19]

🟠Вычисление квартилей

Первый квартиль (Q1): Среднее значение между вторым и третьим элементом (3 и 6), то есть 4.5.
Медиана (Q2): Среднее значение между пятым и шестым элементом (7 и 8), то есть 7.5.
Третий квартиль (Q3): Среднее значение между восьмым и девятым элементом (15 и 18), то есть 16.5.
Вычисление IQR:
IQR = Q3 - Q1 = 16.5 - 4.5 = 12


🚩Использование интерквартильного размаха

🟠Выявление выбросов
Значения, которые находятся ниже \(Q1 - 1.5 \times IQR\) или выше \(Q3 + 1.5 \times IQR\), считаются выбросами.
🟠Сравнение распределений
IQR может использоваться для сравнения разброса данных в разных наборах или группах.

Пример
import numpy as np

# Данные
data = [1, 3, 3, 6, 7, 8, 9, 15, 18, 19]

# Вычисление квартилей
Q1 = np.percentile(data, 25)
Q2 = np.percentile(data, 50)
Q3 = np.percentile(data, 75)

# Вычисление IQR
IQR = Q3 - Q1

print(f"Первый квартиль (Q1): {Q1}")
print(f"Медиана (Q2): {Q2}")
print(f"Третий квартиль (Q3): {Q3}")
print(f"Интерквартильный размах (IQR): {IQR}")

# Выявление выбросов
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

print(f"Границы для выбросов: {lower_bound} и {upper_bound}")
outliers = [x for x in data if x < lower_bound or x > upper_bound]
print(f"Выбросы: {outliers}")


Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Знаешь ли такие два понятия: стэкинг и блэндинг?

Это две техники ансамблевого машинного обучения, которые используются для улучшения предсказательной способности моделей за счёт комбинирования различных предсказаний. Обе техники предполагают использование нескольких базовых моделей, но они реализуются немного по-разному.

🚩Стэкинг (Stacking)

Это метод ансамблевого обучения, при котором модели различных типов обучаются на одном и том же наборе данных, а затем их предсказания используются как входные данные для мета-модели (финальной модели), которая делает окончательное предсказание.
🟠Первый уровень (Base Level Models)
На первом уровне несколько различных моделей обучаются независимо на полном обучающем наборе данных. Каждая модель делает предсказания, которые затем используются на втором уровне.
🟠Второй уровень (Meta-model)
На втором уровне мета-модель обучается на предсказаниях, сделанных моделями первого уровня. Цель мета-модели — корректно интерпретировать предсказания базовых моделей и сделать окончательное предсказание.

🚩Блэндинг (Blending)

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

Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 В чём разница между методом GMM и K-Means?

1. K-Means:
o Основан на разделении данных по расстояниям до центроидов (жёсткое разделение).
o Каждая точка принадлежит только одному кластеру.
2. GMM (Gaussian Mixture Model):
o Использует вероятностный подход: каждая точка имеет вероятность принадлежности к каждому кластеру (мягкое разделение).
o Кластеры формируются на основе распределений Гаусса, что делает GMM более гибким для сложных данных.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Расскажи о Gradient-boosted trees

Градиентный бустинг (Gradient Boosting) – это мощная техника машинного обучения, которая используется в задачах классификации и регрессии. Он строит последовательность деревьев решений, где каждое новое дерево исправляет ошибки предыдущих.

🚩Как работает градиентный бустинг?

Первое дерево делает предсказания (например, просто среднее значение таргета).
Считаются ошибки (остатки) между предсказанием и реальными значениями.
Следующее дерево обучается предсказывать эти ошибки.
Шаг 2 и 3 повторяются – каждое новое дерево учится уменьшать ошибку.
Итоговый ответ – сумма предсказаний всех деревьев, умноженная на коэффициент обучения.
F_{m}(x) = F_{m-1}(x) + \gamma \cdot h_m(x)
Где:
\( F_{m}(x) \) – предсказание на шаге \( m \)
\( h_m(x) \) – новое дерево, обученное на ошибках
\( \gamma \) – коэффициент обучения (learning rate), регулирует вклад каждого нового дерева

🚩Популярные реализации градиентного бустинга

🟠XGBoost
самый быстрый и популярный, поддерживает регуляризацию.
🟠LightGBM
быстрее XGBoost, строит деревья сверху вниз (leaf-wise).
🟠CatBoost
лучший для категориальных признаков, использует особые методы кодирования.

🚩Когда использовать градиентный бустинг?

Если важна высокая точность модели.
Если признаки имеют сложные нелинейные зависимости.
Если нужно предсказывать на табличных данных.
Не подходит, если данных мало – модель может переобучиться.
Требует тщательной настройки гиперпараметров.

Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Когда ROC AUC будет плохо определять качество классификатора ?

ROC AUC (Receiver Operating Characteristic - Area Under Curve) является популярной метрикой для оценки качества бинарного классификатора. Однако, в некоторых ситуациях использование ROC AUC может быть неэффективным или вводящим в заблуждение.

🟠Сильно несбалансированные данные
При сильном дисбалансе классов, где один класс существенно преобладает над другим, ROC AUC может давать завышенные оценки качества модели. Это происходит потому, что ROC AUC учитывает как истинно положительные, так и ложно положительные сработки, но при этом не всегда отражает способность модели предсказывать редкий класс.

🟠Различная стоимость ошибок
Если ошибки различных типов (ложно положительные и ложно отрицательные) имеют разную стоимость, ROC AUC может неадекватно отражать качество модели. В таких случаях более подходящей метрикой может быть Precision-Recall Curve или специфическая метрика, учитывающая стоимость ошибок.

🟠Малое количество положительных примеров
При малом количестве положительных примеров (класса 1), ROC AUC может стать менее надежной, так как небольшое изменение в предсказаниях может существенно повлиять на значение метрики. В таких случаях Precision-Recall Curve и PR AUC могут предоставить более надежную оценку.

🟠Нестабильность при малых выборках
Может быть нестабильной и сильно зависеть от конкретного набора данных, особенно при небольших выборках. Это может привести к значительным колебаниям в оценках качества модели.
import numpy as np
import pandas as pd
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score, precision_recall_curve, auc

# Создание несбалансированного набора данных
X, y = make_classification(n_samples=1000, n_features=20, n_informative=2, n_redundant=10,
n_clusters_per_class=1, weights=[0.99], flip_y=0, random_state=42)

# Разделение на обучающую и тестовую выборки
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)

# Предсказание вероятностей
y_scores = model.predict_proba(X_test)[:, 1]

# Вычисление ROC AUC
roc_auc = roc_auc_score(y_test, y_scores)

# Вычисление Precision-Recall AUC
precision, recall, _ = precision_recall_curve(y_test, y_scores)
pr_auc = auc(recall, precision)

print(f"ROC AUC: {roc_auc}")
print(f"Precision-Recall AUC: {pr_auc}")


Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Зачем нужен yield вместо return в функции?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1🔥1
🤔 Как обучаются линейные модели?

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

🟠Математическая формулировка
Для набора данных с входными признаками \(X\) (матрица размера \(n \times p\), где \(n\) — количество примеров, \(p\) — количество признаков) и целевыми значениями \(y\) (вектор размера \(n\)), линейная модель предсказывает \(y\) как:
\[ \hat{y} = Xw + b \]
где \(w\) — вектор весов размера \(p\), а \(b\) — скалярное смещение (bias).

🟠Функция потерь
Чтобы найти оптимальные значения \(w\) и \(b\), необходимо определить функцию потерь, которая минимизируется. В зависимости от задачи это может быть:
Среднеквадратичная ошибка (MSE) для регрессии: \( L = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2 \)
Логистическая потеря для классификации: \( L = -\frac{1}{n} \sum_{i=1}^n [y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)] \)

🟠Оптимизация
Для нахождения оптимальных \(w\) и \(b\), минимизирующих функцию потерь, обычно используется один из следующих методов:
Метод наименьших квадратов: Прямой математический метод, решающий уравнение \(X^T X w = X^T y\) (может включать регуляризацию).

🟠Регуляризация
Для предотвращения переобучения часто используют ее:
L1-регуляризация (Lasso): добавление к функции потерь члена \(\lambda \|w\|_1\), где \(\lambda\) — параметр регуляризации.
L2-регуляризация (Ridge): добавление к функции потерь члена \(\lambda \|w\|^2_2\).
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# Загрузка данных
data = load_boston()
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)

# Создание и обучение модели
model = LinearRegression()
model.fit(X_train, y_train)

# Предсказание и оценка модели
y

_pred = model.predict(X_test)
print("MSE:", mean_squared_error(y_test, y_pred))


Ставь 👍 и забирай 📚 Базу знаний
🔥1
🤔 Какой оптимизатор выбрать для обучения нейронной сети?

Adam часто используется из-за адаптивного шага обучения. SGD предпочтителен для больших данных.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что такое mode?

Это статистическая мера центральной тенденции, представляющая собой значение, которое встречается в наборе данных чаще всего. В отличие от среднего значения (mean) и медианы (median), мода не обязательно должна быть уникальной: в одном наборе данных может быть несколько мод или не быть ни одной (если все значения встречаются одинаково часто).

🚩Характеристики

🟠Частота появления
Мода определяется как значение или значения, которые имеют наибольшую частоту появления в наборе данных.
🟠Устойчивость к выбросам
Поскольку мода основана на частоте, она не подвержена влиянию выбросов или экстремальных значений.
🟠Применимость
Мода особенно полезна для категориальных данных, где среднее значение не имеет смысла (например, самый популярный цвет, наиболее частое место назначения).

🚩Примеры

🟠Набор данных с одной модой
Набор данных: [1, 2, 2, 3, 4] 2 (появляется чаще всего)
🟠Набор данных с двумя модами (бимодальный)
Набор данных: [1, 2, 2, 3, 3, 4] 2 и 3 (оба значения появляются одинаково часто и чаще остальных)
🟠Набор данных без моды
Набор данных: [1, 2, 3, 4] отсутствует (все значения появляются с одинаковой частотой)

🚩Применение моды

🟠Бизнес и маркетинг
Определение самых популярных продуктов, услуг или предпочтений клиентов.
🟠Медицина
Анализ наиболее частых симптомов или заболеваний в определённой группе пациентов.
🟠Социология
Выявление наиболее распространенных ответов на опросы или анкеты.

Моды на Python
from scipy import stats

# Пример с одной модой
data_single_mode = [1, 2, 2, 3, 4]
mode_single = stats.mode(data_single_mode)
print(f"Мода для набора с одной модой: {mode_single.mode[0]} (появляется {mode_single.count[0]} раз)")

# Пример с двумя модами
data_bimodal = [1, 2, 2, 3, 3, 4]
mode_bimodal = stats.mode(data_bimodal)
print(f"Моды для набора с двумя модами: {mode_bimodal.mode} (каждая появляется по {mode_bimodal.count[0]} раз)")


Для категориальных данных на Python
from collections import Counter

# Категориальные данные
data_categorical = ['red', 'blue', 'blue', 'green', 'red', 'red']
counter = Counter(data_categorical)
mode_categorical = counter.most_common(1)[0] # most_common(1) возвращает список с одной парой (элемент, частота)
print(f"Мода для категориальных данных: {mode_categorical[0]} (появляется {mode_categorical[1]} раз)")


Ставь 👍 и забирай 📚 Базу знаний
🤔 Как работает where?

Ключевое слово WHERE в SQL используется для фильтрации записей в запросах. Оно позволяет ограничивать результаты запроса только теми строками, которые удовлетворяют определенным условиям. Ключевое слово WHERE может применяться в операторах SELECT, UPDATE, DELETE, а также в других контекстах.

🚩Принципы

🟠Фильтрация строк
WHERE задает условие, которое проверяется для каждой строки в таблице. Только те строки, которые удовлетворяют условию, включаются в результирующий набор данных.

🟠Операторы и выражения
Условия в WHERE могут содержать различные операторы, такие как сравнения (=, <>, >, <, >=, <=), логические операторы (AND, OR, NOT), а также функции и другие выражения.

🟠Работа с NULL
Для проверки на NULL используется оператор IS NULL или IS NOT NULL.

🚩Примеры использования `WHERE`

SELECT с условием
SELECT * FROM employees
WHERE salary > 50000;


UPDATE с условием
UPDATE employees
SET salary = salary * 1.10
WHERE department = 'Sales';


DELETE с условием
DELETE FROM employees
WHERE hire_date < '2020-01-01';


Использование AND и OR
SELECT * FROM employees
WHERE department = 'IT' AND salary > 60000;


Этот запрос выбирает всех сотрудников из отдела IT с зарплатой более 60,000.
SELECT * FROM employees
WHERE department = 'IT' OR department = 'HR';


Проверка на NULL
SELECT * FROM employees
WHERE manager_id IS NULL;


🚩Пример использования в Python с библиотекой sqlite3

import sqlite3

# Создание соединения с базой данных SQLite
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# Создание таблицы
cursor.execute('''
CREATE TABLE IF NOT EXISTS employees (
id INTEGER PRIMARY KEY,
name TEXT,
department TEXT,
salary REAL,
hire_date TEXT
)
''')

# Вставка данных
cursor.execute('''
INSERT INTO employees (name, department, salary, hire_date)
VALUES ('John Doe', 'IT', 75000, '2021-05-01')
''')

cursor.execute('''
INSERT INTO employees (name, department, salary, hire_date)
VALUES ('Jane Smith', 'HR', 50000, '2019-03-15')
''')

conn.commit()

# Запрос данных с использованием WHERE
cursor.execute('''
SELECT * FROM employees WHERE salary > 60000
''')

# Получение и вывод результатов
rows = cursor.fetchall()
for row in rows:
print(row)

# Закрытие соединения
conn.close()


Ставь 👍 и забирай 📚 Базу знаний
🤔 Какие известны рекомендательные модели?

Content-Based Filtering, Collaborative Filtering, и Hybrid модели. Выбор зависит от задачи и данных.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 В каких моделях используются несимметрические метрики ?

Несимметричные метрики используются в моделях машинного обучения, когда разные типы ошибок имеют различные последствия. Такие метрики часто применяются в индустриях и сценариях, где важно учитывать разные уровни риска, связанного с различными видами ошибок. Ниже перечислены некоторые из основных моделей и сценариев, где могут использоваться несимметричные метрики:

🟠Финансовые услуги
В банковском деле и финансах, особенно в кредитном скоринге и обнаружении мошенничества, стоимость ошибочного классифицирования клиентов может быть очень высока. Например, модели, предсказывающие вероятность дефолта по кредиту или мошенническую активность, часто используют взвешенные функции потерь, чтобы минимизировать очень дорогие ошибки, такие как пропуск дефолта или необнаруженное мошенничество.

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

🟠Промышленность и производство
В области обнаружения дефектов на производственных линиях важно минимизировать пропуск бракованной продукции, что может привести к значительным финансовым потерям или опасности для конечных пользователей. Модели, которые предсказывают наличие дефектов, могут быть настроены на уменьшение ложноотрицательных результатов.

🟠Безопасность и наблюдение
Системы безопасности, которые определяют потенциальные угрозы или нежелательные действия, также используют несимметричные метрики. В таких системах стоимость пропуска реальной угрозы (ложноотрицательный результат) обычно намного выше стоимости ложной тревоги.

Ставь 👍 и забирай 📚 Базу знаний
🤔 Какие знаешь рекомендательные модели?

Модели: коллаборативная фильтрация (на основе пользователей или элементов), контентная фильтрация, гибридные подходы и модели с использованием глубокого обучения (например, нейронные сетевые рекомендатели).

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Расскажи о структуре словаря в Python?

Это встроенный тип данных, который представляет собой неупорядоченную коллекцию пар "ключ-значение". Он позволяет быстро извлекать значения по ключу, обеспечивая эффективный доступ к данным.

🚩Характеристики

🟠Ключи уникальны
В словаре каждый ключ должен быть уникальным. Если добавить пару с существующим ключом, значение этого ключа будет перезаписано.
🟠Ключи неизменяемы
Ключи должны быть хэшируемыми, то есть они должны иметь неизменяемый тип данных (например, строки, числа, кортежи).
🟠Значения могут быть любыми:
Значения в словаре могут быть любого типа данных и не обязательно уникальны.

1⃣Создание словаря
# Пустой словарь
my_dict = {}

# Словарь с начальными значениями
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}


2⃣Добавление и изменение элементов
# Добавление нового ключа-значения
my_dict['email'] = 'alice@example.com'

# Изменение существующего значения
my_dict['age'] = 26


3⃣Доступ к значениям
# Доступ к значению по ключу
name = my_dict['name'] # 'Alice'

# Метод get() для доступа с предоставлением значения по умолчанию
age = my_dict.get('age', 0) # 26
phone = my_dict.get('phone', 'Not Provided') # 'Not Provided'


4⃣Удаление элементов
# Удаление элемента по ключу
del my_dict['email']

# Метод pop() возвращает значение и удаляет элемент
city = my_dict.pop('city', 'Not Found') # 'New York'


5⃣Перебор элементов словаря
# Перебор ключей
for key in my_dict:
print(key)

# Перебор значений
for value in my_dict.values():
print(value)

# Перебор пар ключ-значение
for key, value in my_dict.items():
print(f'{key}: {value}')


🚩Основные методы

`keys()`

Возвращает все ключи словаря.
`values()`
Возвращает все значения словаря.
`items()`
Возвращает все пары "ключ-значение".
`update(other_dict)`
Обновляет словарь, добавляя пары "ключ-значение" из другого словаря.
`clear()`
Удаляет все элементы из словаря.

🚩Пример использования

# Создание словаря с информацией о студенте
student = {
'name': 'John',
'age': 22,
'courses': ['Math', 'CompSci']
}

# Добавление нового ключа-значения
student['phone'] = '555-5555'

# Изменение значения по ключу
student['name'] = 'John Doe'

# Доступ к значению по ключу
print(student['name']) # 'John Doe'

# Удаление элемента
del student['age']

# Перебор элементов словаря
for key, value in student.items():
print(f'{key}: {value}')


Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Как работает dropout?

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

🚩Механизм работы

🟠Во время обучения:
На каждом шаге обучения случайным образом выбирается подмножество нейронов, которые будут отключены. Отключенные нейроны не участвуют в прямом и обратном проходе на текущем этапе. Этот процесс повторяется на каждом этапе обучения, причем каждое отключение производится независимо.

🟠Во время тестирования:
На этапе предсказания (тестирования) dropout не применяется. Для компенсации эффекта, вызванного отключением нейронов на этапе обучения, все веса сети масштабируются в соответствии с вероятностью dropout
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical

# Загрузка данных
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape((X_train.shape[0], 28 * 28)).astype('float32') / 255
X_test = X_test.reshape((X_test.shape[0], 28 * 28)).astype('float32') / 255

y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

# Создание модели
model = Sequential()
model.add(Dense(512, activation='relu', input_shape=(28 * 28,)))
model.add(Dropout(0.5)) # Dropout с вероятностью 0.5
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

# Компиляция модели
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

# Обучение модели
model.fit(X_train, y_train, epochs=20, batch_size=128, validation_data=(X_test, y_test))

# Оценка модели
score = model.evaluate(X_test, y_test)
print(f'Точность на тестовых данных: {score[1] * 100:.2f}%')


🚩Зачем нужен

🟠Предотвращение переобучения:
Dropout помогает нейронной сети не запоминать обучающие данные, а обучаться выявлять общие закономерности.
🟠Снижение взаимозависимости нейронов:
Отключение случайных нейронов заставляет остальные нейроны адаптироваться и работать независимо, что улучшает устойчивость модели.
🟠Улучшение обобщающей способности:
Dropout повышает способность модели хорошо работать на новых, невидимых данных.

Ставь 👍 и забирай 📚 Базу знаний
🤔 Как делается прунинг деревьев?

1. Pre-pruning: остановка роста дерева по заранее заданным критериям (глубина, минимальный размер листа).
2. Post-pruning: удаление "слабых" ветвей после построения дерева для улучшения обобщения.
3. Метрики, такие как ошибка на валидационной выборке, помогают оценить, какие ветви обрезать.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как можно классифицировать бинарные картинки фигур?

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

🟠Предобработка данных
Первый шаг включает подготовку данных для обучения модели.
🟠Нормализация и масштабирование
Нормализация: Преобразование значений пикселей в диапазон [0, 1].
Масштабирование: Преобразование изображений к единому размеру для обеспечения согласованности данных.
🟠Аугментация данных
Ротация, масштабирование, сдвиг: Создание дополнительных данных для улучшения обобщающей способности модели.

Пример кода на Python (используя OpenCV и NumPy):
import cv2
import numpy as np

def preprocess_image(image):
# Масштабирование изображения до размера 28x28
image_resized = cv2.resize(image, (28, 28))
# Нормализация значений пикселей
image_normalized = image_resized / 255.0
return image_normalized

def augment_image(image):
# Ротация изображения на случайный угол
angle = np.random.randint(-30, 30)
M = cv2.getRotationMatrix2D((14, 14), angle, 1.0)
augmented_image = cv2.warpAffine(image, M, (28, 28))
return augmented_image


🟠Оценка и улучшение модели
Метрики оценки: Точность (accuracy), точность (precision), полнота (recall), F1-score.
Кросс-валидация: Для оценки обобщающей способности модели.

Ставь 👍 и забирай 📚 Базу знаний
🤔 За что мэп штрафует больше: за перепрогноз или недопрогноз?

MAP (Mean Average Precision) больше штрафует за недопрогноз (упущенные релевантные элементы), так как метрика ориентирована на точность в верхней части ранжированного списка.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥1