Data Science | Machinelearning [ru] – Telegram
Data Science | Machinelearning [ru]
20K subscribers
639 photos
40 videos
29 files
3.53K links
Все о Data Science, машинном обучении и искусственном интеллекте: от базовой теории до cutting-edge исследований и LLM.

По вопросам рекламы или разработки - @g_abashkin

РКН: https://vk.cc/cJPGXD
Download Telegram
⚙️ Обнаружение аномалий в данных временных рядов с помощью статистического анализа

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
51
👩‍💻 Определение "аномального" элемента в сбалансированных данных

Вам передаётся сбалансированный набор объектов из 3-х различных классов (например, "cat", "dog", "bird").

Каждый объект представлен вектором признаков (list of floats). Один объект — подброшенный и не принадлежит ни одному из трёх известных классов: он отличается распределением.

Ваша задача — реализовать функцию detect_outlier(data: List[List[float]], labels: List[str]) -> int, которая возвращает индекс выброса в списке. Гарантируется, что в labels один лейбл может быть "unknown", а может и вовсе отсутствовать — выброс может быть замаскирован.

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

Пример данных:

data = [
[1.1, 0.9], [1.2, 1.0], [0.9, 1.1], # cat
[3.0, 3.1], [2.9, 3.0], [3.1, 2.9], # dog
[5.0, 5.1], [5.1, 5.0], [8.0, 8.0], # last — выброс
]

labels = ["cat", "cat", "cat", "dog", "dog", "dog", "bird", "bird", "bird"]


Решение задачи🔽

import numpy as np
from collections import defaultdict

def detect_outlier(data, labels):
data = np.array(data)
grouped = defaultdict(list)

for i, label in enumerate(labels):
grouped[label].append(i)

outlier_idx = -1
max_score = -1

for i, point in enumerate(data):
label = labels[i]
others = [j for j in grouped[label] if j != i]
if not others:
continue

distances = [np.linalg.norm(point - data[j]) for j in others]
avg_dist = np.mean(distances)

if avg_dist > max_score:
max_score = avg_dist
outlier_idx = i

return outlier_idx

# Тест
print(detect_outlier(data, labels)) # ➜ 8
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥311
⚙️ Что такое генераторы в Python и зачем они нужны?

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

➡️ Пример:

# Генератор для получения первых N чисел Фибоначчи
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b

# Используем генератор
for num in fibonacci(5):
print(num)

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


🗣️ В этом примере генератор fibonacci вычисляет числа по запросу, вместо сохранения всех значений в памяти. Это делает генераторы особенно удобными для работы с потоками данных или бесконечными последовательностями.


🖥 Подробнее тут
Please open Telegram to view this post
VIEW IN TELEGRAM
42👍1
⚙️ Пишем персонального AI-ассистента на Python

Делюсь, как собрать простого голосового ассистента: он сам распознаёт речь, общается с LLM и отвечает голосом. Без GUI, но с кучей потенциала. Всё на Python, всё работает.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥6
⚙️ RAG на практике: чат-бот для корпоративной вики

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
41👍1
🌱 Рост идёт от дискомфорта

Если задачи всегда кажутся «понятными», значит, ты топчешься на месте.

👉 Совет: бери задачи, от которых чуть некомфортно. Не настолько, чтобы парализовало, а настолько, чтобы пришлось учиться новому. Этот дискомфорт — главный двигатель развития в IT.
Please open Telegram to view this post
VIEW IN TELEGRAM
196👍1
⚙️ Линейная регрессия в ML для самых маленьких

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍31
⚙️ Как построить хороший пайплайн разработки ML-модели

Рассказываю, как построить понятный и гибкий ML-процесс: чтобы данные масштабировались, новички вливались, а модель не вела себя как капризный кот.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
11🔥1
👩‍💻 Адаптивный поиск порога "почти одинаковых" векторов

У вас есть множество эмбеддингов — векторов признаков объектов (например, предложений, изображений, пользователей).

Требуется реализовать функцию find_similar_pairs(vectors, tolerance=0.05), которая возвращает все пары индексов, где косинусная разница между векторами меньше tolerance.

Дополнительные условия:

• Векторы могут быть высокой размерности (до 512)

• Пара (i, j) считается дубликатом (i < j), если их cosine similarity ~ 1.0

• Не используйте внешние ML-библиотеки: только numpy

• Функция должна быть оптимизирована — без грубой проверки каждой пары, если можно


Решение задачи🔽

import numpy as np

def cosine_similarity(a, b):
a, b = np.array(a), np.array(b)
return
np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

def find_similar_pairs(vectors, tolerance=0.05):
result = []
n = len(vectors)
for i in range(n):
for j in range(i + 1, n):
sim = cosine_similarity(vectors[i], vectors[j])
if 1 - sim <= tolerance:
result.append((i, j))
return result
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
🚀 Правда или нет, что Google победил Cursor?

