Задать вопрос
  • Как и где учить математику, если вкатываешься в нейросети?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну смотри если речь о нейронных сетях именно то как таковой сложной математики там нет. Что такое нейронная сеть это последовательность слоев. Каждый слой представляет из себя нелинейную геометрическую трансформацию в многомерном пространстве. Для лучшего понимания и изучения можешь взять двумерные данные. Взять четыре точки квадрат с координатами. У тебя получится матрица A размерность (4, 2). Так что происхдит в скрытом слое.

    relu(dot(A, W) + b) - все как бы это не звучало но это ровно то что происходит внутри скрытого слоя. Мы инициализируем случайную матрицу весов размерностью которая подходит для математического умножения матриц. При математическом умножении матриц порядок важен и правило следующее количество колонок в первой матрице должно совпадать с количество рядов во второй матрице. Если матрица A у нас (4,2), то матрица весов у нас должна быть (2, любое значение) пусть будет 16 например. И результатом будет матрица (4, 16)
    Например
    A = np.array([[0,0],
                  [0,2],
                  [2,2],
                  [2,0]])
    W = np.random.uniform(-1,1,size=(2,16)
    result = np.dot(A,W)
    Здесь мы осуществили геометрическую трансформацию, мы получили представление данных в 16 мерном пространстве. Далее мы просто прибавляем также случайно инициализированный вектор b в подходящей размерности и все. Все эти трансформации линейны. Не линейность достигается функцией активации например relu то есть весь наш код будет
    import numpy as np
    
    A = np.array([[0,0],
                  [0,2],
                  [2,2],
                  [2,0]])
    W = np.random.uniform(-1,1,size=(2,16))
    b = np.zeros(16)
    result = np.dot(A,W) + b
    np.maximum(result,0)
    Все теперь у нас не линейная геометрическая трансформация. Затем посредством обратного распространения ошибки будет находится полезные геометрические трансформации, и будет происходит настройка значений (параметров модели) в наших матрицах весов (которые минимизируют loss функцию), то есть обучение модели. Это то что происходит в одном слое, последний слой там не много по другому, в зависимости от задачи и размерности которую мы хотим получить.
    Что выучить. Линейная алгебра Khan Academy. Обратное распространение ошибки осуществляется за счет подсчета градиента. Лучше начать с Single Variable Calculus курсы Calculus AP и ВС там же Khan Academy, и затем Multivariable Calculus Khan Academy. Все для нейронных сетей этого хватит, статистика как таковая для нейронных сетей на прямую не требуется, скорее для общего понимания и косвенно там выборку осуществить. Эти курсы шикарные и их достаточно для нейронных сетей. Для других алгоритмов их будет не достаточно. Ну и надо иметь ввиду, что у нас не обязательно математическое умножение тенсоров второго порядка (матриц), у нас могут быть конволюции. Пример что я привел это самый распространенный случай. Так что основы линейной алгебры, дифференцирование функции одной переменной затем многих (именно они и нужны), не пытайся сразу в дифференцирование функции многих переменных иначе не будешь понимать что к чему.
    Ответ написан
    Комментировать
  • Python. a = b = Class() - что это?

    Maksim_64
    @Maksim_64
    Data Analyst
    В первом случае две ссылки cur и dummy указывают на один и тот же объект ListNode(0). В случае если ListNode(0) это мутабельный объект то изменения в cur приведут к изменению в dummy и наоборот. То есть создается один объект и два указателя на него.

    Во втором случает создается два объекта с идентичным значением. И к каждому по указателю. Я на пример списков сейчас продемонструю.

    l1 = l2 = [1,2,3]
    print("Это список l1:", l1)
    print("Это список l2:", l2)
    l1.append(4)
    print("В список l1 добавили 4:", l1)
    print("Это список l2 и он изменился тоже:", l2)


    а теперь второй кейс
    l1 = [1,2,3]
    l2 = [1,2,3]
    print("Это список l1:", l1)
    print("Это список l2:", l2)
    l1.append(4)
    print("В список l1 добавили 4:", l1)
    print("Это список l2 и он не изменился:", l2)
    Ответ написан
    Комментировать
  • Как спарсить заголовок из title?

    Maksim_64
    @Maksim_64
    Data Analyst
    team = old.find("a")['title'] перед этим обернуть все try except потому что у тебя значение для некоторых 'a' получает значение None.
    То есть как то так
    for old in all_old_teams:
        try:
            team = old.find("a")['title']
            print(team)
        except TypeError:
            print(None)
    Ну и свою логику там настраивай собирай их куда тебе надо и т.д.
    Ответ написан
    1 комментарий
  • Повысить версию SqlAlchemy?

    Maksim_64
    @Maksim_64
    Data Analyst
    pip install -U sqlalchemy или на случай если нужны определенные версии pip install package_name==version.
    Где package_name имя библиотеки и version - его версия.
    Ответ написан
    Комментировать
  • Как список кортежей превратить в строку?

    Maksim_64
    @Maksim_64
    Data Analyst
    На случай если в кортеже может быть больше одного элемента
    from itertools import chain
    l = [('monkey',), ('dog',), ('cat',), ('fish',)]
    ', '.join(chain(*l))
    Ответ написан
    Комментировать
  • Как скачать видео?

    Maksim_64
    @Maksim_64
    Data Analyst
    используй pytube, понятно нужно установить python изначально. Но программировать не обязательно, pytube имеет и просто cli интерфейс (то есть команды можно выполнять из командной строки). https://pytube.io/en/latest/ там после установки, раздел https://pytube.io/en/latest/user/cli.html
    Ответ написан
    Комментировать
  • Как устранить ошибку генератора?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну что-то совершенно, не читабельное ты написал. В python генераторами принято называть функции которые возвращают итераторы используя yield. То есть любая функция которая содержит yield называется генератором.

    Твой "генератор" пытается заполнить массив значениями и к генераторам не имеет отношения от слова совсем.

    from field import field это не хорошо. Если тебе нужна переменная из другого модуля то import field затем field.field в том модуле куда импортировал.

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

    что касается непосредственно ошибки. То где то в коде ты вместо создания экземпляра класса создал ссылку на объект класса и затем у этого объекта пытаешься найти атрибут. Что бы было понятнее приведу пример.

    class A:
    
        def __init__(self,x):
            self.x = x
    a = A
    print(a.x)
    Выдаст точно такую ошибку. Нужно вместо a=A, написать a=A() со всеми параметрами, или на прямую ты обращаешься к объекту класса а атрибут у тебя экземпляра класса, то есть вот так.
    class A:
        def __init__(self):
            self.x = 'Hello'
    print(A.x)

    Ищи где у тебя в коде такое, а лучше начни писать весь свой код заново.
    Ответ написан
  • Практика очного собеседования для иногородних кандидатов?

    Maksim_64
    @Maksim_64
    Data Analyst
    Хороший пример составить простенькую дискретную модель. Вы получаете работу с вероятностью p и вознаграждением M, ну и соответственно теряете деньги в количестве K с вероятностью 1 - p. Понятно что простое математическое ожидание p*M - K*(1-p), в таких случаях не применяют, а имеют функцию риска, в которой учитывается все прочие факторы например:
    1. Какова цена поездки для вас (на сколько для вас это значимая сумма)
    2. Какова цена опыта интервью (может оно будет первое, а может у вас уже были оффлайн интервью)
    3. Что для вас значит посетить Москву, будет ли это сопутствующим плюсом
    и т.д. то есть подумать и оценить все это дело.
    Ответ написан
    2 комментария
  • Почему DB browser for sqlite и питон выдают разные результаты запроса?

    Maksim_64
    @Maksim_64
    Data Analyst
    контекстный менеджер делает commit но не закрывает базу. То есть ты должен закрывать соединение самостоятельно close(). https://docs.python.org/3/library/sqlite3.html#sql...
    например
    import sqlite3
    con = sqlite3.connect("tutorial.db")
    cur = con.cursor()
    cur.execute("CREATE TABLE movie(title, year, score)")
    cur.execute("""
        INSERT INTO movie VALUES
            ('Monty Python and the Holy Grail', 1975, 8.2),
            ('And Now for Something Completely Different', 1971, 7.5)
    """)
    #con.commit()
    print(cur.execute("SELECT * FROM movie").fetchall())

    insert открывает транзакцию, которая должна быть подтверждена commit (запусти сначала так), а потом раскоментируй и тогда в базу все запишется.
    выводит он то что не закомиченно, потому что объект содержит информацию. Еще раз контекстный менеджер делает commit но не закрывает соединение. В доках об этом прямо сказано.

    То есть у тебя только один commit (не явный посредством контекстного менеджера коммитит все что в теле контекстного менеджера) и два insert (второй то вне тела контекстного менеджера), соответственно последний insert не записывается в базу.

    Ну и это к твоему вопросу не относится, тут каждый раз об этом говорят, правильно вставляй значения в таблицу без форматирования строк.
    Ответ написан
  • Почему данная программа застревает в бесконечном цикле?

    Maksim_64
    @Maksim_64
    Data Analyst
    выполнять до те пор пока:
    l не равно k или l не равно km или lm не равно k или lm не равно km
    То есть если хотя бы одно из вышеперечисленных условий истинно выхода не произойдет.
    сделай print каждой переменной и посмотри, как минимум одно из твоих условий истинно, и выхода из цикла не происходит.

    если у тебя в твоих условиях или (or) и в списке хоть один True, то общее выражение будет True.
    Ответ написан
    1 комментарий
  • Как создать простую браузерную игру при помощи ChatGpt?

    Maksim_64
    @Maksim_64
    Data Analyst
    1. GPT пишет код очень не стабильно, делом случая он может и не плохое решение выдать и действительно с экономить время, а иногда это даже не решение (которое не работает), а то что в среде ИИ называют "галлюцинациями" то есть написать полный бред.

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

    3. Качество решений в различных областях сильно варьируется, в каких то он более стабилен, а в каких то его вообще нет смысла использовать.

    По итогу на сегодняшний момент, без человеческого контроля вы не можете рассчитывать на стабильный результат.
    Ответ написан
    3 комментария
  • Как исправить ошибку recursionerror при создании игры?

    Maksim_64
    @Maksim_64
    Data Analyst
    while True: Всегда остается истинным, и получается бесконечный цикл, нужно предусмотреть условие остановки цикла.
    Ответ написан
    Комментировать
  • Как быстро распарсить много json файлов на python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну во первых, pandas read_json и json_normalize (для вложенных json). Затем этот фрейм или подсет фрейма отправляешь в базу, методом to_sql если все делаешь правильно с точки зрения pandas (весь код будет без единого цикла) то это ускорит очень серьезно. Еще больше можно ускорить библиотекой polars она имеет схожий синтакс с pandas у ней куда меньший функционал по манипуляции данных, но она фокусируется на скорости в том числе и чтения файлов.

    Думаю скорости pandas будет достаточно, если нет то polars. Начать лучше с pandas документация очень хорошая, да и кода всего ничего будет.
    Ответ написан
    1 комментарий
  • Как накинуть несколько эффектов MoviePy на видео?

    Maksim_64
    @Maksim_64
    Data Analyst
    Несколько странный кусок кода у вас, отступ за чем-то в принципе должен давать ошибку и не работать. С библиотекой я не работал не разу, но глянув документацию, вот что она говорит.
    класс CompositeVideoClip, это для создания из нескольких видео одного. Если же говорить о наложении эффектов на видео то.
    from moviepy.editor import *
    clip = (VideoFileClip("myvideo.avi")
            .fx( vfx.resize, width=460) 
            .fx( vfx.speedx, 2) 
            .fx( vfx.colorx, 0.5))
    то вот пример из документации для применения нескольких эффектов к видео. Вместо этих эффектов, поставьте ваши или добавьте по необходимости. Думаю код предельно понятный.

    Все эффекты и трансформации на видео доступны здесь https://zulko.github.io/moviepy/getting_started/ef...
    Ответ написан
    Комментировать
  • Список из кортежей в словаре - как это понимать?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну смотри объявлять таким образом словарь не нормально, это не удобно.А вот если у тебя в результате каких то действий сначала создался объект список с кортежами где длинна кортежа обязательно два (содержит два элемента) то dict(мой список с кортежами), создаст из этого списка с кортежами словарь и это абсолютно нормально.

    Сам код откуда ты его взял, взят для демонстрации создания словаря из популярной структуры данных список с кортежами. У тебя есть ассоциации например l1 = [1,2,3] создаст список, для создания не пустого словаря требуется и ключи и значения, по этому ты либо создаешь его явно d1 = {'A':1,'B':2} либо нужна структура из которой python сможет понять что будет ключами, а что значениями. И список с кортежами (где длинна каждого кортежа обязательно два) такая структура.
    Ответ написан
    Комментировать
  • Как спарсить/вытащить из txt или html файла кусок строки, зная ее специфическое содержание?

    Maksim_64
    @Maksim_64
    Data Analyst
    from bs4 import BeautifulSoup
    
    text = '''
        <tr align="center"><td><a href="#0">First</a></td></tr>,
        <tr align="center"><td><a href="#1">This is second</a></td></tr>,
        <tr align="center"><td><a href="#2">third</a></td></tr>
    '''
    
    soup = BeautifulSoup(text,'html.parser')
    result = [ row.a.text for row in soup.find_all('tr')]
    print(result)

    или result = [ row.text for row in soup.find_all('a')] как удобнее для настройки дополнительных условий парсинга.
    Ответ написан
    Комментировать
  • Как исправить ошибку в работе с turtle?

    Maksim_64
    @Maksim_64
    Data Analyst
    Код абсолютно рабочий. Проверяй, не знаю может, когда ты писал square(bob) ты каким то образом использовал русскую 'о' или когда объявлял. Или может файл, когда писал после какого то запуска, когда ты добавил эту переменную то забыл сохранить изменения.
    Ответ написан
    Комментировать
  • Каким способом посчитать частоту сигнала по нескольким сэмплам?

    Maksim_64
    @Maksim_64
    Data Analyst
    чтобы вычислить частоту

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

    Глянем примеры.
    f(x) = 2*x+3 - детерминистическая
    Normal(0,1) - стохастическая даст случайное значение из Гаусовго распределения с параметрами среднее 0 и стандартное отклонение 1.
    f(x) = 2*x+3 + Normal(0,1) - это третий кейс, когда мы накладываем шум на некую функцию.

    В машинном обучении мы делаем допущении что наша проблема имеет вид Y = F(X) + E.
    Где X - это наши данные на вход, Y - это результат и E это определенная случайная ошибка. Мы говорим существует некая функция F которая детерминистическая и она сопоставляет данные на вход и результат. Так вот задача определить функцию и подобрать параметры которые минимизирует ошибку E.

    То есть на выходе у нас не точная частота, а предсказание частоты (возможно довольно точная).
    В зависимости какие методики и какими свойствами должная обладать оценочная функция это либо scikit-learn либо statsmodels либо нейронки Tensorflow + Keras.

    Если идет поиск точной частоты (отсутствует вариативность в задаче) то это поиск обычных параметров функции. То есть все это должно быть представлено как система уравнений (при условии достаточности информации) и просто решено. это scipy, numpy, sympy.
    Ответ написан
  • Почему с помощью Pandas не меняются данные в строке CSV файла?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну смотри это происходит потому что мы ставим индексом ИМЯ и его же меняем, можно ли это обойти, конечно элементарно. Все оставляешь как есть вот здесь добавляем параметр
    df = pd.read_csv('directory2.csv').set_index('Имя', drop=False).rename_axis('_Имя', axis=0)
    что бы у нас колонка имя не пропадала, и меняем имя у индекса, что бы он отличался от имени колонки.
    ну и при записи в файл индекс не пишем что бы ничего не дублировалось.
    df.to_csv('directory2.csv', index=False)

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

    И будь внимателен при парсинге ввода, там где указываешь имена колонок, если ты введешь колонку которой нет он ее просто добавит новой и все. df.columns должен содержать fields_to_change, по этому может добавочный небольшой защитный код написать придется, что бы например регистры не перепутались, пробелы лишние не оказались, можешь даже проверку ввести на ввод что пользователь ввел существующие колонки. Имена колонок лежат в df.columns
    Ответ написан
    3 комментария