Иметь много ложных срабатываний (ложноположительные результаты) или ложно-отрицательных срабатываний (ложноотрицательные результаты), зависит от конкретного контекста применения модели. Каждая ситуация имеет свои специфические последствия для обоих типов ошибок, и важно понимать, какие именно риски и стоимости связаны с каждым типом ошибки.
Это ситуация, когда модель неправильно предсказывает наличие условия или класса, когда на самом деле его нет. Например:
Ложноположительный результат означает, что законное письмо помечено как спам. Это может привести к упущению важной информации.
Ложноположительный результат может привести к ненужному стрессу, дополнительным исследованиям или даже лечению, которое не нужно.
Это случаи, когда модель неправильно предсказывает отсутствие условия или класса, когда на самом деле оно присутствует. Примеры:
Ложноотрицательный результат означает, что спам-письмо попадает в почтовый ящик пользователя. Это может быть менее критично, чем пропуск важного сообщения, но всё же нежелательно.
Ложноотрицательный результат может быть чрезвычайно опасен, поскольку пациент может не получить необходимое лечение, что может ухудшить его состояние и даже привести к смерти.
В контекстах, где на кону стоит безопасность (например, обнаружение неисправностей в самолётах или диагностика серьёзных заболеваний), ложноотрицательные результаты могут быть гораздо хуже, так как не обнаружение истинной проблемы может иметь фатальные последствия.
В ситуациях, где стоимость ложноположительных результатов высока (например, дорогое медицинское вмешательство, необходимость в котором отсутствует), предпочтительнее минимизировать FP.
В приложениях, связанных с пользовательским опытом, например, в рекомендательных системах или поисковых системах, лучше избегать FP, чтобы не ухудшать взаимодействие пользователя с системой.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1💊1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊1
Это функции, которые позволяют модифицировать или расширять поведение других функций или методов без изменения их кода. Они часто используются для логирования, контроля доступа, измерения времени выполнения и других задач. Декораторы предоставляют гибкий и элегантный способ изменения поведения функций и классов.
Это функция, которая принимает другую функцию в качестве аргумента и возвращает новую функцию, изменяющую или расширяющую поведение оригинальной функции.
Декораторы в Python применяются с использованием синтаксиса
@decorator_name
перед определением функции, которую нужно модифицировать.Определение декоратора
def my_decorator(func):
def wrapper():
print("Что-то происходит до вызова функции")
func()
print("Что-то происходит после вызова функции")
return wrapper
Применение декоратора
@my_decorator
def say_hello():
print("Hello!")
say_hello()
# Вывод:
# Что-то происходит до вызова функции
# Hello!
# Что-то происходит после вызова функции
Если функция, которую нужно декорировать, принимает аргументы, декоратор также должен быть написан так, чтобы он мог принимать и передавать эти аргументы.
Пример декоратора с аргументами
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Что-то происходит до вызова функции")
result = func(*args, **kwargs)
print("Что-то происходит после вызова функции")
return result
return wrapper
@my_decorator
def say_hello(name):
print(f"Hello, {name}!")
say_hello("Alice")
# Вывод:
# Что-то происходит до вызова функции
# Hello, Alice!
# Что-то происходит после вызова функции
Декораторы также могут применяться к методам классов.
Пример декоратора для метода класса
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Что-то происходит до вызова метода")
result = func(*args, **kwargs)
print("Что-то происходит после вызова метода")
return result
return wrapper
class MyClass:
@my_decorator
def say_hello(self, name):
print(f"Hello, {name}!")
obj = MyClass()
obj.say_hello("Alice")
# Вывод:
# Что-то происходит до вызова метода
# Hello, Alice!
# Что-то происходит после вызова метода
Python предоставляет несколько встроенных декораторов, таких как
@staticmethod
, @classmethod
и @property
.Пример использования встроенных декораторов
class MyClass:
@staticmethod
def static_method():
print("Это статический метод")
@classmethod
def class_method(cls):
print("Это метод класса")
@property
def some_property(self):
return "Это свойство"
obj = MyClass()
obj.static_method()
obj.class_method()
print(obj.some_property)
# Вывод:
# Это статический метод
# Это метод класса
# Это свойство
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
В машинном обучении часто используются различные базовые алгоритмы в зависимости от типа задачи и характеристик данных. Однако, некоторые алгоритмы являются особенно популярными и универсальными.
Линейная регрессия используется для задач регрессии, где цель – предсказать непрерывную переменную на основе одной или нескольких независимых переменных. Простота, интерпретируемость и эффективное обучение на больших объемах данных.
from sklearn.linear_model import LinearRegression
# Пример использования линейной регрессии
model = LinearRegression()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
Логистическая регрессия используется для задач бинарной классификации. Она оценивает вероятность принадлежности наблюдения к одному из двух классов. Простота, интерпретируемость и эффективность для линейно разделимых классов.
from sklearn.linear_model import LogisticRegression
# Пример использования логистической регрессии
model = LogisticRegression()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
KNN используется как для классификации, так и для регрессии. Алгоритм находит K ближайших обучающих примеров в пространстве признаков и предсказывает класс (или значение) на основе большинства (или среднего) этих соседей. Простота и отсутствие необходимости в явной фазе обучения.
from sklearn.neighbors import KNeighborsClassifier
# Пример использования K-ближайших соседей
model = KNeighborsClassifier(n_neighbors=5)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
Решающие деревья используются как для классификации, так и для регрессии. Дерево строится путем разбиения данных на подмножества на основе значений признаков. Интерпретируемость, способность работать с категориальными и числовыми данными, и выявление важности признаков.
from sklearn.tree import DecisionTreeClassifier
# Пример использования решающего дерева
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
Случайный лес состоит из множества решающих деревьев, обученных на различных подвыборках данных. Итоговое предсказание получается путем усреднения предсказаний отдельных деревьев. Высокая точность, устойчивость к переобучению и возможность обработки больших объемов данных.
from sklearn.ensemble import RandomForestClassifier
# Пример использования случайного леса
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
Градиентный бустинг создает ансамбль слабых моделей (обычно деревьев), обучаясь последовательно, чтобы уменьшить ошибку предыдущих моделей. Высокая точность, особенно для сложных задач с большими объемами данных.
from sklearn.ensemble import GradientBoostingClassifier
# Пример использования градиентного бустинга
model = GradientBoostingClassifier()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Это техника регуляризации в нейросетях, уменьшающая переобучение:
1. На каждой итерации обучения случайно зануляется часть нейронов.
2. Это предотвращает чрезмерную зависимость от отдельных признаков.
3. Во время предсказания Dropout не применяется, а выходы масштабируются.
Dropout делает нейросеть более устойчивой и снижает вероятность переобучения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Это встроенный тип данных, который представляет собой неупорядоченную коллекцию пар "ключ-значение". Он позволяет быстро извлекать значения по ключу, обеспечивая эффективный доступ к данным.
В словаре каждый ключ должен быть уникальным. Если добавить пару с существующим ключом, значение этого ключа будет перезаписано.
Ключи должны быть хэшируемыми, то есть они должны иметь неизменяемый тип данных (например, строки, числа, кортежи).
Значения в словаре могут быть любого типа данных и не обязательно уникальны.
# Пустой словарь
my_dict = {}
# Словарь с начальными значениями
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# Добавление нового ключа-значения
my_dict['email'] = '[email protected]'
# Изменение существующего значения
my_dict['age'] = 26
# Доступ к значению по ключу
name = my_dict['name'] # 'Alice'
# Метод get() для доступа с предоставлением значения по умолчанию
age = my_dict.get('age', 0) # 26
phone = my_dict.get('phone', 'Not Provided') # 'Not Provided'
# Удаление элемента по ключу
del my_dict['email']
# Метод pop() возвращает значение и удаляет элемент
city = my_dict.pop('city', 'Not Found') # 'New York'
# Перебор ключей
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}')
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Градиентный бустинг (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, строит деревья сверху вниз (leaf-wise).
лучший для категориальных признаков, использует особые методы кодирования.
Если важна высокая точность модели.
Если признаки имеют сложные нелинейные зависимости.
Если нужно предсказывать на табличных данных.
Не подходит, если данных мало – модель может переобучиться.
Требует тщательной настройки гиперпараметров.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Команды
DELETE
и TRUNCATE
в SQL используются для удаления данных из таблиц, но они работают по-разному и подходят для разных задач. Используется для удаления определённых записей из таблицы. Можно указать условие с помощью
WHERE
, чтобы удалить только нужные строки. НапримерDELETE FROM employees WHERE department = 'HR';
Удаление происходит построчно. Логируется каждая удалённая запись (затратно по производительности при больших объёмах данных). Можно откатить изменения с помощью транзакций, если используются
BEGIN TRANSACTION
и ROLLBACK
.Когда нужно удалить часть данных, а не все записи. Например, удаление сотрудников только из определённого отдела.
Используется для полного очищения таблицы. Удаляет все строки в таблице без возможности указания условия. Например:
TRUNCATE TABLE employees;
Работает быстрее, чем
DELETE
, так как не записывает подробный лог изменений. Удаляет данные "в обход" построчного удаления, очищая всю структуру. Нельзя откатить изменения, так как эта операция не поддерживает транзакции в большинстве СУБД.Когда нужно быстро очистить таблицу перед новой загрузкой данных. Например, перед массовой загрузкой обновлённых данных.
DELETE
-- Удалить только сотрудников из отдела HR
DELETE FROM employees WHERE department = 'HR';
TRUNCATE
-- Очистить таблицу сотрудников полностью
TRUNCATE TABLE employees;
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥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))
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Это две популярные модели для обработки естественного языка, разработанные на основе архитектуры трансформеров. Хотя обе модели имеют общее происхождение, они разработаны для разных целей и обладают различными архитектурными особенностями.
BERT: Использует энкодерную часть трансформера.
GPT: Использует декодерную часть трансформера.
BERT: Двунаправленный (bidirectional), то есть обучается, учитывая контекст как слева, так и справа от текущего слова.
GPT: Однонаправленный (unidirectional), то есть обучается, учитывая только контекст слева направо (или наоборот).
BERT: Обучается на задачах Masked Language Modeling (MLM) и Next Sentence Prediction (NSP).
MLM: Некоторые слова в предложении заменяются на маскированные токены, и модель должна предсказать эти слова.
NSP: Пара предложений используется для определения, идет ли одно предложение после другого.
GPT: Обучается на задаче Language Modeling (LM).
LM: Модель предсказывает следующее слово в предложении, учитывая предыдущие слова.
BERT: Лучше подходит для задач, требующих глубокого понимания контекста, таких как Named Entity Recognition (NER), Question Answering (QA) и текстовая классификация.
GPT: Лучше подходит для генерации текста, диалоговых систем, создания контента и задач, где важно продолжение текста.
BERT хорош для задач, где важно учитывать контекст с обеих сторон целевого слова.
from transformers import BertTokenizer, BertForSequenceClassification
from transformers import pipeline
# Загрузка модели и токенизатора
model_name = 'bert-base-uncased'
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForSequenceClassification.from_pretrained(model_name)
# Задача классификации текста
nlp_pipeline = pipeline('sentiment-analysis', model=model, tokenizer=tokenizer)
# Пример текста
text = "BERT is a powerful model for natural language processing."
# Анализ текста
result = nlp_pipeline(text)
print(result)
GPT хорош для задач, связанных с генерацией текста.
from transformers import GPT2LMHeadModel, GPT2Tokenizer
# Загрузка модели и токенизатора
model_name = 'gpt2'
tokenizer = GPT2Tokenizer.from_pretrained(model_name)
model = GPT2LMHeadModel.from_pretrained(model_name)
# Генерация текста
input_text = "Once upon a time"
input_ids = tokenizer.encode(input_text, return_tensors='pt')
# Генерация продолжения текста
output = model.generate(input_ids, max_length=50, num_return_sequences=1)
# Декодирование и вывод текста
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Это вероятность отвергнуть нулевую гипотезу, когда она на самом деле истинна. Это ключевая концепция в статистических тестах, используемая для принятия решений о том, является ли наблюдаемый эффект в данных статистически значимым.
Нулевая гипотеза (\(H_0\)): Гипотеза, которая предполагает отсутствие эффекта или различий. Обычно это гипотеза о статусе-кво.
Альтернативная гипотеза (\(H_a\)): Гипотеза, предполагающая наличие эффекта или различий.
Определяет порог для принятия решения об отклонении нулевой гипотезы. Обычно устанавливается до проведения теста и часто выбирается как 0.05 (5%), 0.01 (1%) или 0.10 (10%).
Вероятность получить результат, равный или более экстремальный, чем наблюдаемый, при условии, что нулевая гипотеза верна. Если P-значение меньше уровня значимости (\(\alpha\)), нулевая гипотеза отвергается.
Собираем данные и проводим статистический тест (например, t-тест).
Допустим, P-значение оказалось равным 0.03.
\(P = 0.03 < \alpha = 0.05\). Это значит, что мы отвергаем нулевую гипотезу.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1