В статье сравнивают два AI-инструмента для разработки: Firebase Studio от Google и Cursor от Anysphere. Кто круче — облачная платформа или интегрированный редактор?

Читать...
🔥1
🧠 Распознавание орхоно-енисейских рунических надписей методами машинного обучения

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
51
👩‍💻 Предсказание цены дома по площади

Построить сверточную нейронную сеть (CNN) для классификации изображений из набора данных CIFAR-10.

Модель должна предсказывать класс объекта на изображении. Датасет CIFAR-10 содержит 60,000 изображений размером 32x32 пикселя, разделенных на 10 классов:

— Самолет, Автомобиль, Птица, Кот, Олень, Собака, Лягушка, Лошадь, Корабль, Грузовик.

Требования к модели:

• Использовать сверточные слои для выделения признаков.
• Применить слои подвыборки (пулинг) для уменьшения размеров карты признаков.
• Добавить полносвязные слои для классификации на основе выделенных признаков.
• Использовать функцию активации ReLU для скрытых слоев и softmax для выходного слоя.
• Оценить точность модели на тестовых данных.

Входные данные: изображения размера 32x32 с тремя каналами (RGB).

Решение задачи🔽

import tensorflow as tf
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

# Загрузка данных
(X_train, y_train), (X_test, y_test) = cifar10.load_data()

# Нормализация данных
X_train, X_test = X_train / 255.0, X_test / 255.0

# Создание модели CNN
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),
MaxPooling2D((2, 2)),
Conv2D(64, (3, 3), activation='relu'),
MaxPooling2D((2, 2)),
Flatten(),
Dense(128, activation='relu'),
Dense(10, activation='softmax')
])

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

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

# Оценка модели
loss, accuracy = model.evaluate(X_test, y_test)
print(f"Точность модели: {accuracy:.2f}")
Please open Telegram to view this post
VIEW IN TELEGRAM
👎311😁1
➡️ Как Duolingo юзает машинное обучение для прокачки английского: кратко и по делу

В статье рассказывают, как ИИ сделал Duolingo фабрикой языковых курсов: генерация контента, проверка ответов, адаптация заданий — всё на автомате. Учить стало быстрее.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥82
🧠 Создаем свой RAG: введение в LangGraph

В статье объясняют, что такое RAG и как использовать LangGraph для генерации с дополненной выборкой: основы, примеры и подготовка к созданию собственных RAG-систем.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
51
🤔 Выбираем MLOps инструменты с учётом зрелости команды

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
2
👩‍💻 Чем отличается метод .transform() от .apply() в pandas?

В pandas методы .transform() и .apply() часто используются для обработки данных по столбцам и строкам, но они работают по-разному. Метод .apply() применяет функцию к каждому элементу или ряду, и возвращает объект любой формы (например, DataFrame или Series). В отличие от него, .transform() применяет функцию к каждой ячейке или группе и возвращает объект той же формы, что и входной.

➡️ Пример:

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': [10, 20, 30]})

# Используем .apply() для вычисления суммы по столбцам
print(df.apply(sum)) # Вернет Series с суммами столбцов

# Используем .transform() для нормализации каждого значения в столбце
print(df.transform(lambda x: (x - x.mean()) / x.std()))
# Вернет DataFrame с нормализованными значениями


🗣 .apply() подходит для сложных операций и агрегаций, а .transform() удобно использовать для обработки данных с сохранением исходной структуры.


🖥 Подробнее тут
Please open Telegram to view this post
VIEW IN TELEGRAM
51
⚙️ Когда обучение не идет. Loss is NaN. Причины и решения

В статье разберут, почему при обучении нейросети loss внезапно становится NaN и модель ломается. Расскажут, какие бывают причины этого трэша и как спасти обучение без лишней боли.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
21
👩‍💻 Напишите функцию для расчёта Accuracy вручную

В машинном обучении Accuracy — это метрика качества классификации. Показывает, сколько предсказаний модель сделала правильно.

Решение задачи🔽

def accuracy_score(y_true, y_pred):
correct = 0
for true, pred in zip(y_true, y_pred):
if true == pred:
correct += 1
return correct / len(y_true)

# Пример использования:
y_true = [1, 0, 1, 1, 0, 1]
y_pred = [1, 0, 0, 1, 0, 1]

print(accuracy_score(y_true, y_pred)) # 0.833...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41
⚙️ Организация ML-проекта с примерами

Организация - это важно. То же относится к ML-проектам. Из каких компонент он должен состоять? Как оформить проект, чтобы всего хватало и было удобно это масштабировать? Рассмотрим организацию по шаблону CookieCutter с примерами.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
41👍1