CodeLab
145 subscribers
538 photos
20 videos
159 links
Говорим просто о сложном

Обсуждение, новости, материал и сплетни — все здесь https://t.me/CodeLabMLChat
Download Telegram
🔗 Гайс, нужен был пример, поэтому решил взять со статьи, потом все ссылочки вам скину, можете сами почекать...

📈 Функция вознаграждения:

R(No fruit) = -1
R(Pear) = +5
R(Apple) = +10
🥰3🤯1
🔗 Здесь мы можем рассмотреть две политики, их вы можете увидеть в левом верхнем углу.

⚙️ Вот этот синий бехелит из берсерка 🗡 — это наш агент кста.
👍2🥰1🤯1
🔗 Как итог, агент выбирает между двумя политиками, вычисляя функцию полезности.

👨‍💻 Оценка политик показывает нам, что полезность максимальна с помощью п2 которую затем агент выбирает в качестве своей политики для этой задачи.
🥰3🤯1
🧑‍💻 Полезные статьи:

https://www.baeldung.com/cs/ml-policy-reinforcement-learning — политика в обучении с подкреплением 📈

https://education.yandex.ru/handbook/ml/article/obuchenie-s-podkrepleniem — обучение с подкреплением 💲

https://habr.com/ru/companies/newprolab/articles/343834/ — Введение в обучение с подкреплением: от многорукого бандита до полноценного RL агента ⚙️

https://medium.com/machine-learning-for-humans/reinforcement-learning-6eacf258b265 — Machine Learning for Humans, Part 5: Reinforcement Learning 💻
👍2🥰1🤯1
🔗 Задание Сумма делителей (7.3)

🔗 Мы прекрасно знаем что нужно писать для начала:

n = int(input())
t = 0


Дальше цикл for для перебора всех чисел (включительно):

for i in range(1, n + 1):


⭕️ Теперь, самое сложное, вспомнить, че такое этот ваш делитель:

Делитель — число, на которое делят делимое. Делимое у нас 10, нам нужно найти сумму делителей.

📈 Если остаток от деления нашего числа на предполагаемый делитель i будет равен 0, значит делитель мы нашли верный и мы его добавляем к нашему счетчику суммы:

    if n % i == 0:
t += i


print(t)


🔗 Весь код:

n = int(input())
t = 0
for i in range(1, n + 1):
if n % i == 0:
t += i
print(t)
❤‍🔥2🥰1🤯1
Гайс, сегодня переносится на завтра, сделаю целых два поста, т.к я устал жестка, поэтому с первыми петухами начинаем прогать
👍4
👑
❤‍🔥4
Доброе утро всем! Ща разберем задание из егэ Тип 5 № 60247 🌶🌶🌶
❤‍🔥21
🔗 Попробуем разобрать самый обычный пример кода:

0️⃣ Первая строка кода — это создание множества:

a = set()


⁉️ Вопрос зач? Да затем, что "множества — это неупорядоченные коллекции уникальных элементов" — нам это говорит о том, что, даже если для разных чисел N получится одно и то же значение R, оно будет добавлено в множество только один раз. То есть, множество 🟰set()🟰 будет отсеивать дублирующиеся значения R.

1️⃣ Итак, теперь цикл для перебора всех чисел N от 1 до 149 (включительно). Для каждого N выполняется алгоритм преобразования в двоичное число и вычисления R (это мы еще разберем):

for n in range(1, 150):


2️⃣ Нам нужно преобразовать число n в двоичную строку:

    s = bin(n)[2:]


⭕️ Bin — это встроенная функция в Python, которая преобразует целое число в двоичную строку.

⭕️ [2:] — этот срез говорит нам о том, что выводится будут все элементы, начиная со 2, позже поймете почему.

🟰 Вот вам ПРИМЕР:

x = 17
y = bin(x)
print(y) #0b10001


🟰 Префикс 0b в Python используется для обозначения двоичного числа (основание 2), но нам этот префикс не нужен, поэтому используем срез:

x = 17
y = bin(x)[2:]
print(y) #10001


3️⃣   "Если число N делится на 3, то к этой записи дописываются три последние двоичные цифры" — так и запишем:

    if n % 3 == 0:
s += s[len(s) - 3:]


🟰 С первой строкой все понятно, рассмотрим вторую:

        s += s[len(s) - 3:]


‼️ Прежде всего, функция len() возвращает длину строки s, а затем, прибавляет к строке s последние 3 символа этой строки. То есть, если строка имеет длину строки 6, последние 3 символа начинаются с индекса [6 - 3] — эта запись эквивалентна просто индексу [3].

⁉️ Возможно, у вас появился вопрос, почему нельзя просто написать s[3:]? (Кстати, в этом случае сработает). Дак вот, если длина строки меньше 3, то 🟰s[3:]🟰 вернёт пустую строку, так как индекс 3 выходит за пределы длины строки. (Но это ладно, просто для понимания)

4️⃣ "Если число N на 3 не делится, то остаток от деления умножается на 3, переводится в двоичную запись и дописывается в конец числа" — так и пишем)

    if n % 3 != 0: 
