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

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

РКН: https://vk.cc/cJPGXD
Download Telegram
⚖️ Сложность ≠ крутость

Есть соблазн показать уровень, написав сложную, многослойную, «умную» реализацию. Но это оружие против команды.

👉 Совет: выбирай самое простое решение, которое работает надёжно. Писать сложно умеют многие. Писать просто, понятно и устойчиво — редкий навык, который отличает зрелых инженеров от просто технарей.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥145
👩‍💻 Постройте простую модель классификации с использованием 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
4
⚙️ Как устроено глубокое обучение нейросетей

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

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

Создайте функцию 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
3🔥3
⚙️ Что бы я сделал, если бы сегодня начинал учить Data Science / ML?

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
91
👩‍💻 Восстановление категориального признака по шумному числовому вектору

У вас есть категориальный признак (например, "A", "B", "C"), который был закодирован в виде One-Hot Encoding, а затем данные были искажены случайным шумом.

Реализуйте функцию recover_category(matrix, labels), которая по входной матрице matrix (список списков, где каждая строка — вектор с плавающими значениями после шума) и списку labels (названия категорий в нужном порядке) должна восстановить название исходной категории для каждой строки — ту, у которой была 1 до добавления шума.

Шум малый, но может нарушать точные значения (например, 1.0 становится 0.91, 0.0 — 0.08 и т.п.).

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

def recover_category(matrix, labels):
result = []
for row in matrix:
max_index = row.index(max(row))
result.append(labels[max_index])
return result

# Пример использования
matrix = [
[0.05, 0.92, 0.03],
[0.89, 0.06, 0.12],
[0.12, 0.08, 0.83]
]

labels = ["A", "B", "C"]

print(recover_category(matrix, labels))
# Ожидаемый результат: ['B', 'A', 'C']
Please open Telegram to view this post
VIEW IN TELEGRAM
5🐳2👍1
⚙️ Залезаем на плечи гигантов — создаем модуль для ComfyUI для свободного движения камеры и создание 6dof сцен из фото

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

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

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
2
⚙️ Что такое @staticmethod и @classmethod в Python, и чем они отличаются?

Декораторы @staticmethod и @classmethod используются для создания методов, которые не требуют экземпляра класса. @staticmethod — это метод, который не зависит от экземпляра или самого класса, а @classmethod получает доступ к самому классу через первый параметр cls.

➡️ Пример:

class MyClass:
@staticmethod
def static_method():
return "Это статический метод"

@classmethod
def class_method(cls):
return f"Это метод класса {cls.__name__}"

# Использование
print(MyClass.static_method()) # Это статический метод
print(MyClass.class_method()) # Это метод класса MyClass


🗣️ В этом примере static_method ничего не знает о классе, в то время как class_method может взаимодействовать с классом, к которому он принадлежит. Используйте их в зависимости от того, нужно ли вам взаимодействие с классом.


🖥 Подробнее тут
Please open Telegram to view this post
VIEW IN TELEGRAM
7
⚙️ 3 метода состязательных атак на глубокие нейронные сети: как обмануть ИИ

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
🐳31
⚙️ Обнаружение аномалий в данных временных рядов с помощью статистического анализа

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

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

Вам передаётся сбалансированный набор объектов из 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
31
🧠 МТС и НИУ ВШЭ открыли набор на второй поток магистратуры по ИИ

Программу «Исследования и предпринимательство в искусственном интеллекте» анонсировали на конференции True Tech Day. И вот, прием документов начнется 20 июня. Для 30 человек предусмотрены оплачиваемые места от МТС Web Services.

В московском кампусе ВШЭ студентов научат работать с языковыми моделями, генеративными нейросетями, системами компьютерного зрения и распознаванием речи. Лучших студентов пригласят на стажировку и трудоустройство в МТС Web Services.
1
⚙️ 5 техник, применяемых в анализе временных рядов, которые должен знать каждый. Часть 1

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
6
⚙️ Пишем персонального AI-ассистента на Python

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

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

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
31
⚙️ Линейная регрессия в ML для самых маленьких

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

Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
4
⚙️ Что такое генераторы в 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
5👍1