👨🏼💻 "Основные направления неконтролируемого обучения — это кластеризация, понижение размерности и генеративное обучение"
⛓️💥Про кластеризацию поговорили. Дальше будет понижение размерности.
⚙️ По сути, это такой процесс, который преобразовывает данные в наиболее удобную для анализа и интерпретации форму. Возьмем пример из книги, уж очень он хороший:
У нас есть набор данных:
▫️размер;
▫️количество спален
▫️количество ванных комнат;
▫️уровень преступности в районе;
▫️расстояние до ближайшей школы
⭕️ Суть в чем, в этом наборе данных 5 столбцов, но мы можем его сократить, не теряя при этом смысла и большого количества информации.
📊 Первые три признака похожи и связаны с размером дома:
(размер, количество спален,
количество ванных комнат) = размер дома
Последние два признака похожи и связаны с благополучием района:
(уровень преступности в районе, расстояние до ближайшей школы) = благополучие района
Всем 😴
⛓️💥Про кластеризацию поговорили. Дальше будет понижение размерности.
⚙️ По сути, это такой процесс, который преобразовывает данные в наиболее удобную для анализа и интерпретации форму. Возьмем пример из книги, уж очень он хороший:
У нас есть набор данных:
▫️размер;
▫️количество спален
▫️количество ванных комнат;
▫️уровень преступности в районе;
▫️расстояние до ближайшей школы
⭕️ Суть в чем, в этом наборе данных 5 столбцов, но мы можем его сократить, не теряя при этом смысла и большого количества информации.
📊 Первые три признака похожи и связаны с размером дома:
(размер, количество спален,
количество ванных комнат) = размер дома
Последние два признака похожи и связаны с благополучием района:
(уровень преступности в районе, расстояние до ближайшей школы) = благополучие района
Всем 😴
🤯2
🧑💻 Канал у нас для всех, поэтому, так подумал, почему бы не сделать раздел с решениями задач с ЕГЭ⁉️ Актуально да и, возможно, кому то смогу помочь, поэтому держите новый раздел для Навигации: ЕГЭ
🔗 Введение
__________________________________
🔗 Тип 14 № 26959 (Разбор) 🟰 Продолжение 🟰 и еще продолжение
__________________________________
🔗 Введение к заданию 🔗 Тип 5 № 60247 (Разбор)
🔗 Введение
__________________________________
🔗 Тип 14 № 26959 (Разбор) 🟰 Продолжение 🟰 и еще продолжение
__________________________________
🔗 Введение к заданию 🔗 Тип 5 № 60247 (Разбор)
👍5
🔗 В целом, во всех вариантах исходный код для решения есть, что-то новое придумывать не стоит, зато можно разобрать коды как можно лучше. Лично я, когда сдавал ЕГЭ, просто запоминал их) Зато сейчаc, смогу с кайфом объяснить вам, что и как работает...
👨💻2🤯1
Попадается нам вот такое задание, что же блин делать?
0️⃣ Первое, записываем наше выражение, все как есть. Переменная, пусть будет — result:
▫️ a ** b — это возведение в степень, так, на всякий.
1️⃣ Вы, наверное, видели, что вторую строку кода обычно записывают так:
⭕️ Объясняю,
‼️ — Когда мы переводим число в другую систему счисления, мы получаем остатки от деления на основание (в данном случае 4). А эти самые остатки — являются цифрами в новой системе счисления и мы их добавляем в нашу пустую строку, начиная с младшего разряда.
⭕️ Если вы вообще ничего не поняли, то смотрите:
1) Берем 100 из десятичной и переведем его в систему счисления с основанием
4, объясню кратко и вы поймете:
100 // 4 = 25 — целая часть
100 % 4 = 0 — остаток
Записываем остатки 'с конца' (младшего разряда), поэтому
0 записываем в конец, условно
Продолжение →
0️⃣ Первое, записываем наше выражение, все как есть. Переменная, пусть будет — result:
result = 16**18 - 4**10 - 4**5 - 16
▫️ a ** b — это возведение в степень, так, на всякий.
1️⃣ Вы, наверное, видели, что вторую строку кода обычно записывают так:
s = ''
⭕️ Объясняю,
s = '' — это пустая строка, а нам было сказано, что выражение записали в системе счисления с основанием 4. Что это значит⁉️‼️ — Когда мы переводим число в другую систему счисления, мы получаем остатки от деления на основание (в данном случае 4). А эти самые остатки — являются цифрами в новой системе счисления и мы их добавляем в нашу пустую строку, начиная с младшего разряда.
⭕️ Если вы вообще ничего не поняли, то смотрите:
1) Берем 100 из десятичной и переведем его в систему счисления с основанием
4, объясню кратко и вы поймете:
100 // 4 = 25 — целая часть
100 % 4 = 0 — остаток
Записываем остатки 'с конца' (младшего разряда), поэтому
0 записываем в конец, условно
Продолжение →
👍3
2) 25 // 4 — целая часть
25 % 4 = 1 — остаток
1 — будет перед 0 в конце, надеюсь понимаете...
3) 6 // 4 = 1 — целая часть
6 % 4 = 2 — остаток (перед единицей)
⭕️ И последний этап:
4) 1 // 4 = 0 — целая часть
1 % 4 = 1 — остаток (перед двойкой)
‼️ Я говорил, что записываем с конца → таким образом, число 100 в системе счисления с основанием 4 записывается как 1210
2️⃣Нам нужен цикл для перебора, поэтому: 🟰
3️⃣ 🟰
🔗 Выражение выше — это деление по модулю или нахождения остатка от деления () Зачем это нужно я уже объяснил, чекайте выше ↑
🔗 s += str — это тоже самое, что и s = s + str, просто короче.
4️⃣⭕️ 🟰
Продолжу чуть позже гайс...
25 % 4 = 1 — остаток
1 — будет перед 0 в конце, надеюсь понимаете...
3) 6 // 4 = 1 — целая часть
6 % 4 = 2 — остаток (перед единицей)
⭕️ И последний этап:
4) 1 // 4 = 0 — целая часть
1 % 4 = 1 — остаток (перед двойкой)
‼️ Я говорил, что записываем с конца → таким образом, число 100 в системе счисления с основанием 4 записывается как 1210
2️⃣Нам нужен цикл для перебора, поэтому: 🟰
while result != 0:🟰 — обычный цикл while (пока result не равен нулю)3️⃣ 🟰
s += str(result % 4)🟰 — то, о чем мы с вами и говорили: пока наше выражение с первой строчки кода не будет равно 0 — переменная s будет добавлять остатки деления на 4... (result % 4)
🔗 Выражение выше — это деление по модулю или нахождения остатка от деления () Зачем это нужно я уже объяснил, чекайте выше ↑
🔗 s += str — это тоже самое, что и s = s + str, просто короче.
4️⃣⭕️ 🟰
result //= 4🟰 — это тоже самое, что и 🟰result = result // 4 🟰 То есть, наше выражение (result) делится нацело на 4. Зачем? А затем, что после деления нацело, наше выражение 'уменьшается в 4', по сути, таким образом, обновляем наше выражение. Продолжу чуть позже гайс...
👍3
Если у вас есть друзья или знакомые, которые собираются сдавать ЕГЭ по информатике 2025 — рекомендуйте https://t.me/pywithCodeLab 🧑💻 ( разборы задача с ЕГЭ, курсов, разборы кода на Python, Алгоритмы и Машинное обучение, и что самое главное — все бесплатно)
🤯3
5️⃣ Помните, что записываем мы остатки от деления записываем с конца, следовательно, строку, которая у нас там получилась, нужно развернуть:
🧑💻 Теперь, порядок цифр будет правильный. Остался последний этап!
Нас сказали тройки подсчитать, делается это очень просто, достаточно вывести функцию 🟰print()🟰 со встроенной функцией 🟰count()🟰
🔗 Сам код, хотя ничего нового вы тут не увидите:
s = s[::-1]
🧑💻 Теперь, порядок цифр будет правильный. Остался последний этап!
Нас сказали тройки подсчитать, делается это очень просто, достаточно вывести функцию 🟰print()🟰 со встроенной функцией 🟰count()🟰
print(s.count("3"))🔗 Сам код, хотя ничего нового вы тут не увидите:
result = 16 ** 18 * 4 ** 10 - 4 ** 6 - 16
s = ''
while result != 0:
s += str(result % 4)
result //= 4
s = s[::-1]
print(s.count("3"))
🤯3
👨💻 Жестко устал гайс, но нам нужно идти дальше, думаю, на степике пару задач порешаем.
🔗 Задача Сумма чисел 2 (7.3)
⭕️ https://t.me/pywithCodeLab/555 — Напоминаю вам, здесь продолжение нашей навигации по курсу
Так, делаем по шагам:
0️⃣ Первое, это ввод числа:
1️⃣ Второе, это создание счетчика для подсчета суммы:
summ = 0
2️⃣ Третье, это цикл для перебора наших чисел от 1 до (n + 1) (включительно)
3️⃣ Четвертое, это условный оператор if для создания условия, логично
⭕️ Нам сказано, что сумма должна быть тех чисел 'квадрат которых оканчивается на 2, 5, 8' Так и запишем →
Кстати, это вам так, на заметку, но чисел, квадрат которых оканчивается на 2 и 8 не существует 🆘
4️⃣ Пятое, обновляем счетчик
5️⃣ Шестое — print()
🔗 Задача Сумма чисел 2 (7.3)
⭕️ https://t.me/pywithCodeLab/555 — Напоминаю вам, здесь продолжение нашей навигации по курсу
Так, делаем по шагам:
0️⃣ Первое, это ввод числа:
n = int(input())
1️⃣ Второе, это создание счетчика для подсчета суммы:
summ = 0
2️⃣ Третье, это цикл для перебора наших чисел от 1 до (n + 1) (включительно)
3️⃣ Четвертое, это условный оператор if для создания условия, логично
⭕️ Нам сказано, что сумма должна быть тех чисел 'квадрат которых оканчивается на 2, 5, 8' Так и запишем →
if i**2 % 10 == 2 or i**2 % 10 == 5 or i**2 % 10 == 8: #Возводим число в степень и делим по модулю на 10, чтобы узнать, на что оно оканчивается.
Кстати, это вам так, на заметку, но чисел, квадрат которых оканчивается на 2 и 8 не существует 🆘
4️⃣ Пятое, обновляем счетчик
summ += i # Прибавляем i, потому что считаем именно сумму.
5️⃣ Шестое — print()
print(summ)
👍3
🔗 Код к задаче Сумма чисел 2 (7.3):
n = int(input())
summ = 0
for i in range(1, n + 1):
if i**2 % 10 == 2 or i**2 % 10 == 5 or i**2 % 10 == 8:
summ += i
print(summ)
👍2
🔗 Сумма чисел 2 (7.3)
🧑💻 Разберем еще решения с комментов:
🟰 Никаких условных операторов, автор использует цикл от 5 до n + 1 с шагом 10.
‼️ Шаг 10 в этом случае, потому что, прибавляя к 5 каждый раз по 10, мы будем получать 15 (225) → 25 (625) → 35 (1225) и так далее, то есть, квадрат числа оканчивается на 5, если само число оканчивается на 5
🧑💻 Разберем еще решения с комментов:
🟰 Никаких условных операторов, автор использует цикл от 5 до n + 1 с шагом 10.
‼️ Шаг 10 в этом случае, потому что, прибавляя к 5 каждый раз по 10, мы будем получать 15 (225) → 25 (625) → 35 (1225) и так далее, то есть, квадрат числа оканчивается на 5, если само число оканчивается на 5
summ = 0
for i in range(5, n + 1, 10):
summ += i
print(summ)
👍2👨💻1
🔗 Сумма чисел 2 (7.3)
⚙️ Еще одно решение, здесь у нас условие на проверку 'вхождения последней цифры квадрата числа в [5] '
⚙️ Еще одно решение, здесь у нас условие на проверку 'вхождения последней цифры квадрата числа в [5] '
n, summ = int(input()), 0
for i in range(1, n + 1):
if i ** 2 % 10 in [5]:
summ += i
print(summ)
🥰2👨💻1
🔗 Четвертое решение Сумма чисел 2 (7.3)
Внимательно посмотрели и думаем, че тут происходит 😶
Счетчик и цикл for — это еще ладно, уже знаем, а что насчет третьей строчки?
‼️Насколько я понял (это неточно), это пример тернарного оператора или тернарного условия. Дальше, я обратился к GPT:
▫️condition в данном случае — условие, которое проверяется (у нас это
▫️value_if_true — значение, которое будет присвоено или использовано, если условие истинно, у нас будет присвоено i
▫️value_if_false — значение, которое будет присвоено или использовано, если условие ложно (у нас это 0).
То есть, если квадрат числа i делённый на 10, даёт остаток 2, 5 или 8 🟰
s = 0
for i in range(1, int(input()) + 1):
s += i if i**2 % 10 in (2, 5, 8)else 0
print(s)
Внимательно посмотрели и думаем, че тут происходит 😶
Счетчик и цикл for — это еще ладно, уже знаем, а что насчет третьей строчки?
‼️Насколько я понял (это неточно), это пример тернарного оператора или тернарного условия. Дальше, я обратился к GPT:
🟰result = value_if_true if condition else value_if_false🟰 — Формат тернарного оператора, теперь можете сравнить с нашей строчкой 🟰s += i if i**2 % 10 in (2, 5, 8)else 0🟰▫️condition в данном случае — условие, которое проверяется (у нас это
🟰if i**2 % 10 in (2, 5, 8)🟰) ▫️value_if_true — значение, которое будет присвоено или использовано, если условие истинно, у нас будет присвоено i
▫️value_if_false — значение, которое будет присвоено или использовано, если условие ложно (у нас это 0).
То есть, если квадрат числа i делённый на 10, даёт остаток 2, 5 или 8 🟰
(i ** 2 % 10 in (2, 5, 8))🟰, тогда к переменной s прибавляется число. Если условие ложно, то прибавляется 0❤🔥1🤯1👨💻1
Че хотите сегодня вечером?
Anonymous Poll
30%
Разбор темы по алгоритмам 📊
30%
Машинное обучение ⚙️
0%
Разбор кода на Python 🐍
10%
Разбор кода на C #️⃣
10%
Разбор задачи с ЕГЭ ➕
20%
Разбор задания со степика ⭕️
🧑💻 Машинка победила! (да кто бы сомневался)
⚙️ Остановились мы на понижении размерности, почитать можете → ТУТ
💲 А здесь оставлю ссылку на пост о машинном обучении (навигация по разделам) → ТУТ
⭕️ Итак, рассмотрим матричную факторизацию и разложение по сингулярным значениям
Для начала, разберем умную мысль из книги:
" Предположим‚ у нас имеется таблица, полная данных, каждая строка соответствует точке данных, а каждый столбец — признаку. Следовательно, мы можем использовать кластеризацию для уменьшения количества строк в наборе данных " — это я взял из книги, а теперь попробую вам пояснить. Еще выложу изображения из книги для понимания.
⭕️ Но, если вы вообще ничего не поняли, ща разберемся ⚙️
⚙️ Остановились мы на понижении размерности, почитать можете → ТУТ
💲 А здесь оставлю ссылку на пост о машинном обучении (навигация по разделам) → ТУТ
⭕️ Итак, рассмотрим матричную факторизацию и разложение по сингулярным значениям
Для начала, разберем умную мысль из книги:
" Предположим‚ у нас имеется таблица, полная данных, каждая строка соответствует точке данных, а каждый столбец — признаку. Следовательно, мы можем использовать кластеризацию для уменьшения количества строк в наборе данных " — это я взял из книги, а теперь попробую вам пояснить. Еще выложу изображения из книги для понимания.
⭕️ Но, если вы вообще ничего не поняли, ща разберемся ⚙️
🤯2
⭕️ Продолжаем умную мысль, допустим, есть у нас такая таблица: в строках могут быть записаны работники/клиенты, а в столбцах — их признаки (доход, траты на покупки, возможно, антропометрические показатели)
‼️ Теперь вспоминаем, кластеризация — это процесс группировки схожих точек данных в кластеры. Нам нужно разбить большой набор данных (у нас это таблица) на кластеры, внутри каждого такого кластера будут находится данные максимально похожие друг на друга, но при этом, сами кластеры должны различаться.
⚙️ Вот у нас строк немаленькое количество, поэтому мы берем среднее значение признаков кластера (это какая то строка, которая характеризует наши данные в кластере). Она будет представлять каждую группу, и так с каждым набором данных
🟰Пример🟰
⭕️ У нас есть клиентская база из 5 тысяч человек, можем сгруппировать их по различным признакам, я их перечислял в начале, воспользуемся кластеризацией K-средних
K-средние – это алгоритм кластеризации в машинном обучении, который может очень быстро и эффективно сгруппировать немаркированный набор данных всего в несколько итераций. Он работает, маркируя все экземпляры в кластере ближайшим центроидом (это то самое среднее значение или строка, которая характеризует наши данные).
⭕️ Когда экземпляры сосредоточены вокруг определенной точки, эта точка называется центроидом.
🔗 Дак вот, из этих 5 тысяч можем выделить, скажем, 5 кластеров (в каждом по тысяч похожих покупателей). Теперь, вместо 5000 тысяч строк, мы можем с 5 центроидами (средними строками или точками)
‼️ Теперь вспоминаем, кластеризация — это процесс группировки схожих точек данных в кластеры. Нам нужно разбить большой набор данных (у нас это таблица) на кластеры, внутри каждого такого кластера будут находится данные максимально похожие друг на друга, но при этом, сами кластеры должны различаться.
⚙️ Вот у нас строк немаленькое количество, поэтому мы берем среднее значение признаков кластера (это какая то строка, которая характеризует наши данные в кластере). Она будет представлять каждую группу, и так с каждым набором данных
🟰Пример🟰
⭕️ У нас есть клиентская база из 5 тысяч человек, можем сгруппировать их по различным признакам, я их перечислял в начале, воспользуемся кластеризацией K-средних
K-средние – это алгоритм кластеризации в машинном обучении, который может очень быстро и эффективно сгруппировать немаркированный набор данных всего в несколько итераций. Он работает, маркируя все экземпляры в кластере ближайшим центроидом (это то самое среднее значение или строка, которая характеризует наши данные).
⭕️ Когда экземпляры сосредоточены вокруг определенной точки, эта точка называется центроидом.
🔗 Дак вот, из этих 5 тысяч можем выделить, скажем, 5 кластеров (в каждом по тысяч похожих покупателей). Теперь, вместо 5000 тысяч строк, мы можем с 5 центроидами (средними строками или точками)
10🤯3
🔗 Теперь, понижение размерности
⭕️ Это такой процесс, который преобразовывает данные в наиболее удобную для анализа и интерпретации форму. Количество столбцов (признаков) уменьшается, при этом. важная информация сохраняется. Такой процесс необходим, когда признаков у нас уж слишком много,
🟰 Рассмотрим PCA (Principal Component Analysis), это статистический метод, который позволяет сократить размерность данных, сохраняя при этом наибольшее количество информации. Если сказать попроще, то мы просто преобразуем исходные данные в новые, более компактные (Типо смысл и инфа сохраняется, но количество столбцов уменьшается🟰
‼️ Согласно этому методу, если бы у нас было по 50 признаков на человека, мы могли бы сократить количество столбцов до 5, объединив исходные, при этом, сохраняя основную информацию
⭕️ Это такой процесс, который преобразовывает данные в наиболее удобную для анализа и интерпретации форму. Количество столбцов (признаков) уменьшается, при этом. важная информация сохраняется. Такой процесс необходим, когда признаков у нас уж слишком много,
🟰 Рассмотрим PCA (Principal Component Analysis), это статистический метод, который позволяет сократить размерность данных, сохраняя при этом наибольшее количество информации. Если сказать попроще, то мы просто преобразуем исходные данные в новые, более компактные (Типо смысл и инфа сохраняется, но количество столбцов уменьшается🟰
‼️ Согласно этому методу, если бы у нас было по 50 признаков на человека, мы могли бы сократить количество столбцов до 5, объединив исходные, при этом, сохраняя основную информацию
5👍3
🧑💻 Так, постараюсь написать несколько постов, начнем с машинки и скажу сразу, в книге об этом написано немного, поэтому я пользовался помощью GPT и других ресурсов.
⭕️ "Матричная факторизация — это метод, используемый в машинном обучении и анализе данных для нахождения скрытых структур в данных, представленных в виде матриц."
⚙️ Представим матрицу A (3x4), ее строки — это объекты (к примеру, пользователи), а столбцы — это признаки или элементы (например, фильмы, товары или услуги). Значения этой матрицы могут представлять оценки этих пользователей или рейтинги или другие взаимодействия между объектами (пользователями) и их элементами (фильмы или товары).
Алгоритм матричной факторизации работает так, что мы раскладываем матрицу A на 2 - 3 а то и больше матриц меньшего размера, но при этом, при перемножении, матрицы дают приблизительное восстановление исходной матрицы.
🔗 Я прикрепил изображение матрицы, строки у нас это пользователи, а столбцы фильмы. Значение матрицы A — это рейтинги пользователей.
⭕️ "Матричная факторизация — это метод, используемый в машинном обучении и анализе данных для нахождения скрытых структур в данных, представленных в виде матриц."
⚙️ Представим матрицу A (3x4), ее строки — это объекты (к примеру, пользователи), а столбцы — это признаки или элементы (например, фильмы, товары или услуги). Значения этой матрицы могут представлять оценки этих пользователей или рейтинги или другие взаимодействия между объектами (пользователями) и их элементами (фильмы или товары).
Алгоритм матричной факторизации работает так, что мы раскладываем матрицу A на 2 - 3 а то и больше матриц меньшего размера, но при этом, при перемножении, матрицы дают приблизительное восстановление исходной матрицы.
🔗 Я прикрепил изображение матрицы, строки у нас это пользователи, а столбцы фильмы. Значение матрицы A — это рейтинги пользователей.
5🤯3