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

    Maksim_64
    @Maksim_64
    Data Analyst
    Features, предоставленные мне для этой задачи, как я уже написал, обезличенные, поэтому они все нужные

    Данные могут быть числовые или категориальные. В свою очередь категориальные делятся на nominal и ordinal из чего следует что во первых если они присутствуют их надо закодировать и второе закодировать правильно, в sklearn есть OrdinalEncoder и OneHotEncoder. О том сделали ли вы это (и правильно ли сделали) вы нам конечно же не сообщаете, это действие относится к этапу Preprocessing data, там же Standard Scaler и другие возможно очень полезные трансформаторы вплоть до создания своего кастомного трансформатора.
    Просто данные не в один алгоритм не запихивают. Их приводят к такому виду (трансформируют) на которых алгоритм хорошо работает, а потом уже имеет смысл тюнить. Вам нужен результат. пожалуйста https://scikit-learn.org/stable/data_transforms.html . Вот это та глава в документации (а документация у sklearn как учебник) которая поправит дело. Результат достигается посредством трансформаций данных и в этой области лежит решение. Глава 6 что я вам скинул большая и за несколько часов или даже дней ее не осилить (если конечно же учится а не кусочки кода запускать). Начните с того что бы научится пользоваться объектом Pipeline (он не так прост как кажется) И с применением хотя бы простого трансформера StandardScaler и что бы без ошибок. Чтобы метод fit_transform вызывался на тренировочном сете а на тестовом только transform и т.д. или с правильным использованием Pipeline он это сам сделает. И приходите с кодом где вы перед тренировкой трансформируете данные.

    На данный момент у вас нет ничего 0.6 - 0.65 точность, у вас 300 / 500 = 0.6 то есть абсолютно случайно без какого либо обучения в среднем на длинной дистанции в 60% случаях можно угадывать статус 1.

    Мне нужно построить модель, которая будет предсказывать будущий статус.
    Что значит будущий речь идет о временной последовательности, а не о классической классификации?. Тогда препроцессинг должен быть сделан совершенно другой начиная от сплитов и т.д. В таком случае все данные нужно агрегировать разными функциями в пределах окна и на них учить, обязательно это проясните.
    Ответ написан
  • Как настроить пакет psycopg2 в VsCode для jupyter notebook на macOS M1?

    Maksim_64
    @Maksim_64
    Data Analyst
    Нажимаем ctrl+shift+p далее Python: Select Interpreter. Выбираете из тех окружений которые есть (там версии Python и пути к нему в списке.) которое вы будете использовать. После того как вы это сделаете ОБЯЗАТЕЛЬНО закрываете свой терминал (открытый внутри vs code (если конечно же он был открыт)) и cоздаете новый ctrl+shift+` и затем в этом терминале устанавливаете все ваши пакеты и они будут устанавливаться именно в это окружение. Не забудьте ОБЯЗАТЕЛЬНО создать новый терминал, он автоматически не меняет окружение в терминале после выбора Interpreter.
    Ответ написан
    2 комментария
  • Как вывести в строке только числа?

    Maksim_64
    @Maksim_64
    Data Analyst
    import re
    text = '1456gtefd14696'
    for number in re.findall(re.compile(r'\d+'), text):
        print('Число',number, end=' ')
    Ответ написан
    Комментировать
  • Пытаюсь научиться работе с нейросетями, столкнулся с такой ошибкой, что делать?

    Maksim_64
    @Maksim_64
    Data Analyst
    Внимательно посмотрите на ваш кусочек, а это как должно быть.
    W1 = np.random.randn(IND, HD)
    b1 = np.random.randn(HD)
    W2 = np.random.randn(HD, OUTD)
    b2 = np.random.randn(OUTD)

    И код заработает, вы перезаписываете переменные, что в итоге делает невозможным операции из линейной алгебры в силу несоответствия размерности объектов.
    Ответ написан
    1 комментарий
  • Как правильно составить цикл в phyton?

    Maksim_64
    @Maksim_64
    Data Analyst
    Для начала оберните ваш код тегом python.

    ваш псевдо код для сбора данных будет иметь вид
    result = []
    for url in urls:
        r = requests.get(url)
        soup = BeautifulSoup(r.content, 'html.parser')
        status = soup.find('div', class_='closed')
        titles = soup.find('h1', class_='section_hero__title')
        id= soup.find('p', class_='numer_id')
        result.append((url, status, titles, id))


    где urls это ваши urls из файла. Ваш результат будет список кортежей, где каждый кортеж имеет вид (url, status,titles,id). Полученную структуру данных легко записать в csv файл.
    можно например так.
    import csv
    with open('file.csv', mode='w') as file:
        writer = csv.writer(file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
        writer.writerow(['url','status','titles','id'])
        writer.writerows(result)

    Вот так запишет ваши данные первый ряд это названия колонок в вашем csv, а потом данные. Если названия колонок не нужны то уберите строку. writer.writerow(['url','status','titles','id']) из кода.

    Ну а так я бы рекомендовал установить pandas создаьть dataframe посмотреть на него может если надо что то подправить и из него писать csv например вот так
    import pandas as pd
    
    df = pd.DataFrame(data=result,columns = ['url','status','titles','id'])
    df.to_csv('file.csv')

    здесь мы создаем фрейм и пишем csv файл в функции to_csv можно задать параметер header=False тогда имена колонок не запишутся, плюс есть параметр mode, его можно поставить в 'a' (append) и если файл уже существует он будет добавлять туда новые строки.
    Ответ написан
    3 комментария
  • Как поменять цвет?

    Maksim_64
    @Maksim_64
    Data Analyst
    можно синхронизировать с использованной темой file->preferences->settings->Window затем находите Title Bar Style устанавливаете его в custom по умолчанию там (native). Далее он спросит о том что изменения требуют перезапуска, соглашаетесь и все. Далее ваше меню будет следовать установленной цветовой теме и при ее изменении цвет меню будет меняться вместе с ней.
    Ответ написан
    Комментировать
  • Какой тип нейроной сети выбрать для прогнозирования цен на жилье (академическая задача)?

    Maksim_64
    @Maksim_64
    Data Analyst
    Я бы точно не использовал нейронку для такой задачи . Классические алгоритмы ML предпочтительнее. Ну если хочется именно нейронку то эту проблему можно классифицировать как regression problem. Какой то разницы между нейронками подходящими для решения задач регрессии не будет. гуглишь neural network for regression problem. и выбираешь. Например вот. Пример В примере используется нейросеть которая будет прогнозировать стоимость дома (похожа на твой). Плюс там не только код и ссылка имеется на google colab notebook, со всем кодом (python) так что изучай.
    Ответ написан
  • Как достать ссылку?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну что бы ваш код заработал. В цикле вставьте.
    link.find('a')['href']
    Но в целом я бы изменил код и находил бы вот так а то если в span, class_='sub' более одной ссылки то не сработает.
    измененная версия
    for span in zap.find_all('span', class_="sub", limit = 3):
        for link in span.find_all('a',href=True):
            print(link['href'])
    Ответ написан
  • Как из pdf-файла спарсить таблицу, размещенную на двух страницах и сохранить в Excel?

    Maksim_64
    @Maksim_64
    Data Analyst
    Когда у вас есть два пандас фрейма конкатенируйте их с помощью pd.concat и записывайте объеденный фрейм напрямую в excel.
    псевдо код будет что то вроде этого.
    final_df = pd.concat([df1,df2], ignore_index=True)
    final_df.to_excel('имя файла')

    Все быстро и удобно без лишних записей в csv. Самое сложное это установка tabula бывает капризничает. Но в остальном все просто.
    Ответ написан
  • Как записать все данные в csv файл?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну если в консоли все работает, а в файл записал только один результат, то причина в том что файл все время перезаписывается.
    df.to_csv(r'C:\pythonProject5\my_data.csv',mode='a',header=False)

    Это если файл уже существует, если же нет. То первый раз вне цикла один раз запишите пустой csv. c именами ваших колонок.
    то есть
    columns = df.columns
    empty_df = pd.DataFrame(columns=columns)
    empty_df.to_csv(r'C:\pythonProject5\my_data.csv')

    и потом как я привел выше будет работать.

    Ну а вообще так не делается все собирается в один датафрейм и потом пишется в файл.
    ваш псевдо код будет иметь вид
    dfs = []
    for i in range(длина):
        Здесь вы сравниваете и создаете датафрефм но вместо записи его в файл добавляете в список
        dfs.append(df)
    final_df = pd.concat(dfs,ignore_index=True)
    final_df.to_csv()

    Вот така структура псевдо кода предпочтительнее чем каждый раз писать в файл. Опять же если все храните в файлах и они уже существует то mode='a' и header=False. что бы имена колонок не записывал.
    Ответ написан
    Комментировать
  • Как зациклить парсинг в selenium?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну в таком то виде он и вовсе будет ругаться, что не знает что такое data. А так при условии что там все парсится ну и что в orgs > 1 элемента, все сводится к изучении самых самых основ python.
    вот код по вашей аналогии (пример я привел свой)
    data = []
    for i in range(5):
        result = i**2
    
    data.append(result)

    а вот как это должно выглядеть
    data = []
    for i in range(5):
        result = i**2
        data.append(result)


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

    Maksim_64
    @Maksim_64
    Data Analyst
    from bs4 import BeautifulSoup
    import re
    text = '''
    <input id="ctl00_ContentPlaceHolder1_grdProducts_ctl00_ctl05_EditFormControl_tbValidityPeriod"/> # подходит
    <input id="ctl00_ContentPlaceHolder1_grdProducts_ctl00_ctl07_EditFormControl_tbValidityPeriod"/> # подходит
    <input id="ctl00_ContentPlaceHolder1_grdProducts_ctl02_ctl11_EditFormControl_tbValidityPeriod"/> # не подходит
    <input id="ctl00_ContentPlaceHolder1_grdProducts_ctl00_ctl09_EditFormControl_tbValidityPeriod"/> # подходит
    <input id="ctl00_ContentPlaceHolder1_grdProducts_ctl00_ctl11_EditFormControl_tbValidityPeriod"/> # подходит
    <input id="ctl00_ContentPlaceHolder1_grdProducts_ctl01_ctl11_EditFormControl_tbValidityPeriod"/> # не подходит
            '''
    substring = 'ctl00_ContentPlaceHolder1_grdProducts_ctl00_ctl' # подстрока
    soup = BeautifulSoup(text, 'html.parser')
    result = soup.find_all('input',{'id':re.compile(substring)}) 
    print(result)
    Ответ написан
    Комментировать
  • Какой процент распознавания точности артикула штучного товара на витрине по его внешнему виду считается "хорошим" а какой - "отличным"?

    Maksim_64
    @Maksim_64
    Data Analyst
    Хороший или отличный процент точности в контексте данной проблемы будет определятся бизнесом (при помощи специалистов разумеется). То есть "Приносит ли прибыль модель распознавания". Он же бизнес (опять же при помощи специалистов) установит порог для точности и ИНТЕРВАЛ (процент будет в интервале). при котором данная модель прибыльна.

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Довольно известное сообщение о предупреждении. На самом деле сейчас ведется разработка и в будущих версиях pandas это поведение должно принять более последовательный характер, потому что на данный момент оно непоследовательно. Что бы не повторять материал из свежей pydata. Вот ссылка Видео на видео где один из текущих разработчиков pandas объясняет все в деталях с примерами где будет это предупреждение а где нет почему оно возникает что с этим делать сейчас и что будет дальше.

    Если же в двух словах (Что плохо для данного вопроса, он глубже чем кажется), то предупреждение предупреждает о том что в вашем во фрейме из которого получен подсет данных могут произойти изменения при изменении значения в подсете.

    Но тема более глубокая и там есть код где это произойдет и где нет. Так что рекомендую видео.
    Ответ написан
    Комментировать
  • Как достать из строки все что между скобок?

    Maksim_64
    @Maksim_64
    Data Analyst
    import re
    pattern1 = r"\[([0-9]+)\]"
    pattern2 = r'\[(.*?)\]'
    st = "1, 43, qweqwe [123] = [f]"
    result  = re.findall(pattern2,st)
    print(result)


    Если нужны только цифры внутри квадратных скобок используйте pattern1, если нужен любой текст внутри скобок используйте pattern2.
    Ответ написан
    Комментировать
  • При парсинге данных получаю пустой список?

    Maksim_64
    @Maksim_64
    Data Analyst
    soup.find_all('div',class_ = 'BNeawe iBp4i AP7Wnd')

    Возможно вы не отключили JavaScript в инспекторе и видите элемент который не видит парсер. Вот код у меня он возвращает список из которого легко извлечь числовое значение. У меня работает.
    Ответ написан
  • Почему возникает ошибка при записи в базу данных(serial)?

    Maksim_64
    @Maksim_64
    Data Analyst
    Как поправить запрос, что бы у меня айдишники автоматически заполнялись по мере их увеличения в бд, а не приходилось руками хардкодить цифры


    На то он и serial что бы при вставлении не указывать это поле, оно будет автоматически увеличиваться на один при добавлении новой записи.
    Ответ написан
    1 комментарий
  • Какой тип нейронной сети лучше подходит для работы с числовыми входными параметрами разной длины?

    Maksim_64
    @Maksim_64
    Data Analyst
    1. Все сети работают с числами, если входные данные не числа то они кодируются (разными методами в зависимости от типа).
    2. А почему не использовать стандартные алгоритмы классификации? Multinomial Logistic Regression, Random Forest Classifier и.тд. Основная работа она все равно ляжет трансформации и манипуляции с данными.
    3. Что касается размера входного вектора. То я бы работал с фиксированным размером. Потому что чем больше предикторов ввел пользователь тем точнее должен быть результат. Насчет заполнения нулями не уверен. Я бы провел анализ важности предикторов установил бы веса и заполнял бы не нулями а например вес умножить на среднее значение по предиктору в тренировочном сете. (Но это как один из возможных сценариев) Заполнение данных большая работа особенно для такой задачи, где они по условию будут. Просто нулями где максимум 12 а минимум три. Что может алгоритм предсказать если у него будет вектор где в худшем случае только 3 компонента не нули. Каким образом это будет работать? Я бы однозначно заполнял данные не введенные пользователем. ВЕС предиктора * на какую нибудь агрегирующую статистику по предиктору.

    Я бы использовал, scikit-learn здесь.
    1. Провел бы анализ важности предикторов каждого в отдельности. (получил бы веса).
    2. Посмотрел бы что за дистрибуции у каждого предиктора в отдельности (что бы понимать какой статистикой заполнять когда на входе этот предиктор отсутствует).
    3. Возможно нормализовал или стандартизировал предикторы. (по выбору)
    4. Затем начал бы работать с моделями (смотрел бы что получается)
    5. Если что то получается тюнил бы параметры если нет менял бы трансформации данных.

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

    И да пункты не воспринимай буквально (там нету разбиения на тренировочную выборку и тестировочную выборку ) И много чего еще нету. Это не инструкция (конкретики мало), а общая картинка возможного решения проблемы.
    Ответ написан
    Комментировать
  • Можно ли запросить в NASA данные?

    Maksim_64
    @Maksim_64
    Data Analyst
    https://svs.gsfc.nasa.gov/cgi-bin/details.cgi?aid=4768 прям под таблицей такой же как у вас есть ссылка json или текстовый файл, со всей инфой как у вас за весь год. Загружайте.
    json - https://svs.gsfc.nasa.gov/vis/a000000/a004700/a004...

    txt - https://svs.gsfc.nasa.gov/vis/a000000/a004700/a004...
    Ответ написан
    1 комментарий
  • Можно ли эмулировать нажатие на кнопку на сайте библиотекой Бютифул суп?

    Maksim_64
    @Maksim_64
    Data Analyst
    beatifulsoup это парсер для html и xml документов. И к нажатиям кнопок не имеет никакого отношения от слова совсем.
    Ответ написан
    1 комментарий