Data Science | Вопросы собесов
СтатистикаСайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
- Последний пост
- 13:47
- Последнее чтение
- 15:56
- Постов за неделю
- 10
- Всего постов
- 23
- Тип
- открытый
- Язык
- русский
- Категория
- Познавательное
- В каталоге с
- 13 авг.
- 1/24сутки в ленте
- 214
- 1/48двое суток
- 245
- 1/72трое суток
- 264
Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.
Посты
видео или голосовое, без подписи
🤔 Как можно сравнивать два ненормальных распределения? 🚩Непараметрические тесты 🟠Тест Манна-Уитни (U-тест Манна-Уитни) Используется для сравнения двух независимых выборок. Тест проверяет, различаются ли распределения значений между двумя группами. from scipy.stats import mannwhitneyu data1 = [1, 2, 3, 4, 5] data2 = [2, 3, 4, 5, 6] stat, p = mannwhitneyu(data1, data2) print(f'U-статистика: {stat}, p-значение: {p}') 🟠Тест Уилкоксона (Wilcoxon signed-rank test) Используется для сравнения двух связанных выборок или парных наблюдений. from scipy.stats import wilcoxon before = [20, 30, 40, 50, 60] after = [21, 29, 39, 51, 59] stat, p = wilcoxon(before, after) print(f'W-статистика: {stat}, p-значение: {p}') 🟠Критерий Колмогорова-Смирнова (Kolmogorov-Smirnov test) Используется для сравнения формы двух распределений. from scipy.stats import ks_2samp data1 = [1, 2, 3, 4, 5] data2 = [2, 3, 4, 5, 6] stat, p = ks_2samp(data1, data2) print(f'KS-статистика: {stat}, p-значение: {p}') 🚩Визуализация 🟠Гистограммы и плотности Построение гистограмм и графиков плотности для визуального сравнения распределений. import matplotlib.pyplot as plt import seaborn as sns data1 = [1, 2, 3, 4, 5] data2 = [2, 3, 4, 5, 6] sns.histplot(data1, kde=True, color='blue', label='Data1', alpha=0.5) sns.histplot(data2, kde=True, color='red', label='Data2', alpha=0.5) plt.legend() plt.show() 🟠Boxplots (ящики с усами) Помогают сравнить распределения и выявить отличия в медиане, квартилях и выбросах. data1 = [1, 2, 3, 4, 5] data2 = [2, 3, 4, 5, 6] plt.boxplot([data1, data2], labels=['Data1', 'Data2']) plt.show() 🚩Другие методы 🟠Коэффициент Спирмена (Spearman's rank correlation) Проверяет монотонную связь между двумя выборками. from scipy.stats import spearmanr data1 = [1, 2, 3, 4, 5] data2 = [2, 3, 4, 5, 6] corr, p = spearmanr(data1, data2) print(f'Корреляция Спирмена: {corr}, p-значение: {p}') Ставь 👍 и забирай 📚 Базу знаний
видео или голосовое, без подписи
🤔 Почему в картинках используют StandardScaling вместо MinMaxScaling ? Использование методов нормализации данных, таких как StandardScaling и MinMaxScaling, зависит от особенностей данных и задач машинного обучения. В задачах обработки изображений StandardScaling (стандартизация) часто предпочтительнее MinMaxScaling (масштабирование к диапазону), и вот почему: 🚩Standard Scaling (стандартизация) Заключается в преобразовании данных таким образом, чтобы они имели нулевое среднее значение и единичное стандартное отклонение. 🟠Сохранение распределения данных Стандартизация сохраняет распределение данных, но изменяет масштаб. Это особенно важно для алгоритмов, чувствительных к масштабу данных, таких как градиентный спуск. 🟠Гибкость при разных диапазонах Изображения часто содержат пиксели с различными интенсивностями, и стандартизация помогает унифицировать данные, что улучшает сходимость моделей. 🟠Работа с алгоритмами Многие алгоритмы машинного обучения, такие как линейные модели и нейронные сети, лучше работают с данными, у которых нулевое среднее и единичное стандартное отклонение. Это помогает ускорить обучение и улучшить сходимость. from sklearn.preprocessing import StandardScaler import numpy as np # Пример изображения (грейскейл) image = np.array([[0, 50, 100], [150, 200, 255], [30, 70, 120]]) # Преобразование в одномерный массив image_flattened = image.flatten().reshape(-1, 1) # Стандартизация scaler = StandardScaler() image_scaled = scaler.fit_transform(image_flattened) # Возвращение к оригинальной форме image_standardized = image_scaled.reshape(image.shape) print(image_standardized) 🚩Min-Max Scaling (масштабирование к диапазону) Заключается в преобразовании данных таким образом, чтобы они находились в заданном диапазоне, обычно от 0 до 1. 🟠Простота интерпретации Преобразованные данные легко интерпретировать, так как все значения находятся в одном диапазоне. 🟠Подходит для некоторых задач Может быть полезно для алгоритмов, которые не зависят от нормальности данных, таких как методы на основе деревьев решений. 🟠Чувствительность к выбросам Масштабирование к диапазону очень чувствительно к выбросам, что может сильно исказить распределение данных. 🟠Сложность работы с градиентными методами Для методов, использующих градиенты, Min-Max Scaling может привести к неравномерным шагам в оптимизации, особенно если данные имеют различную дисперсию. from sklearn.preprocessing import MinMaxScaler import numpy as np # Пример изображения (грейскейл) image = np.array([[0, 50, 100], [150, 200, 255], [30, 70, 120]]) # Преобразование в одномерный массив image_flattened = image.flatten().reshape(-1, 1) # Масштабирование к диапазону 0-1 scaler = MinMaxScaler() image_scaled = scaler.fit_transform(image_flattened) # Возвращение к оригинальной форме image_minmax_scaled = image_scaled.reshape(image.shape) print(image_minmax_scaled) Ставь 👍 и забирай 📚 Базу знаний
видео или голосовое, без подписи
🤔 Что такое bootstrap? Bootstrap - это статистический метод, который позволяет оценивать распределение статистики выборки (например, среднего, медианы) путем многократного повторного выборочного отбора с возвращением из исходной выборки. 🚩Почему нужен bootstrap? В реальной жизни часто бывает сложно оценить неопределенность оценок из-за ограниченного объема данных. Bootstrap помогает преодолеть это ограничение, позволяя получить более точные доверительные интервалы и оценки ошибок для статистических параметров. 🚩Как используется bootstrap? 🟠Исходная выборка: Допустим, у вас есть исходная выборка данных объема \( n \). 🟠Повторные выборки: Вы многократно (например, 1000 или 10,000 раз) выбираете случайные подвыборки с возвращением из исходной выборки. Это означает, что каждый элемент может быть выбран несколько раз, а некоторые элементы могут не попасть в конкретную подвыборку. 🟠Вычисление статистики: Для каждой из повторных подвыборок вы вычисляете интересующую вас статистику (например, среднее, медиану). 🟠Оценка распределения: Получив множество значений статистики, вы можете построить эмпирическое распределение этой статистики, оценить доверительные интервалы, среднее значение и другие характеристики. import numpy as np # Исходные данные data = np.array([2.3, 5.1, 7.4, 2.9, 6.5, 4.8, 3.1, 5.7, 8.2, 3.4]) # Параметры bootstrap n_iterations = 1000 n_size = len(data) # Массив для хранения значений средней из каждой подвыборки means = [] # Процесс bootstrap for _ in range(n_iterations): sample = np.random.choice(data, size=n_size, replace=True) sample_mean = np.mean(sample) means.append(sample_mean) # Вычисление доверительного интервала (например, 95%) lower_bound = np.percentile(means, 2.5) upper_bound = np.percentile(means, 97.5) print(f"Среднее значение: {np.mean(means)}") print(f"95% доверительный интервал: [{lower_bound}, {upper_bound}]") Ставь 👍 и забирай 📚 Базу знаний
видео или голосовое, без подписи
🤔 Сравни архитектуру RNN, CNN, трансформера Архитектуры RNN, CNN и Transformer используются в глубоком обучении для разных задач. Давайте разберём их принципы работы, различия и области применения. 🚩Рекуррентные нейронные сети (RNN) Используются для работы с последовательными данными (текст, аудио, временные ряды). В RNN выход предыдущего состояния влияет на следующее состояние. Сеть запоминает последовательность, так как передаёт скрытое состояние \( h_t \) на следующий шаг. В классической RNN проблема исчезающего градиента, из-за чего трудно обрабатывать длинные последовательности. 🟠LSTM (Long Short-Term Memory) добавляет механизмы управления памятью (forget, input, output gate). 🟠GRU (Gated Recurrent Unit) упрощённая версия LSTM, но работает быстрее. Машинный перевод (seq2seq) Анализ временных рядов Обнаружение аномалий Плохо работает с длинными зависимостями Не поддерживает параллельные вычисления 🚩Сверточные нейронные сети (CNN) Используются для обработки изображений и данных с пространственными зависимостями. Применяет фильтры (свёртки) к изображению, извлекая признаки. Главные слои: 🟠Слой свёртки (Convolutional Layer) извлекает особенности изображения. 🟠Слой активации (ReLU) добавляет нелинейность. 🟠Слой субдискретизации (Pooling) уменьшает размерность. 🟠Полносвязные слои (FC Layers) делают финальную классификацию. Компьютерное зрение Обнаружение объектов Анализ медицинских снимков Плохо работает с последовательностями и контекстными зависимостями Требует много данных и вычислительных ресурсов 🚩 Трансформеры (Transformers) Используются для работы с последовательностями, заменяя RNN. Основной механизм – Self-Attention, который позволяет учитывать все элементы последовательности одновременно. Encoder-Decoder архитектура: Encoder обрабатывает входные данные. Decoder генерирует выходную последовательность. Для обучения используется механизм внимания (Attention Mechanism). 🟠Self-Attention определяет, какие части входных данных важны. 🟠Position Encoding добавляет информацию о порядке слов. 🟠Feed Forward Layers обрабатывает признаки после self-attention. NLP: GPT, BERT, T5 Машинный перевод (Google Translate) Генерация текста и изображений (ChatGPT, DALL-E) Требуют много вычислительных ресурсов Плохо работают с короткими и табличными данными Ставь 👍 и забирай 📚 Базу знаний
видео или голосовое, без подписи
🤔 В чем отличия между loc и iloc? В pandas `loc` используется для доступа по метке (label) индекса, а `iloc` — для доступа по числовому индексу, независимо от того, как промаркированы индексы. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
видео или голосовое, без подписи
🤔 Какие методы регуляризации знаешь? Это набор методов, которые помогают предотвратить переобучение модели, уменьшая сложность модели или ограничивая её способность к чрезмерному подгонке под обучающие данные. Вот основные методы регуляризации: 🟠L1 и L2-регуляризация (регуляризация норм L1 и L2) L1-регуляризация (Lasso) В регуляризацию добавляется сумма абсолютных значений коэффициентов весов модели. Формула: \( L1 = \lambda \sum_{i} |w_i| \), где \( \lambda \) — гиперпараметр регуляризации. Преимущество: Стимулирует разреженность, заставляя некоторые веса становиться равными нулю, что помогает в выборе признаков. Недостаток: Могут игнорироваться малые, но значимые признаки. L2-регуляризация (Ridge): Добавляется сумма квадратов весов модели. Формула: \( L2 = \lambda \sum_{i} w_i^2 \).Преимущество: Регуляризует модель, не делая веса нулевыми, помогает в борьбе с мультиколлинеарностью. Недостаток: Не отбирает признаки, оставляя их все from sklearn.linear_model import Ridge, Lasso # Ridge ridge_model = Ridge(alpha=1.0) ridge_model.fit(X_train, y_train) # Lasso lasso_model = Lasso(alpha=0.1) lasso_model.fit(X_train, y_train) 🟠Dropout Используется в нейронных сетях. В процессе обучения случайно "выключает" часть нейронов, заставляя сеть учиться более устойчивым признакам. Пример: при Dropout с вероятностью 0.5 половина нейронов в слое будет игнорироваться на каждой итерации. Преимущество: Снижает зависимость от определённых нейронов, улучшая обобщающую способность сети. import tensorflow as tf from tensorflow.keras.layers import Dropout, Dense model = tf.keras.Sequential([ Dense(128, activation='relu'), Dropout(0.5), # Удаляем 50% нейронов Dense(10, activation='softmax') ]) 🟠Раннее прекращение обучения (Early Stopping) Останавливает обучение, когда ошибка на валидационной выборке перестаёт уменьшаться. Преимущество: предотвращает переобучение без необходимости добавления дополнительной регуляризации. Недостаток: Может остановить обучение до достижения оптимального результата. from keras.callbacks import EarlyStopping early_stopping = EarlyStopping(monitor='val_loss', patience=5) model.fit(X_train, y_train, validation_data=(X_val, y_val), callbacks=[early_stopping]) 🟠Нормализация и стандартизация данных Хотя это больше подготовка данных, правильное масштабирование (например, через Min-Max Scaling или Z-Score) может улучшить регуляризацию модели, сделав её более устойчивой к шуму. from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_scaled = scaler.fit_transform(X) 🟠Регуляризация через ограничение весов (Weight Constraint) Вводятся ограничения на значения весов, например, они должны оставаться в пределах заданного диапазона. from tensorflow.keras.constraints import MaxNorm from tensorflow.keras.layers import Dense layer = Dense(128, activation='relu', kernel_constraint=MaxNorm(3)) 🟠Аугментация данных Увеличение объёма данных с помощью преобразований, таких как поворот изображений, изменение яркости и т. д. Преимущество: Искусственно увеличивает выборку, что уменьшает риск переобучения. 🟠Batch Normalization Стабилизирует обучение, нормализуя выходы скрытых слоёв. Это также действует как лёгкая форма регуляризации. from tensorflow.keras.layers import BatchNormalization model.add(BatchNormalization()) 🟠Сложные методы (Elastic Net и DropConnect) Elastic Net: Комбинация L1 и L2-регуляризации. DropConnect: Аналог Dropout, но выключаются не нейроны, а их веса. Ставь 👍 и забирай 📚 Базу знаний
видео или голосовое, без подписи
🤔 Как работает память в питоне? Работа с памятью в Python основывается на управлении объектами, сборке мусора и использовании кучи (heap) для динамического распределения памяти. 🚩Концепции управления памятью 🟠Объекты и их управление В Python все является объектом, включая числа, строки, функции и классы. Каждый объект состоит из двух частей: заголовка и данных. Заголовок включает тип объекта и счетчик ссылок, а данные содержат значение объекта. 🟠Куча (Heap) Все объекты в Python хранятся в куче, которая управляется интерпретатором. Куча используется для динамического распределения памяти, что позволяет эффективно управлять памятью. 🟠Счетчик ссылок Python использует счетчик ссылок для отслеживания, сколько раз объект используется в программе. Счетчик ссылок увеличивается при создании новой ссылки на объект и уменьшается при удалении ссылки. Когда счетчик ссылок объекта становится равным нулю, объект считается неиспользуемым и подлежит удалению. 🟠Сборка мусора (Garbage Collection) Python использует механизм сборки мусора для удаления неиспользуемых объектов и освобождения памяти. Основной алгоритм сборки мусора основан на циклическом сборе (cyclic garbage collection), который позволяет находить и удалять циклические ссылки (объекты, которые ссылаются друг на друга). 🚩Как работает 🟠Счетчик ссылок Когда объект создается, его счетчик ссылок устанавливается в 1. При создании новой ссылки на объект счетчик увеличивается на 1, при удалении ссылки — уменьшается на 1. Когда счетчик ссылок становится равным нулю, объект удаляется, а память освобождается. 🟠Циклический сборщик мусора Основной сборщик мусора Python способен обнаруживать циклические ссылки, которые невозможно удалить с помощью простого счетчика ссылок. Сборщик мусора периодически просматривает объекты и их ссылки, чтобы найти циклы и удалить неиспользуемые объекты. import sys # Создание объекта и проверка счетчика ссылок a = [1, 2, 3] print(sys.getrefcount(a)) # Обычно возвращает 2, так как есть ссылка a и временная ссылка для вызова функции # Увеличение счетчика ссылок b = a print(sys.getrefcount(a)) # Теперь возвращает 3, так как есть ссылки a, b и временная ссылка для вызова функции # Уменьшение счетчика ссылок del b print(sys.getrefcount(a)) # Теперь возвращает 2, так как ссылка b удалена # Сборка мусора import gc # Принудительный запуск сборщика мусора gc.collect() Ставь 👍 и забирай 📚 Базу знаний
🤔 В чем отличие градиентного бустинга над деревьями от случайного леса Какие базовые параметры настраиваются? Являются популярными ансамблевыми методами на основе деревьев решений. Они оба используют множество деревьев для улучшения точности и устойчивости модели, но делают это по-разному. Рассмотрим их отличия и основные параметры, которые настраиваются. 🚩Отличия между ними 🟠Основные концепции Случайный лес (Random Forest): Бэггинг (Bagging): Использует технику бэггинга для создания множества деревьев решений. Каждое дерево обучается на случайной подвыборке данных с заменой. Комбинирование предсказаний: Предсказания всех деревьев усредняются (для регрессии) или берется мажоритарное голосование (для классификации). Параллельное обучение: Все деревья обучаются независимо друг от друга, что позволяет выполнять параллельные вычисления. Градиентный бустинг (Gradient Boosting): Бустинг (Boosting): Создает деревья последовательно, каждое следующее дерево исправляет ошибки предыдущего. Основная идея состоит в улучшении модели путем поэтапного добавления новых деревьев, которые минимизируют функцию ошибки. Аддитивная модель: Каждое новое дерево добавляется к ансамблю, корректируя ошибки предыдущих деревьев. Последовательное обучение: Все деревья обучаются последовательно, что делает этот метод менее подходящим для параллельных вычислений. 🟠Основные свойства Случайный лес: Устойчив к переобучению благодаря усреднению предсказаний. Работает хорошо без тщательной настройки гиперпараметров. Менее чувствителен к шуму в данных. Градиентный бустинг: Обычно достигает более высокой точности, но может быть более склонен к переобучению. Требует тщательной настройки гиперпараметров. Может работать медленнее, так как деревья строятся последовательно. 🚩Основные параметры для настройки 🟠Случайный лес n_estimators: Количество деревьев в лесу. Увеличение этого параметра обычно улучшает точность, но увеличивает время обучения и предсказания. max_depth: Максимальная глубина дерева. Ограничение глубины деревьев может предотвратить переобучение. min_samples_split: Минимальное количество образцов, необходимых для разделения узла. Увеличение этого параметра может привести к более простым деревьям и уменьшению переобучения. min_samples_leaf: Минимальное количество образцов в листе. Увеличение этого параметра также может помочь предотвратить переобучение. max_features: Максимальное количество признаков, используемых для поиска лучшего разделения. Уменьшение этого параметра может уменьшить корреляцию между деревьями и уменьшить переобучение. 🟠Градиентный бустинг n_estimators: Количество деревьев. Большое количество деревьев может улучшить производительность, но также может привести к переобучению. learning_rate: Коэффициент скорости обучения. Меньшие значения требуют большего количества деревьев, но могут улучшить общую производительность. max_depth: Максимальная глубина каждого дерева. Глубокие деревья могут захватывать сложные зависимости, но также могут быть склонны к переобучению. min_samples_split: Минимальное количество образцов, необходимых для разделения узла. Как и в случайном лесу, увеличение этого параметра может привести к более простым деревьям и уменьшению переобучения. Ставь 👍 и забирай 📚 Базу знаний
🤔 Как систематическая ошибка и дисперсии связаны между собой? Высокая систематическая ошибка (bias) уменьшает сложность модели, но снижает точность, а высокая дисперсия (variance) приводит к переобучению. Баланс между ними важен для оптимальной работы модели. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
🤔 Можно ли тьюнить только batch norm? Да, можно тюнить только Batch Normalization (BatchNorm) слои в нейронной сети, заморозив остальные параметры. 🟠Предобученная модель адаптируется к новым данным фиксируются веса сверточных или полносвязных слоев, но обновляются параметры BatchNorm, чтобы скорректировать статистики (mean, variance) под новый датасет. 🟠Финетюнинг при небольшом размере данных если данных мало, обновление только BatchNorm слоев может помочь адаптироваться без переобучения всей модели. 🟠Ускорение обучения тюнинг только BatchNorm слоев уменьшает число обновляемых параметров, снижая вычислительные затраты. 🚩Как это работает? BatchNorm содержит обучаемые параметры: γ (scale) и β (shift) – которые позволяют нормализованному выходу масштабироваться и смещаться. running_mean и running_variance – обновляются во время тренировки, даже если веса других слоев зафиксированы. При тюнинге только BatchNorm Градиенты всех других слоев замораживаются (requires_grad = False). BatchNorm слои остаются обучаемыми (requires_grad = True). running_mean и running_variance обновляются в режиме train(), но не в eval(). 🚩В каких случаях это плохо? Если данные очень сильно отличаются от тех, на которых обучалась исходная модель, тюнинг только BatchNorm может быть недостаточным. При маленьких батчах статистики BatchNorm могут становиться нестабильными. Ставь 👍 и забирай 📚 Базу знаний
🤔 Как делается прунинг деревьев? 1. Pre-pruning: остановка роста дерева по заранее заданным критериям (глубина, минимальный размер листа). 2. Post-pruning: удаление "слабых" ветвей после построения дерева для улучшения обобщения. 3. Метрики, такие как ошибка на валидационной выборке, помогают оценить, какие ветви обрезать. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
🤔 В чем разница между пивот и пивоттэйбл? Функции pivot и pivot_table обе предназначены для реорганизации и сводки данных, но они используются в разных сценариях и имеют некоторые ключевые отличия. 🚩Метод pivot Используется для преобразования данных из длинного формата в широкий. Он создаёт новый DataFrame, где один или несколько столбцов используются в качестве индексов, один столбец используется для столбцов новой таблицы, и один столбец для значений новой таблицы. Основное ограничение pivot заключается в том, что комбинация индекса и столбцов должна быть уникальной, иначе метод вызовет ошибку. import pandas as pd data = pd.DataFrame({ 'date': ['2020-01-01', '2020-01-01', '2020-01-02', '2020-01-02'], 'variable': ['A', 'B', 'A', 'B'], 'value': [1, 2, 3, 4] }) # Преобразование в широкий формат pivot_df = data.pivot(index='date', columns='variable', values='value') print(pivot_df) 🚩Метод pivot_table Более сложный и гибкий, он используется для создания сводных таблиц. pivot_table может агрегировать данные по одному или нескольким ключам на основе суммы, среднего, максимума, минимума или других агрегатных функций. pivot_table также способен обрабатывать повторяющиеся значения за счёт агрегации. import pandas as pd data = pd.DataFrame({ 'date': ['2020-01-01', '2020-01-01', '2020-01-02', '2020-01-02'], 'variable': ['A', 'A', 'B', 'B'], 'value': [1, 2, 3, 4] }) # Создание сводной таблицы pivot_table_df = data.pivot_table(index='date', columns='variable', values='value', aggfunc='sum') print(pivot_table_df) 🚩Основные различия 🟠Уникальность данных pivot требует уникальных пар индекс/столбец и выдаст ошибку в случае дубликатов. pivot_table может агрегировать дублирующиеся данные, используя функцию агрегации. 🟠Гибкость pivot_table предлагает дополнительные параметры, такие как aggfunc, которые позволяют более гибко обрабатывать данные. Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое recall? Recall (полнота) — это метрика, показывающая, какая доля истинных положительных случаев была правильно предсказана моделью. Она рассчитывается как отношение количества истинно положительных предсказаний к сумме истинно положительных и ложно отрицательных. Recall важен, когда важно минимизировать количество пропущенных положительных случаев. Высокий recall означает, что модель почти не пропускает положительные случаи. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний