TGViewer
Channel Public Channel
Data Science | Вопросы собесов

Data Science | Вопросы собесов

@easy_ds

Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy

Контакт для рекламы: @sendme_ads
Subscribers
4.9K
Photos
39
Videos
0
Links
1.6K

Showing posts older than #2667 · Back to latest

Older Posts 20 shown
Post #2666 359
🤔 Как при проверки гипотезы разбить все существующие магазины компании на две группы ?

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

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

🚩Случайное разделение

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

# Предположим, у нас есть список всех магазинов
stores = ["Store_1", "Store_2", "Store_3", ..., "Store_N"]

# Перемешиваем список
random.shuffle(stores)

# Делим список пополам
mid_index = len(stores) // 2
group_A = stores[:mid_index]
group_B = stores[mid_index:]


🚩Стратифицированное разделение

Если магазины различаются по важным характеристикам (например, размер магазина, местоположение, объём продаж), можно использовать стратифицированное разделение. Это позволит убедиться, что каждая группа будет представлять весь спектр магазинов.
import pandas as pd
from sklearn.model_selection import train_test_split

# Допустим, у нас есть DataFrame с данными о магазинах
data = pd.DataFrame({
'store_id': stores,
'sales_volume': [100, 200, 150, ..., 120],
'location': ['urban', 'rural', 'suburban', ..., 'urban']
})

# Разделяем данные на две группы с учетом местоположения
group_A, group_B = train_test_split(data, test_size=0.5, stratify=data['location'])


🚩Разделение по критериям

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

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

Ставь 👍 и забирай 📚 Базу знаний
  • 👍 1
Post #2664 310
🤔 Какие подходы понижения размерности известны?

Основные подходы понижения размерности включают метод главных компонент (PCA), сингулярное разложение (SVD), t-SNE и UMAP. PCA снижает размерность данных, находя новые оси, которые объясняют наибольшую дисперсию данных. t-SNE и UMAP используются для визуализации данных в пространстве низкой размерности, сохраняя их топологическую структуру. Эти методы позволяют уменьшить количество признаков при сохранении важной информации.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Post #2662 301
🤔 Что такое генератор, декоратор, итератор в питоне?

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

🚩Генератор (Generator)

Это функции, которые позволяют вам итерировать через набор данных. Они используются для создания итераторов в Python. Генераторы создаются с использованием ключевого слова yield.
def simple_generator():
yield 1
yield 2
yield 3

gen = simple_generator()

print(next(gen)) # Вывод: 1
print(next(gen)) # Вывод: 2
print(next(gen)) # Вывод: 3


🚩Декоратор (Decorator)

Это функции, которые модифицируют или расширяют поведение других функций или методов. Они часто используются для логирования, контроля доступа, измерения времени выполнения и других задач.
def my_decorator(func):
def wrapper():
print("Что-то происходит до вызова функции")
func()
print("Что-то происходит после вызова функции")
return wrapper

@my_decorator
def say_hello():
print("Hello!")

say_hello()

# Вывод:
# Что-то происходит до вызова функции
# Hello!
# Что-то происходит после вызова функции


🚩Итератор (Iterator)

Это объекты, которые позволяют перебирать (итерировать) элементы коллекции (например, списков, кортежей и т.д.). Итератор должен реализовывать методы __iter__() и __next__().
class MyIterator:
def __init__(self, limit):
self.limit = limit
self.counter = 0

def __iter__(self):
return self

def __next__(self):
if self.counter < self.limit:
self.counter += 1
return self.counter
else:
raise StopIteration

my_iter = MyIterator(3)

for num in my_iter:
print(num)

# Вывод:
# 1
# 2
# 3


🚩Сравнение и использование

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

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

🟠Итераторы
Предоставляют интерфейс для последовательного доступа к элементам коллекции без необходимости знать внутреннюю структуру коллекции.

Ставь 👍 и забирай 📚 Базу знаний
Post #2660 313
🤔 Как использовать P-value, когда мы проверяем гипотезу?

P-value показывает вероятность получения текущих результатов при условии, что нулевая гипотеза верна. Если P-value ниже уровня значимости, нулевая гипотеза отвергается.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 👍 1
Post #2659 361
🤔 Что такое переобучение модели ?

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

🚩Причины переобучения

🟠Слишком сложная модель
Если модель имеет слишком много параметров по сравнению с количеством обучающих примеров, она может "запомнить" данные вместо того, чтобы "понять" их.

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

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

🚩Признаки переобучения

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

🚩Как бороться с переобучением

🟠Использование валидационного набора данных
Разделение данных на обучающий, валидационный и тестовый наборы помогает контролировать и корректировать переобучение.
🟠Кросс-валидация
Оценка модели на различных подмножествах данных для проверки её устойчивости и способности к обобщению.
🟠Регуляризация
Такие методы, как L1 и L2 регуляризация, добавляют штрафы за большие веса в модели.
🟠Упрощение модели
Уменьшение числа параметров (например, уменьшение числа слоёв в нейронной сети или числа деревьев в ансамбле).
🟠Обрезка деревьев решений
Удаление частей дерева, которые не обеспечивают значительного улучшения предсказательной способности, для упрощения модели.
🟠Увеличение объёма данных
Больше данных может помочь модели лучше улавливать закономерности и тенденции, а не шумы.

from sklearn.linear_model import Ridge
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# Генерация синтетических данных
X, y = make_regression(n_samples=1000, n_features=20, noise=0.1)

# Разделение данных
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Обучение модели с регуляризацией
model = Ridge(alpha=1.0)
model.fit(X_train, y_train)

# Оценка модели
y_pred = model.predict(X_test)
print("MSE:", mean_squared_error(y_test, y_pred))


Ставь 👍 и забирай 📚 Базу знаний
Post #2656 311
🤔 Какие проблемы могут возникнуть при прогнозе LTV на полгода вперед?

Основные проблемы при прогнозе LTV (Lifetime Value) на длительный срок включают в себя высокую неопределённость в поведении пользователей, изменение рыночных условий и устаревание данных. Кроме того, прогнозы могут быть неточными из-за сезонных изменений или новых факторов, которые не были учтены в модели. Также возможна недостаточность данных для точного прогнозирования поведения пользователей на долгий срок. Модели могут переоценивать или недооценивать реальные значения LTV.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Post #2654 294
🤔 Как сделать чтобы модель предсказывала не число, а распределение?

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

🟠Использование вероятностных моделей
Байесовские нейронные сети (Bayesian Neural Networks) расширяют обычные нейронные сети, вводя вероятностные параметры, что позволяет выводить распределение выходных значений. Библиотека Pyro для PyTorch
import torch
import pyro
import pyro.distributions as dist
from pyro.infer import SVI, Trace_ELBO
from pyro.optim import Adam
import pyro.nn as pnn

class BayesianNN(pnn.PyroModule):
def __init__(self, in_features, out_features):
super().__init__()
self.linear = pnn.PyroModule[nn.Linear](in_features, out_features)
self.linear.weight = pnn.PyroSample(dist.Normal(0., 1.).expand([out_features, in_features]).to_event(2))
self.linear.bias = pnn.PyroSample(dist.Normal(0., 10.).expand([out_features]).to_event(1))

def forward(self, x, y=None):
mean = self.linear(x)
sigma = pyro.sample("sigma", dist.Uniform(0., 10.))
with pyro.plate("data", x.shape[0]):
obs = pyro.sample("obs", dist.Normal(mean, sigma), obs=y)
return mean

def model(x, y=None):
return BayesianNN(x.shape[1], 1)(x, y)

def guide(x, y=None):
bayesian_nn = BayesianNN(x.shape[1], 1)
bayesian_nn.linear.weight = pnn.PyroSample(dist.Normal(torch.randn(bayesian_nn.linear.weight.shape), 0.1)
.expand(bayesian_nn.linear.weight.shape).to_event(2))
bayesian_nn.linear.bias = pnn.PyroSample(dist.Normal(torch.randn(bayesian_nn.linear.bias.shape), 0.1)
.expand(bayesian_nn.linear.bias.shape).to_event(1))
return bayesian_nn(x, y)

x = torch.randn(100, 1)
y = 3 * x + torch.randn(100, 1)

pyro.clear_param_store()
svi = SVI(model, guide, Adam({"lr": 0.01}), loss=Trace_ELBO())
num_iterations = 5000
for j in range(num_iterations):
loss = svi.step(x, y)
if j % 1000 == 0:
print(f"[iteration {j+1}] loss: {loss}")

predictive = pyro.infer.Predictive(model, guide=guide, num_samples=1000)
samples = predictive(x)


🟠Модели с гетероскедастичностью
Гетероскедастическая регрессия на Keras
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

# Создание модели
inputs = keras.Input(shape=(num_features,))
x = layers.Dense(64, activation="relu")(inputs)
x = layers.Dense(64, activation="relu")(x)
mean = layers.Dense(1)(x)
log_var = layers.Dense(1)(x)
model = keras.Model(inputs=inputs, outputs=[mean, log_var])

