У вас есть бинарная матрица признаков (список списков из 0 и 1), где каждая строка — это объект, а каждый столбец — бинарный признак (например, наличие/отсутствие свойства).
Ваша задача — реализовать функцию
find_stable_patterns(data, min_support), которая находит наиболее часто встречающиеся бинарные шаблоны и возвращает их в виде списка кортежей (или списков).Шаблон — это строка из 0 и 1, которая в точности совпадает с признаками у нескольких объектов. Если шаблон встречается не менее min_support раз, он считается стабильным.
Решение задачи🔽
from collections import Counter
def find_stable_patterns(data, min_support=2):
# Преобразуем каждую строку в кортеж (хешируемый тип)
patterns = [tuple(row) for row in data]
counter = Counter(patterns)
# Фильтруем по min_support
stable = [list(pattern) for pattern, count in counter.items() if count >= min_support]
return stable
# Пример использования
binary_data = [
[1, 0, 1, 1],
[0, 1, 0, 0],
[1, 0, 1, 1],
[1, 0, 1, 1],
[0, 1, 0, 0],
[1, 1, 1, 0]
]
print(find_stable_patterns(binary_data, min_support=2))
# Ожидаемый результат:
# [[1, 0, 1, 1], [0, 1, 0, 0]]