Data Science | Machinelearning [ru]
18K subscribers
460 photos
14 videos
29 files
3.31K links
Статьи на тему data science, machine learning, big data, python, математика, нейронные сети, искусственный интеллект (artificial intelligence)

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

РКН: https://vk.cc/cJPGXD
Download Telegram
Интересуешься анализом данных и хочешь развивать карьеру в финтехе? Участвуй в бесплатной программе университета «Сириус» и Газпромбанк.Тех.

Что тебя ждет?
– Изучение Python, ML, pandas и streamlit
– Работа с реальными бизнес-сценариями и разработка MVP
– Поддержка ведущих экспертов на протяжении всего обучения

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

В карточках отвечаем на главные вопросы о программе. Подай заявку до 10 сентября по ссылке.

Реклама, Банк ГПБ (АО), ИНН: 7744001497, erid: 2Vtzqw8AzKb
👎21
⚙️ От месяцев к минутам. Как мы применяем машинное обучение для поиска перспективных литий-ионных проводников

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
🐳1
🧭 Держи архитектуру «видимой»

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

👉 Совет: регулярно обновляй схемы, диаграммы или хотя бы заметки по архитектуре. Пусть у каждого будет карта системы. Без карты любой проект превращается в джунгли, даже если код отличный.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
⚙️ ИИ-агенты в современных IT-решениях

Разбирался, как ИИ «собирается» нас всех заменить. Спойлер: не спешит. Но уже сейчас кое-что делает лучше нас — и это не только котиков генерировать.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
1
⚙️ От хаоса к порядку: как ML помогает искать и защищать конфиденциальную информацию

Покажу, как мы в Positive Technologies заменили формальные правила машинкой — чтобы чувствительные данные находились не по шаблону, а по смыслу. Меньше false negative, больше пользы.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻 Постройте простую модель классификации с использованием scikit-learn

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

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

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# Загружаем данные
iris = load_iris()
X, y =
iris.data, iris.target

# Делим на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Обучаем модель
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train)

# Предсказание
y_pred = model.predict(X_test)

# Оценка качества
print(f"Точность: {accuracy_score(y_test, y_pred):.2f}")
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
⚙️ Похож ли ваш текст на ИИ?

Пытаюсь вычленить шаблоны, по которым палятся тексты от нейросетей: гладкие, пустые, «умные». И придумать способ автоматом понять — писал ли это ИИ или просто скучный человек.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
3
👩‍💻 Построй визуализацию распределения признаков с автоматической категоризацией

Создайте функцию plot_distributions, которая принимает DataFrame и автоматически определяет числовые и категориальные признаки. Затем строит гистограммы или bar-графики в зависимости от типа данных. Это удобно для EDA (исследовательского анализа данных).

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

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

def plot_distributions(df, max_categories=10):
for column in df.columns:
plt.figure(figsize=(6, 4))
if pd.api.types.is_numeric_dtype(df[column]):
sns.histplot(df[column].dropna(), kde=True)
plt.title(f'Гистограмма: {column}')
elif df[column].nunique() <= max_categories:
df[column].value_counts().plot(kind='bar')
plt.title(f'Категории: {column}')
else:
print(f'Пропущен {column}: слишком много уникальных категорий')
continue
plt.tight_layout()
plt.show()

# Пример использования
df = pd.DataFrame({
'age': [23, 45, 31, 35, 62, 44, 23],
'gender': ['male', 'female', 'female', 'male', 'male', 'female', 'female'],
'income': [40000, 50000, 45000, 52000, 61000, 48000, 46000]
})

plot_distributions(df)
Please open Telegram to view this post
VIEW IN TELEGRAM
5
⚙️ Прогнозирование исходов футбольных матчей в реальном времени с помощью байесовской модели

Показываю, как модель с динамической силой команд предсказывает исходы матчей лучше классики. Не угадываю счёт, но выигрываю на ставках. У букмекеров шансы тают.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52
⚙️ Как устроено глубокое обучение нейросетей

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻 Чем отличается метод .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
👍4
⚙️ Что бы я сделал, если бы сегодня начинал учить Data Science / ML?

Эта статья — не очередной «гайд по ML для новичков». Это мой личный взгляд на то, как бы я подошёл к обучению, если бы начинал с нуля уже сегодня , учитывая свой опыт работы в крупных компаниях, проваленные проекты, ошибки и победы..

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
3
⚙️ Залезаем на плечи гигантов — создаем модуль для ComfyUI для свободного движения камеры и создание 6dof сцен из фото

Расскажу, как из одного кадра получить свободную 3D-прогулку: доращиваем панорамы, меняем проекции и крутим ракурсы в VR с помощью кастомного модуля для ComfyUI.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
1
⚙️ ChatGPT все еще не догнать: что происходит на ИИ-рынке к середине 2025 года?

2025 год подходит к экватору, поэтому самое время посмотреть, как поменялись позиции крупнейших компаний-разработчиков. Но для начала предлагаю посмотреть на две иллюстрации. Первая — рейтинг ИИ от ресурса LMArena.

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Задача классификации с BERT: научи модель BERT понимать настроение отзывов о ресторанах

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

🔵 Что у тебя уже есть:
Предобученная модель BERT, которая умеет работать с текстами, но пока не знает ничего про рестораны.
Исторические размеченные отзывы: positive и negative.

💬 Примеры отзывов:
— «Лучшие пельмени в городе!»
— «Ждали заказ 40 минут, больше не придём»

📌 Что нужно сделать:
- Загрузить датасет и разделить его на обучение и тест.
- Подготовить тексты для BERT: токенизация, паддинг, усечение.
- Дообучить модель на этих отзывах.
- Проверить, как она справляется на тесте (accuracy, F1).
- Протестировать на своих примерах — вбить пару «живых» отзывов и посмотреть предсказание.

🎯 Результат:
Модель, которая сама читает отзывы и понимает их настроение.

После курса «NLP / Natural Language Processing» от OTUS вы будете делать такие вещи играючи — и не только с ресторанами. Пройдите короткое вступительное тестирование и получите скидку на обучение: https://vk.cc/cOLspv

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
2
⚙️ Обнаружение аномалий в данных временных рядов с помощью статистического анализа

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

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

Вам передаётся сбалансированный набор объектов из 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
🔥21