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

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

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}')


Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Как работает 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
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как работает градиентный спуск?

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

🚩Основные шаги алгоритма

1⃣Инициализация
Начните с случайного значения параметра(ов) \( \theta \) (например, веса в линейной регрессии).

2⃣Вычисление градиента
Определите градиент функции потерь в текущей точке \( \theta \). Градиент показывает направление наискорейшего увеличения функции, поэтому для минимизации мы движемся в противоположном направлении.

3⃣Обновление параметра
Обновите параметр, двигаясь в направлении, противоположном градиенту:
\theta := \theta - \eta \nabla_{\theta} J(\theta)
где \( \eta \) — это скорость обучения, которая определяет размер шага.

4⃣Повторение
Повторяйте шаги 2 и 3, пока не будет достигнут критерий остановки (например, когда изменение \( \theta \) становится незначительным или количество итераций превышает предел).

🚩Важные аспекты

🟠Скорость обучения \( \eta \)
Если скорость обучения слишком велика, может произойти "перепрыгивание" минимума, если слишком мала — процесс обучения будет очень медленным.

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

🟠Нормализация данных
При работе с многомерными данными рекомендуется нормализовать данные, чтобы обеспечить равномерное масштабирование признаков. Это ускоряет сходимость градиентного спуска.

import numpy as np

def gradient_descent(x, y, lr=0.01, epochs=1000):
m, b = 0, 0 # начальные параметры
n = len(y) # количество данных
for _ in range(epochs):
f = y - (m*x + b) # функция потерь
# Градиенты по m и b
dm = -2 * np.sum(x * f) / n
db = -2 * np.sum(f) / n
# Обновление параметров
m -= lr

* dm
b -= lr * db
return m, b

# Пример данных
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 5])

m, b = gradient_descent(x, y, lr=0.01, epochs=1000)
print(f"Наклон m: {m}, Пересечение b: {b}")


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 В чем отличия между loc и iloc?

В pandas `loc` используется для доступа по метке (label) индекса, а `iloc` — для доступа по числовому индексу, независимо от того, как промаркированы индексы.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Если говорить про бизнес, что лучше выбрать линейную модель или дерево?

Выбор между линейной моделью и деревом решений зависит от нескольких факторов:

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

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

🚩Примеры

🟠Линейная модель: прогноз продаж по цене
Допустим, у нас есть зависимость: чем выше цена, тем ниже продажи. Можно использовать линейную регрессию:
from sklearn.linear_model import LinearRegression

X = [[10], [20], [30], [40]] # Цена товара
y = [1000, 800, 600, 400] # Продажи

model = LinearRegression()
model.fit(X, y)

print(model.predict([[25]])) # Прогнозируем продажи при цене 25


🟠Дерево решений: кредитный скоринг
Допустим, банк решает, выдавать ли кредит. У клиента есть признаки: доход, возраст, наличие задолженности. Взаимодействия сложные, например:
- Если у человека низкий доход и есть задолженность, то отказ.
- Если высокий доход, но был просроченный кредит, нужно учитывать другие факторы.
from sklearn.tree import DecisionTreeClassifier

X = [[25, 30000, 0], [40, 60000, 1], [35, 80000, 0], [50, 50000, 1]] # Возраст, доход, задолженность
y = [0, 0, 1, 1] # 0 - отказ, 1 - одобрение

model = DecisionTreeClassifier()
model.fit(X, y)

print(model.predict([[30, 70000, 0]])) # Прогноз для нового клиента


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

Процесс обучения модели машинного обучения включает:
1. Предобработку данных – нормализация, удаление выбросов, кодирование категориальных признаков.
2. Выбор модели – линейная регрессия, дерево решений, нейросети и т. д.
3. Разделение данных – обучение (train), валидация (validation), тестирование (test).
4. Оптимизация параметров – подбор коэффициентов с помощью градиентного спуска или других методов.
5. Оценка качества – использование метрик (MSE, Accuracy, ROC-AUC).
Модель обучается за счет минимизации функции потерь и корректировки параметров.


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