k = (n % 3) * 3
s1 = bin(k)[2:]
s += s1


⭕️ С первой строкой все снова понятно, на второй строке, остаток от деления на 3 умножаем на 3. Третья строка: число k преобразуется в двоичную строку с помощью bin(k) (Это уже разбирали в начале). Строка s1, которая является двоичной записью k, добавляется к исходной строке s (двойничной записи числа N).

🧑‍💻 Гайс, возможно все это еще очень не понятно, особенно, если вы только начали это изучать, но порешаем так парочку примеров и все поймем)

5️⃣ Создаем переменную r. После всего, что мы проделали над строкой s, она является двоичной записью нового числа R. Поэтому, переводим строку обратно в десятичное число r:

    r = int(s, 2)


6️⃣ "Укажите минимальное число r, большее 151, которое может быть получено с помощью полученного алгоритма. В ответе запишите это число в десятичной системе счисления"

    if r > 151:
a.add(r)


7️⃣ И, пишем функцию 🟰print🟰 для нахождения минимального числа из всех добалвенных в наше множество:

print(min(a))


8️⃣ Сам код:
a = set()

for n in range(1, 150):
s = bin(n)[2:]

if n % 3 == 0:
s += s[len(s) - 3:]
if n % 3 != 0:
k = (n % 3) * 3
s1 = bin(k)[2:]
s += s1

r = int(s, 2)
if r > 151:
a.add(r)

print(min(a))


▫️Ща поймете, возьмем небольшое число, пусть будет n = 5.

▫️🟰s = bin(5)[2:]🟰 — s становится равной '101' (Желательно смотреть за кодом)

▫️Затем, первое условие 🟰if 5 % 3 == 0:🟰 (Условие не выполняется)

▫️Следующее условие:

if 5 % 3 != 0: 
k = (5 % 3) * 3 # Условие выполнится, k = 6


▫️ 🟰s1 = bin(6)[2:]🟰 — Строка s1 теперь преобразуется в двоичную строку и становится равной "110"

▫️🟰s += s1🟰 — Добавляем "101" к "110" и получаем "101110"

▫️ r = int(s, 2) → r = 46 (Преобразуем двоичную строку "101110" обратно в десятичное число)

▫️И, наконец, 🟰if r > 151:🟰→ проверка последнего условия (Условие не выполнится, значит в наше множество не добавляется)
2❤‍🔥2🥰1
Гайс, честно, это задание похлеще многих заданий с перчиком в курсе, я бы даже ему дал 🌶🌶🌶. Если вы мало что поняли с разбора решения, просьба самим написать код и построчно следить за моим разбором, чтобы наверняка закрепить знания. Мы обязательно разберем еще аналогичные задания 5 типа, поэтому все обязательно поймете...
❤‍🔥21🥰1
🔗 Гайс, мы почти подошли к новой главе в книге, ноооо, тут есть упражнения, почему бы нам не поразмышлять ?

Примером контролируемого или неконтролируемого обучения является каждый
из следующих сценариев? Объясните свои ответы. В случае неоднозначности
ответа выберите один из вариантов и объясните, почему выбрали именно его.

А. Система рекомендаций в социальной сети, которая предлагает пользователю потенциальных друзей.

Б. Система на новостном сайте, которая разделяет новости на темы.

В. Функция автоматического завершения предложений в Google.

Г. Система рекомендаций в интернет-магазине, которая формирует
рекомендации, основываясь на истории покупок.

Д. Система в компании, выпускающей кредитные карты, которая фиксирует мошеннические транзакции.
❤‍🔥21🥰1
⚙️0️⃣ Го думать, итак, первое это система рекомендаций в соцсетях.

🔗 Вспомним, что об этом как раз говорилось в разделе про неконтролируемое обучение. Данные здесь не размечены (меток у них нет для поиска друзей по каким-то критериям). Здесь, скорее, будут применены алгоритмы кластеризации, (да-да, мы их тоже рассматривали) — наша модель будет искать группы схожих пользователей, может, по интересами. а может, по общих друзьям (кароч хз, на вопрос мы ответили и это главное).

1️⃣ "Система на новостном сайте, которая разделяет новости на темы" итаак, в целом, если так подумать, мы также можем воспользоваться алгоритмами неконтролируемого обучения. Данные могут быть неразмеченными, поскольку алгоритмы кластеризации будут группировать новости на основании текста или заголовков по темам.

2️⃣ Функция автоматического завершения предложений в Google. Так, ну здесь и не пахнет неконтролируемое обучением. Вопрос стоит в завершении предложений, значит, у нас должна быть какая то ниебчески огромная база данных с текстами, где каждое следующее слово будет рассматриваться как метка.

3️⃣ 'Система рекомендаций в интернет-магазине, которая формирует рекомендации, основываясь на истории покупок' — здесь история подобная, как и с соцсетями, система использует историю покупок других пользователей (вполне возможно) и на основе этих покупок выдает рекомендации. Типо, одни пользователи купили 3 товара для какой то нужды, другие 4, и этот 4 товар модель будет толкать как торгаш другим пользователям.

