Задать вопрос
  • Сегментации изображения, термограммы. Какой способ выбрать?

    Maksim_64
    @Maksim_64
    Data Analyst
    Это так не работает. Нужно наблюдать процесс машинного обучения, метрики, на тренировочном сете на валидационных наборах. Потом VGG это предтренированные модели. Ну сделай весь процесс сам с kmeans (используй scikit-learn) и сравни результаты. А так полный список методов и как с ними работать. https://scikit-learn.org/stable/modules/clustering... Там же и все метрики для кластеризации, как сравнивать. Да и лучшие практики. Вообще сайт scikit-learn куда больше чем просто документация.
    Ответ написан
    Комментировать
  • Как нарисовать гистограмму?

    Maksim_64
    @Maksim_64
    Data Analyst
    Мы строим диаграммы (гистограмма это разновидность диаграммы), для того что бы иметь какое то полезное представление о данных, диаграмма должна о чем то "говорить". О чем же мне должна рассказать твои диаграмма (приложенное фото), я не знаю. Гистограмма показывает плотность распределения номинальную или относительную. То есть номинальную зеленых шариков у меня 10, красных 5, а белых один, относительную в виде пропорций то есть 10/16, 5/16, 1/16. Где 16 это общее количество элементов. Это дискретный кейс, известный как bar chart. Также есть непрерывный кейс, например значения наши от 0 до 1 или -3 до 3. Мы разбиваем на интервалы известные как "bins" и считаем количество номинальное или относительное в каждом интервале. Давай пример сообразим.
    zero_ones = np.random.choice([0,1], 100, p = [0.3,0.7])
    unique, counts = np.unique(zero_ones, return_counts=True)
    unique_strings = [str(digit) for digit in unique]
    plt.bar(unique_strings,counts, edgecolor='black')
    plt.show()


    Мы сгенерировали 100 нулей и единичек с вероятность 30% иметь 0 и 70% иметь 1 (для примера). Посчитали из массива и смотрим посредством графика на распределение данных.
    Пример два
    X = np.random.normal(0,1,1000)
    plt.hist(X, edgecolor='black', bins=50)
    plt.show();

    Мы сгенерировали выборку 1000 значений из гаусового распределения с параметрами среднее 0 и стандартное отклонение 1. Разбили на 50 интервалов и посчитали количество в каждом интервале.
    Вот это гистограммы. Они рассказывают о плотности распределения.
    А то что у тебя это не гистограмма. Что у нас по оси индексы, что по оси y 1 или 0. Какие то индексы пропущены, там и пробелы. В гистограммах по оси 'x' у тебя уникальные значения, а по оси 'y' либо номинальное либо относительное количество.
    Ответ написан
    Комментировать
  • Как сделать чтобы на атрибут users ссылались не отдельно, а вместе?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну код ты поленился, редактировать, а ответов хочешь. Во первых используй атрибуты класса, а не экземпляра класса. Во вторых переопределять __del__ плохая идея (который ты кстати с ошибкой написал __dell__). Ты ожидаешь что del вызывает __del__ нет это не так. del понижает количество ссылок на один на объект и в случае если их стало 0 то произойдет вызов. Например
    class A:
        def __del__(self):
            print('Hello')
           
    a = b = A()
    del(a)
    del(b)
    Удалили ссылку, но есть еще одна и вызова __del__ не происходит. Только, когда ссылок 0 и сборщик мусора сделал свою работу произойдет вызов. Или второй пример.
    class A:
        def __del__(self):
            print('Hello')
    a = A()
    a = 4
    Я вообще del не вызывал, а __del__ вызвался. del не вызывает __del__. Так что заводи, счетчик, как атрибут класса и его увеличивай на один при создании экземпляра класса или понижай определи ему метод delete_user какой-нибудь.
    Ответ написан
    Комментировать
  • Является ли цена за проект неадекватно завышенной?

    Maksim_64
    @Maksim_64
    Data Analyst
    1. Ценообразование - привязано, ко времени, месту и обстоятельствам. Один и тот же пирожок стоит в булочной одну сумму, а в аэропорту другую.

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

    3.
    я бы себя оценил где-то в 1500р/час
    Это фантазии, не важно во сколько, ты себя оцениваешь. Твой труд стоит столько - сколько за него готовы заплатить на рынке труда. Если ты вообще на нем представлен, если ты не находишься на рынке, то стоимость твоего труда 0, и уровень твоей экпертизы не важен. Важно не то, как ты себя оцениваешь - а как тебя оценивает рынок.

    Как тебе выстраивать отношения с друзьями это твое личное дело, я на эту тему даже рассуждать не хочу. Кто то может быть нам чем то обязан, кому то мы можем быть чем обязаны. Выставление внутренних дел на показ признак отсутствия делового этикета.
    Ответ написан
    6 комментариев
  • Как построить диаграмму в Python по массиву?

    Maksim_64
    @Maksim_64
    Data Analyst
    Какой именно график, интересует? Я не знаю что ты читал, но построить элементарно. matplotlib, seaborn, например.
    import matplotlib.pyplot as plt
    import numpy as np
    a = np.array([2, 2, 2, 1, 2, 1, 1, 2])
    unique, counts = np.unique(a, return_counts=True)
    unique_strings = [str(digit) for digit in unique]
    plt.bar(unique_strings, counts)
    plt.show();
    А так заходишь в галерею matplotlib и просто берешь кокретные примеры.
    Ответ написан
  • Как сравнивать два текста и находить между ними сходство средствами python?

    Maksim_64
    @Maksim_64
    Data Analyst
    а как сравнить заготовленный заранее текст с тем, что мы только что получили, чтобы выполнить последующие действия?

    А ты уверен, что тебе нужно сравнение двух текстов? Выглядит как на вход текст за тем он его сопоставит с определенным действием. То есть задача на классификацию с текстом, то есть у тебя есть набор действий labels (1,..n) и есть разный текст который нужно классифицировать в одну из групп, ну и затем просто выполнить код (действия) который наступает в случае (1,..n). Tensorflow + keras гуглить text classification, там есть все что нужно, основная возня будет закодировать при чем именно входные данные, сам target там one-hot-encoding и он там из коробки есть. В общем это довольно обычная задача, полно туториалов.

    Если же речь идет именно о сравнении двух текстов, то тут все на много сложнее. Во первых тут нужно определить критерий их "похожести", определить способы кодировки, в остальном принцип будет метрика "дистанция" там обычно начинают с cosine similarity. Библиотеки как scikit-learn так tensorflow+kears ну и конечно же NLTK для этого используют. Возни будет больше в разы по этому посмотри а не можешь ли ты сгруппировать то есть пользователь вводит текст и нужно его сопоставить (1,..n).

    Что бы разобраться конкретно какие вопросы перед тобой станут, как кодировать, какие виды похожести (similarity), рекомендую вот этот большой гайд, https://www.newscatcherapi.com/blog/ultimate-guide.... Ну а делал бы я лично все это дело на tensorflow+keras.
    Ответ написан
    1 комментарий
  • Как исправить данные ошибки Python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну смотри, как тебе помочь в слепую на этом коде я не знаю, у меня нету возможности дебажить. Смотри,

    1. Ты создаешь словарь summary, где ключи это элементы массива cats, а значения pandas фреймы, (Нормальный ход, так делают).

    2. Затем ты обращаешься к ключу сначала словаря, а затем выбираешь подсет фрейма и меняешь его. Подсет фрейма надо выбирать методом loc[index, column]. Посмотри в документации. Key Error может , как ключи словаря давать, так и индексы фрейма тоже key error могут давать, если их там нет.

    3. Сделай функцию которая делает все для одного фрейма, функция получит фрейм и вернет фрейм. Когда убедишься что все работает, собирай эти фреймы в словарь. В текущем виде понятно, у меня нет данных что бы дебажить, но код плохо читабельный, тебе нужно больше декомпозиции, что бы ты мог проверять, как твой процесс идет, сделай больше функций и самому будет легче и вопрос более точный можно будет задать.

    4. CountVectorizer это scikit-learn посмотри там examples, они там супер, рассмотри так же использование Pipeline, на чистом pandas весь процесс не пишут. То есть всю последовательность трансфлормаций собирают в Pipeline, ты в своем коде еще не дошел до тестового сета, но применит трансформации на тестовых данных сам при чем правильно, если все свои трансформации чейнить в Pipeline.
    Ответ написан
  • Как достать с pdf файла (с ссылки на pdf)?

    Maksim_64
    @Maksim_64
    Data Analyst
    Для таких задач тебе нужно спарсить этот pdf в pandas фрейм. Тогда твоя задача доставать из этой таблицы любые данные становится весьма тривиальной (В худшем случае несколько строк кода). Можно создать фрейм и используя твою библиотеку PyPDF2, но я предпочитаю tabula мощный парсер pdf таблиц (и он их парсит в фрейм по умолчанию), там возится особо не придется. https://tabula-py.readthedocs.io/en/latest/ там обрати внимание, нужно будет java поставить.

    Гугли pdf table to pandas dataframe. И вперед вручную перебирать таблицы не нужно. Есть подходящие инструменты, которыми ты можешь и быстро и легко осуществлять выборки любой сложности.
    Ответ написан
  • Почему не дополняются значения в return?

    Maksim_64
    @Maksim_64
    Data Analyst
    это не обычное сложение, а сложение и присваивание self._balance += amount эквивалентно. self._balance = self._balance + amount. Ты можешь потенциально использовать такую форму с := (walrus) оператором. и код будет выглядеть вот так
    return (self._balance := self._balance+ amount) скобки здесь обязательны. С обычным присваиванием так нельзя.

    Отредактировано ошибочка вышла Мы не можем использовать walrus оператор, с атрибутами экземпляра класса. Кстати, это интересно, он выдает SyntaxError: cannot use assignment expressions with attribute. Я ожидал, что это будет NameError. Вот уже удивительно, век живи век учись.
    Ответ написан
    9 комментариев
  • Как в одну строчку сосчитать сумму произведения ключей и значений?

    Maksim_64
    @Maksim_64
    Data Analyst
    sum(float(key.value)*value for key,value in self._testes.items())


    или если хочешь в Decimal ответ то убери float.
    Ответ написан
    1 комментарий
  • Как скачать видео на YouTube с помощью python3. 9 bs4?

    Maksim_64
    @Maksim_64
    Data Analyst
    Что значит спарсит видео по ссылке? beatifulsoup парсит html и xml. Что бы качать видео c ютуба средствами python, есть специальная библиотека pytube. https://pytube.io/en/latest/
    Ответ написан
    2 комментария
  • Появились уже нейросети для анализа или создания электронных схем?

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

    Сколько аудитории будет, у подобной нейронной сети, ответ не много. По этому если такие решения существуют, они не open source, потому что в этом нет никакого смысла.
    Ответ написан
    Комментировать
  • В чем логика решения задачи Флавия?

    Maksim_64
    @Maksim_64
    Data Analyst
    Вот маленькая статья на хабре по твоей задаче. Там нет такого кода, как у тебя. Еще и комментарии полезные имеются.
    Ответ написан
    Комментировать
  • Как работает в данном примере декорирование?

    Maksim_64
    @Maksim_64
    Data Analyst
    Не очень понятно, а что не понятно. Передается объект класса в функцию, ты зачем назвал параметр функции func а передаешь туда объект класса. Вот здесь result = func(*args, **kwargs) ты инициализируешь экземпляр класса, затем возвращаешь его да и все, MyClass у тебя стала функцией которая возвращает экземпляр класса. Ну добавь там чего нибудь например.
    def f():
        return 100
        
    def decor(func): 
        def _wrapper(*args, **kwargs):
            result = func(*args, **kwargs)
            result.complex_calculation = f
            return result
        return _wrapper 
    
    class MyClass:
        def complex_calculation(self):
            return 42
    
    MyClass = decor(MyClass)
    
    my_obj = MyClass()
    
    print(my_obj.complex_calculation())

    Твой метод вернет, не 42, а 100. Или объяви метод какой-нибудь которого нет.
    Ответ написан
  • Можно ли предсказывать несколько признаков одной моделью нейронной сети?

    Maksim_64
    @Maksim_64
    Data Analyst
    Конечно можно. Это называется Multitarget Classification или Mixtarget classification.
    Смотри в целом. Тип скрытого слоя + Конфигурация размерностей последнего слоя + подходящая функция активации + подходящая loss функция позволяет конфигурировать практически все что угодно.

    Гугли neural networks Multitarget Classification, это не посредственно то что ты ищешь.
    Например вот https://towardsdatascience.com/predicting-mixed-ta..., Но лучше гугли сам. И приходи с более конкретными вопросами, может надо будет помочь сконфигурировать слои правильно например или препроцессинг сделать.
    Ответ написан
    Комментировать
  • Как и где учить математику, если вкатываешься в нейросети?

    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))
    Ответ написан
    Комментировать