# Функция потерь
def nll(y_true, y_pred):
mean, log_var = y_pred
precision = tf.exp(-log_var)
return tf.reduce_mean(0.5 * tf.math.log(2 * np.pi) + 0.5 * log_var + 0.5 * tf.square(y_true - mean) * precision)

model.compile(optimizer="adam", loss=nll)

# Обучение модели
model.fit(x_train, [y_train, y_train], epochs=100, batch_size=32)


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 2
Post #2652 324
🤔 В чем отличия между char и varchar?

В SQL `CHAR` представляет собой тип данных с фиксированной длиной, тогда как `VARCHAR` — с переменной длиной. `CHAR` быстрее, но потенциально занимает больше места при хранении коротких строк. `VARCHAR` эффективнее использует пространство для хранения текста, размер которого меняется.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 🔥 1
Post #2651 341
🤔 Какие существуют способы кодирования категориальных переменных?

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

🟠One-Hot Encoding (Одинарное кодирование)
Преобразует каждую категорию в бинарный вектор. Для каждой категории создается отдельный бинарный признак.
Категориальный признак "Цвет" с возможными значениями "красный", "синий" и "зеленый" будет преобразован в три бинарных признака.
import pandas as pd
from sklearn.preprocessing import OneHotEncoder

# Пример данных
data = {'Цвет': ['красный', 'синий', 'зеленый']}
df = pd.DataFrame(data)

# Преобразование категориального признака с использованием OneHotEncoder
encoder = OneHotEncoder(sparse=False)
encoded_colors = encoder.fit_transform(df[['Цвет']])

# Создание DataFrame с закодированными признаками
encoded_df = pd.DataFrame(encoded_colors, columns=encoder.get_feature_names_out(['Цвет']))
print(encoded_df)


🟠Label Encoding (Метка кодирования)
Преобразует каждую категорию в уникальное целое число. Этот метод прост, но может быть проблематичным для линейных моделей, так как они могут интерпретировать числовые значения как упорядоченные.
from sklearn.preprocessing import LabelEncoder

# Пример данных
data = {'Цвет': ['красный', 'синий', 'зеленый']}
df = pd.DataFrame(data)

# Преобразование категориального признака с использованием LabelEncoder
encoder = LabelEncoder()
df['Цвет_код'] = encoder.fit_transform(df['Цвет'])
print(df)


🟠Target Encoding (Целевая кодировка)
Заменяет категориальные признаки средним значением целевой переменной для каждой категории. Этот метод может улучшить качество модели, но требует осторожности, чтобы избежать переобучения.
import category_encoders as ce

# Пример данных
data = {'Цвет': ['красный', 'синий', 'зеленый', 'красный', 'синий'],
'Цена': [10, 15, 12, 10, 20]}
df = pd.DataFrame(data)

# Преобразование категориального признака с использованием TargetEncoder
encoder = ce.TargetEncoder(cols=['Цвет'])
df['Цвет_код'] = encoder.fit_transform(df['Цвет'], df['Цена'])
print(df)


🟠Ordinal Encoding (Порядковое кодирование)
Присваивает каждой категории уникальное целое число, как и Label Encoding, но используется, когда категории имеют естественный порядок.
from sklearn.preprocessing import OrdinalEncoder

# Пример данных
data = {'Размер': ['маленький', 'средний', 'большой']}
df = pd.DataFrame(data)

# Преобразование категориального признака с использованием OrdinalEncoder
encoder = OrdinalEncoder(categories=[['маленький', 'средний', 'большой']])
df['Размер_код'] = encoder.fit_transform(df[['Размер']])
print(df)


🟠Binary Encoding (Бинарное кодирование)
Сначала преобразует категории в целые числа, а затем кодирует эти числа в двоичную форму.
import category_encoders as ce

# Пример данных
data = {'Цвет': ['красный', 'синий', 'зеленый']}
df = pd.DataFrame(data)

# Преобразование категориального признака с использованием BinaryEncoder
encoder = ce.BinaryEncoder(cols=['Цвет'])
df = encoder.fit_transform(df)
print(df)


🟠Frequency Encoding (Частотное кодирование)
Заменяет каждую категорию на частоту её появления в данных.
# Пример данных
data = {'Цвет': ['красный', 'синий', 'зеленый', 'красный', 'синий']}
df = pd.DataFrame(data)