4️⃣ "Система в компании, выпускающей кредитные карты, которая фиксирует мошеннические транзакции" — здесь явно используются алгоритмы контролируемого обучения, данные будут размеченные.

🔗 Транзакции могут быть помечены как мошеннические или нормальные (пользовательские, хз кароч). Модель обучается и дальше будет предсказывать, какая транзакция мошенническая, а какая нормальная.

⚙️ К примеру, если ваш кент попросит снять лям за 500 рублей, банк вероятнее всего, пометит вашу транзакцию как мошенническую и будет беда.
3❤‍🔥1👍1🥰1
🔗 Гайс, доброе утро всем! Ща разберем такое интересное задание: Знакочередующаяся сумма (7.3)

0️⃣ Для начала, конечно же пишем переменную для ввода и счетчик:

n = int(input())
total = 0


1️⃣ Затем, цикл for:

for i in range(1, n + 1):


2️⃣‼️ Важный момент, заметим, что в нашей закономерности нечетные числа прибавляются, а четные отнимаются, так и запишем:

    if i % 2 == 0: #Условие четности 
total -= i
else:
total += i


3️⃣ Ну и функция вывода:

print(total)


🔗 Сам код:

n = int(input())
total = 0
for i in range(1, n + 1):
if i % 2 == 0:
total -= i
else:
total += i
print(total)


🔗 Кароч, давайте на примере:

🟰 Подаем на вход 4 → на первой итерации равна i = 1, total = 0, поскольку i не делится на 2 нацело, total + 1 → total = 1.

🟰 Вторая итерация → i = 2, делится нацело → total -= i → total = -1.

🟰 Третья итерация → i = 3, не делится нацело → total += i → total = 2.

🟰 Четвертая итерация → i = 4, делится нацело → total -= i → total = -2.
❤‍🔥21🥰1
🔗 Задача слишком интересная, поэтому разберем решения других знатоков, Знакочередующаяся сумма (7.3) — Решение 2

🧑‍💻 Первые шаги аналогичные:
n = int(input())
f = 0
for i in range(1, n + 1):


🔗 Теперь нам нужная главная строка для нашей закономерности. Как это вообще работает⁉️

🔗 Кароч, допустим, подаем мы нечетные числа (1,3,5) → -1 ** (i + 1) * i == 1 → i добавляется к переменной f.

🔗 Теперь подадим четные числа (2, 4, 6) → -1 ** (i + 1) * i → -1

f += (-1) ** (i + 1) * i


⚙️ И выводим функцию print:

print(f)


🕐 Допустим, подали мы на вход 5 (Разберем по итерациям):

1️⃣ i = 1 -1 ** 2 = 1 total = 0 + 1 * 1 total = 1

2️⃣ i = 2 -1 ** 3 = -1 total = 1 - 1 * 2 total = -1

3️⃣ i = 3 -1 ** 4 = 1 total = - 1 + 1 * 3 total = 2

4️⃣ i = 4 -1 ** 5 = -1 total = 2 - 1 * 4 total = -2

5️⃣ i = 5 -1 ** 6 = 1 total = - 2 + 1 * 5 total = 3



🔗 Сам код:

n = int(input())

f = 0
for i in range(1, n + 1):
f += (-1) ** (i + 1) * i

print(f)
❤‍🔥3
Знакочередующаяся сумма (7.3) — Решение 3

n = int(input())

if (n % 2 == 0):
print(-n // 2)
else:
print(n // 2 + 1)


Итак, че тут происходит ⁉️

⭕️ Мы вводим 5, на 2 нацело не делится выводим 3

⭕️ Вводим 4, делится на 2 нацело, выводится -2
❤‍🔥3
🤷
3❤‍🔥1👍1👨‍💻1
Буду очень признателен, если вы посоветуете этот канал вашим друзьям, пересылайте, показывайте, нам нужен народ ❤️
❤‍🔥3
Гайс, прекрасно понимаю, что посты выходят редко на этих дня, но, стараюсь как могу ❤️

Задание Наибольшие числа 🌶🌶

🧑‍💻 Итак, мы вводим число n, а затем n различных чисел вводим после. Типо ввели мы 5, а нам нужно еще 5 чисел разных ввести и вывести большее и второе большее, го делать что-ли...

n = int(input())
max_num_1 = 0 #Счетчик для максимального первого
max_num_2 = 1 #Для второго максимального
for i in range (1, n+1):
num = int(input()) # На каждой итерации вводим число


Итак, теперь основные условия:

    if num > max1: #Если введённое число больше текущего наибольшего числа:
max2 = max1 #Предыдущее наибольшее число становится вторым по величине
max1 = num #Текущее число становится новым наибольшим числом.
elif num > max2: #Если текущее число больше второго по величине числа max2, но меньше первого максимального max1
max2 = num #Текущее число становится новым вторым по величине.


🧑‍💻 И выводим результаты:

print(max1)
print(max2)
4