# Преобразование категориального признака с использованием Frequency Encoding
df['Цвет_частота'] = df['Цвет'].map(df['Цвет'].value_counts()) / len(df)
print(df)


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 1
Post #2649 351
🤔 Что такое precision?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 👍 1
Post #2647 356
🤔 Какие коэффиценты с помощью машинного обучения подбираются?

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

🟠Линейная и логистическая регрессия
Веса (коэффициенты) признаков: Эти модели предсказывают выходное значение как взвешенную сумму входных признаков, где каждый признак умножается на соответствующий вес. В математической формулировке для линейной регрессии это выражается как \( y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + ... + \beta_n x_n \), где \( \beta_i \) — коэффициенты, которые модель стремится оптимизировать.
Свободный член (интерсепт, \(\beta_0\)): Это константа, добавляемая к взвешенной сумме, которая позволяет линейной функции не проходить обязательно через начало координат.

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

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

🟠Решающие деревья
Правила разделения: В решающих деревьях коэффициенты — это критерии разделения в каждом узле дерева, которые определяют, как данные будут разделяться на этапах решения.

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

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

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 👍 1
  • 🤔 1
Post #2643 414
🤔 Что такое map оценка?

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

🚩Как он работает

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

🟠Функция правдоподобия
Как и в MLE, используется функция правдоподобия, представляющая вероятность наблюдать данные при заданных параметрах.

🟠Апостериорное распределение
Апостериорное распределение параметра вычисляется на основе теоремы Байеса, которая связывает априорное распределение и функцию правдоподобия:
p(\theta | X) = \frac{p(X | \theta) \cdot p(\theta)}{p(X)}
где \( p(\theta | X) \) — апостериорное распределение, \( p(X | \theta) \) — функция правдоподобия, \( p(\theta) \) — априорное распределение, \( p(X) \) — вероятность данных (обычно выступает как нормализующий множитель).

🟠Максимизация апостериорного распределения
MAP оценка параметра \( \theta \) находится путём максимизации апостериорного распределения. Это оценка параметра, при которой апостериорное распределение достигает максимального значения.

Ставь 👍 и забирай 📚 Базу знаний
  • 👍 2
Post #2641 386
🤔 Что такое бэкпропагейшен (Backpropagation)?

Это алгоритм обновления весов в нейросети путем распространения ошибки от выхода к входу:
1. Прямой проход – данные проходят через сеть, вычисляя предсказания.
2. Вычисление ошибки – разница между предсказанием и истинным значением.
3. Обратное распространение ошибки – градиенты ошибки передаются назад через слои с помощью правила цепочки (chain rule).
4. Обновление весов – веса корректируются методом градиентного спуска.
Бэкпропагейшен – ключевой алгоритм, позволяющий обучать глубокие нейронные сети.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Post #2639 400
🤔 В чем разница между бэкингом и бустингом?

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

🚩Бэггинг (Bootstrap Aggregating)

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

🚩Бустинг

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

🚩Сравнение бэггинга и бустинга

🟠Обработка ошибок
Уменьшает дисперсию и менее чувствителен к выбросам, тогда как бустинг уменьшает как смещение, так и дисперсию, но может быть более чувствителен к выбросам из-за повышенного внимания к трудным случаям.
🟠Скорость и масштабируемость
Лучше масштабируется и может быть более эффективно реализован на параллельных системах по сравнению с бустингом, который требует последовательного обучения.
🟠Сложность настройки
Требует более тщательной настройки параметров, таких как скорость обучения или количество итераций, поскольку он более подвержен переобучению по сравнению с бэггингом.

Ставь 👍 и забирай 📚 Базу знаний
  • 👍 1
Post #2637 363
🤔 Как обучаются линейные модели?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 👍 1
Post #2636 378
🤔 Расскажи про метрики, классификацию?

Для оценки моделей классификации позволяют определить, насколько хорошо модель справляется с задачей предсказания классов.

🚩Основные метрики классификации

🟠Точность (Accuracy)
Доля правильных предсказаний. Когда классы сбалансированы.
\text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN}


🟠Полнота (Recall)
Доля правильно предсказанных положительных примеров. Когда важно минимизировать пропуск положительных случаев.
\text{Recall} = \frac{TP}{TP + FN}


🟠Точность (Precision)
Доля правильно предсказанных положительных примеров из всех предсказанных положительных. Когда важно минимизировать количество ложноположительных случаев.
\text{Precision} = \frac{TP}{TP + FP}


🟠F-мера (F-score)
Гармоническое среднее между точностью и полнотой. Когда нужно сбалансировать точность и полноту.
F_1 = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}


🟠Матрица ошибок (Confusion Matrix)
Таблица с количеством истинных положительных, истинных отрицательных, ложноположительных и ложноотрицательных предсказаний.

🟠ROC-кривая и AUC
ROC-кривая показывает соотношение истинно положительных и ложноположительных срабатываний при различных порогах. AUC – площадь под ROC-кривой. Для оценки качества моделей при различных порогах классификации.

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

Accuracy, Precision, Recall и F1-Score
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix

# Истинные метки и предсказанные метки
y_true = [0, 1, 1, 1, 0, 1, 0, 0, 1, 1]
y_pred = [0, 1, 0, 1, 0, 1, 0, 1, 1, 0]

# Вычисление метрик
accuracy = accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)
cm = confusion_matrix(y_true, y_pred)

print(f"Accuracy: {accuracy}")
print(f"Precision: {precision}")
print(f"Recall: {recall}")
print(f"F1 Score: {f1}")
print(f"Confusion Matrix:\n{cm}")


ROC-кривая и AUC
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, roc_auc_score

# Истинные метки и предсказанные вероятности
y_true = [0, 1, 1, 1, 0, 1, 0, 0, 1, 1]
y_scores = [0.1, 0.4, 0.35, 0.8, 0.2, 0.75, 0.3, 0.4, 0.85, 0.6]

# Вычисление ROC-кривой и AUC
fpr, tpr, thresholds = roc_curve(y_true, y_scores)
roc_auc = roc_auc_score(y_true, y_scores)

# Построение ROC-кривой
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC-кривая (AUC = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC-кривая')
plt.legend(loc="lower right")
plt.show()


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 1
Post #2634 369
🤔 Что такое мультиколлинеарность?

Это ситуация, когда признаки сильно коррелируют друг с другом.
- Это вызывает нестабильность линейных моделей, так как коэффициенты могут становиться большими и неинтерпретируемыми.
- Решения: удаление зависимых признаков, PCA, L1-регуляризация (Lasso).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 👍 1
Post #2633 404
🤔 Как с помощью линейной модели понять какие фичи можно сразу откинуть?

Использование линейной модели для выбора наиболее значимых признаков (фич) и отсеивания менее значимых может быть выполнено несколькими способами. Ниже я опишу наиболее популярные подходы:

Анализ коэффициентов линейной модели: В линейной модели значимость признаков определяется величиной и знаком коэффициентов при этих признаках. Если коэффициент признака мал или близок к нулю, это может указывать на его низкую значимость.
import numpy as np
from sklearn.linear_model import LinearRegression

# Пример данных
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
y = np.array([1, 2, 3, 4])

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

# Получение коэффициентов
coefficients = model.coef_

print(f"Коэффициенты модели: {coefficients}")


Интерпретация:

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

Регуляризация: Lasso (L1) и Ridge (L2): Методы регуляризации позволяют улучшить интерпретацию модели и выбрать значимые признаки:
🟠Lasso (L1): Принуждает некоторые коэффициенты быть равными нулю, эффективно отбирая признаки.
🟠Ridge (L2): Не отбирает признаки напрямую, но уменьшает влияние малозначимых признаков.
from sklearn.linear_model import Lasso

# Создание и обучение Lasso модели
lasso = Lasso(alpha=0.1) # Параметр alpha контролирует силу регуляризации
lasso.fit(X, y)

# Получение коэффициентов
coefficients = lasso.coef_

print(f"Коэффициенты Lasso модели: {coefficients}")


Интерпретация: Коэффициенты, которые стали нулевыми после применения Lasso, указывают на признаки, которые можно отсеять.

Методы оценки важности признаков (Feature Importance): Хотя это напрямую не относится к линейным моделям, такие методы как Random Forest или Gradient Boosting могут помочь оценить важность признаков.
from sklearn.ensemble import RandomForestRegressor

# Создание и обучение модели Random Forest
model = RandomForestRegressor()
model.fit(X, y)

# Получение важности признаков
importances = model.feature_importances_

print(f"Важность признаков: {importances}")


Ставь 👍 и забирай 📚 Базу знаний
Post #2631 379
🤔 Чем отличается итератор от генератора?

Итератор — это объект с методами iter и next, позволяющий поочерёдно перебирать элементы. Генератор — это удобная форма итератора, создаваемая функцией с использованием yield, которая сохраняет своё состояние между вызовами. Итераторы требуют ручной реализации, а генераторы упрощают создание итераций.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →