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

    Maksim_64
    @Maksim_64
    Data Analyst
    т.е я правильно понимаю, что распределение исходных данных может быть каким угодно, главное чтобы при бустрапировании выборки средние этого распределения имели нормальное распределение?
    Нет, ты в корне не правильно понимаешь. Если ты осуществляешь случайную выборку из ЛЮБОГО распределенния, берешь СРЕДНЕЕ значение по выборке, так распределение ТАКИХ СРЕДНИХ ЗНАЧЕНИЙ будет всегда нормально, независимо от распределения популяции, при достаточно большем размере выборки. Это CLT (central limit theorem).

    t-test сравнивает средние по группам. Так вот основные ДОПУЩЕНИЯ это.
    1. Независимость
    2. Отсутствие экстремальных величин.
    3. И НОРМАЛЬНОЕ распределение групп по которым считались средние для сравнения.
    Это основные подробнее гугли.
    Ответ написан
    3 комментария
  • Рекуррентная нейросеть для прогнозирования на keras?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну в целом в плане решейпинга, все не правильно. Посмотри размерности своего labels. Это должен быть одномерный массив, длинной соответствующий количеству рядов в массиве features (ты его назвал training data). Потом а на чем ты тренируешься 15 рядов 11 колонок, я про training_data. Это абсурд. Этот код не поправить. Тебе нужен туториал и по нему адаптируюй под свои данные.

    Например вот там google colab c предсказаниями акций с использованием kears.Sequential, ну и комментарии кое какие имеются.

    Также на медиуме есть туториалы с объяснениями (на английском). В общем гугли keras sequential stock prices example и разбирайся по примерам. Это мертвый код, весь решейпинг переписывать надо. Плюс там надо будет тестовые данные хитро готовить, двигать и подавать в модель в цикле. В общем тебе нужен пример.
    Ответ написан
    7 комментариев
  • Как верифицировать российский номер телефона для доступа к GPU в Kaggle?

    Maksim_64
    @Maksim_64
    Data Analyst
    1. Формально, colab побыстрее, но при определенных действиях kaggle куда проще в использовании.
    2. Проблем с российскими номерами нет. (верифицируют без проблем)
    3. Подобные проблемы случаются иногда, он и просто google может не верифицировать только купленный номер.
    4. Поменять номер, писать в поддержку, будь уверен что ты пишешь в поддержку правильно, я не припомню, что бы их поддержка не отвечала, например в этом году у меня был верифицированный номер (но он стал не активным и я меня на новый, проблем не возникло.
    Ответ написан
    Комментировать
  • Как с помощью python загружать данные на страницу?

    Maksim_64
    @Maksim_64
    Data Analyst
    "нажимать" это нужен эмулятор браузера selenium.
    Ответ написан
    5 комментариев
  • Как добавить явное условие при обучении модели AI?

    Maksim_64
    @Maksim_64
    Data Analyst
    Явные условия (детерминистические) это не про машинное обучение. Сама суть машинного обучения это обучение без задания явных инструкций.

    Твоя проблема, большая называется "несбалансированные классы". 5 в одном 100 в другом это безнадега, модель по умолчанию имеет большую предрасположенность, что мешает обучению.

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

    Советую изучить вот эту статью на эту тему внимательно, и запастись терпением. Вот эта статья с медиума (открывается только через vpn) по крайней мере у меня, там тоже BERT и тоже решается проблема с не сбалансированным классами. Есть код. Но повторю проблема решается разными стратегиями препроцессинга (первая статья).
    Ответ написан
    1 комментарий
  • Как исправить ошибку при использовании pandas concat?

    Maksim_64
    @Maksim_64
    Data Analyst
    1. Почему не работает. Потому что concat принимает список с фреймами или series'ами. Твой объект это список с кортежами, а должен быть список с фреймами.
    Раньше, я так понимаю ты использовал пустой датафрейм и к нему в цикле конкатенировал словарь. Если раньше твой код работал то и сейчас ты можешь собрать список словарей и создать из них фрейм. Например
    d1 = {'A':1,'B':2}
    d2 = {'A':3,'B':4}
    df = pd.DataFrame.from_records([d1,d2])
    собирашь в список словари и по этом передаешь методу from_records. Это вместо concat. Если хочется работать с concat. То при каждой итерации ты создаешь отдельный фрейм с данными и одинаковыми колонками, собираешь эти фреймы в список и потом concat будет прекрасно работать например.
    dfs = []
    for i in range(3):
        df = pd.DataFrame({
            'A':np.random.randn(4),
            'B':np.random.choice(['green','blue','white'], 4)
        })
        dfs.append(df)
    final_df = pd.concat(dfs,ignore_index=True)

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Если ПЕРВОЕ КОЛИЧЕСТВО = ВТОРОЕ КОЛИЧЕСТВО / 1.25, то второе количество больше в ТОЧНОСТИ на 25%.
    Если ПЕРВОЕ КОЛИЧЕСТВО <= ВТОРОЕ КОЛИЧЕСТВО / 1.25, то второе количество больше на 25% ИЛИ более.
    Это по поводу одной проверки в зависимости от условия (строго равно или (больше или равно)). Разберись какое из условий использовать.

    Инициализируешь переменную-счетчик которая будет считать количество условий отвечающих условию выше. (count = 0), если условие истинно count = count + 1. Затем после обхода всех условий (count / N) * 100. где N это общее количество проверок.

    Откуда взялось 1.25. Как нам увеличить число на определенный процент? ЧИСЛО * (1 + ПРОЦЕНТ / 100.) В нашем случае процент 25. Упрощая получим ЧИСЛО * 1.25 = ЧИСЛО УВЕЛИЧЕННОЕ на 25%. Но у нас по условие даны два количества и нужно проверить является ли второе больше первого на 25%. Соответственно получаем то что я написал в сам начале.
    Ответ написан
    Комментировать
  • Как исправить ошибку Scikit-learn?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну код писал не ты, просто взял откуда-то да и все. Ошибка элементарная. У тебя где то он должен подсветить не совпадают размерности массивов. (1,4901) - это матрица с одним рядом и 4901 колонкой, а второй массив одномерный. Предположу что ошибка происходит при рисовании графика, это matplotlib выдает такую ошибку.
    Я тебе сделал маленький пример с идентичной ошибкой.
    X = np.arange(0,4901)
    y = 1.2 * X + 3
    X = X.reshape(1,4901)
    plt.plot(X,y)

    Вот мой код выдаст такую же ошибку. Как поправить нужно привести размерности массивов, к виду при котором с ними можно работать. ну например либо plt.plot(X.reshape(-1,1),y) сработает либо распрямить X сработает plt.plot(X.ravel(),y). И так и так сработает. Ищи на каком plot'e у тебя ошибка и приводи размерности к подходящему виду.
    Ответ написан
    Комментировать
  • Как правильно найти и описать аппроксимацию данных нормальным распределением со смещенным центром?

    Maksim_64
    @Maksim_64
    Data Analyst
    И так о сути вашей задачи. Перед вами "случайная выборка" sample distribution. Вы утверждаете что общее распределение (population distribution) нормально. Откуда вы это взяли я не знаю, но допустим может условие проблемы таково. Функция нормального распределения имеет два параметра среднее (mean) и стандартное отклонение (standard deviation). Общий вид N(mu, std). Ваша статистическая задача это осуществить аппроксимацию этих параметров на основе данных случайной выборки (sample).

    Нужно найти точку максимальной распространенности вида (т.е. на какой высоте его больше всего).
    У непрерывных распределений не бывает точек, бывает интервалы. Вероятность в любой точке равна нулю, это одно из главных различий дискретного pmf (probability mass function) от непрерывного pdf (probability density function).

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

    Но это не учитывает, что центр может быть за пределами анализируемого диапазона

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

    Теперь к ответу на оба ваши вопроса:
    На ваших графиках попытка аппроксимировать pdf, для данных на основе наблюдений. В реальности это делается ну например методами MLE (Maximum Likelihood Estimation) Это числовой метод. В том числе полно примеров и на python. Так и гуглить python maximum likelihood estimation normal distribution. Аналитические методы тоже есть конечно. гуглить population mean from sample distribution. Ну и там в определенном интервале будет лежать mean. Но аналитические методы подразумевают слабовыполнимые допущения нужно знать стандартное отклонение популяции например, по этому на практике использует числовые то есть MLE. По терминалогии это классическая статистическая задача на основе выборки осуществить (statistical inference) то есть аппроксимировать параметры population distribution. Точную терминологию (на русском) смотри, в вики. Я привык все это дело на английском делать.
    Ответ написан
    7 комментариев
  • Какой нейронной сетью (или другим инструментом) можно проанализировать текст чтобы понять настроение клиента?

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

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

    Ключевое, здесь это классификация, а какого то самого лучшего алгоритма или нейронной сити нет, надо моделировать и смотреть.
    Ответ написан
    6 комментариев
  • Как читать данный график?

    Maksim_64
    @Maksim_64
    Data Analyst
    Как читать, тут не важно что ты обучаешь, обучения нет обычный шум разного уровня, с увеличением количества шагов у тебя постепенно (обычно не линейно) должна снижаться ошибка (минимизироваться функция потери). Ничего подобного на графиках нет. Просто случайный шум да и все. Обучения НЕ ПРОИСХОДИТ.
    Ответ написан
    Комментировать
  • Fine-tuning опенсорсного LLM новому языку?

    Maksim_64
    @Maksim_64
    Data Analyst
    Приблизительно все ваши вопросы, не связаны с реальностью.

    1. Машинное обучение это НЕ детерминистический процесс, то есть нельзя даже предположить что и сколько займет времени, пока не начал решать абсолютно конкретную задачу посредством абсолютно конкретного инструмента.

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

    3. https://github.com/Hannibal046/Awesome-LLM чего из open source там нет?
    Ответ написан
    7 комментариев
  • Что делать с экстремально дисбалансным датасетом?

    Maksim_64
    @Maksim_64
    Data Analyst
    1. Метрики используй либо ROC, а лучше матрицу ошибок классификации (confusion matrix). Тебе здесь необходимо смотреть в сторону байесовых интерпретации теории вероятности.

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

    3. Посмотри в сторону алгоритмов "детекции аномалий". Из известных алгоритмов SVM может быть использован ну у них есть и свои более специализированные (даже для медицины свои бывают). гугли anomaly detection classification python или на чем ты там реализуешь и изучай. Это большая тема в машинном обучении и вообще отдельный навык и например какой то датасаентист может фокусироваться только на детекции аномалий.

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

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Нейронная сети, актуальны для задач где присутствует ВАРИАТИВНОСТЬ. Вы имеете входные данные обозначим их Х вы имеете функцию которая сопоставляет эти данные с выходными данными (извлечь ИНН и другие пункты договора) обозначим их y. Так вот если вариативность отсутствует то данная задача f(X) = y, решается парсингом документа, а не нейронными сетями. Если задача имеет вид f(X) = y + E, где E это случайная ошибка, то нейронная сеть это один из возможных алгоритмов МИНИМИЗАЦИИ этой ошибки, но НЕ полного ее исключения. Так что надо иметь ввиду что 100 процентной точности не добиться. И ответить себе а допустимо ли это.

    Что касается твоих вопросов, ну например пункт номер два это целый раздел в машинном обучении. Который содержит в себе несколько подпунктов. И дело это инженерное - а не вот какой то метод решит все мои проблемы. Пункт номер три обе могут быть использованы. Пункт четвертый, а потянешь с нуля. А готовые модели они решат частный кейс твоей проблемы? Откуда нам знать, с какой точностью готовые модели будут извлекать данные. Ну а первый вопрос, это всего лишь api для моделей и выбирать надо ту с которой имеешь опыт работы, какой то лучшей нет.
    Ответ написан
    1 комментарий
  • В чем проблема random.uniform?

    Maksim_64
    @Maksim_64
    Data Analyst
    При распаковке time_range у тебя 12 элементов а должно быть два. По всей видимости вот это 43200, 50400 это массив строк, а не два числа в массиве. Вот он тебе и распаковывает их в uniform("4","3","2"..,"0"). А должен распаковывать, в виде uniform(43200,50400). time_range приходит не в том виде в котором ты его ожидаешь.

    Пишет он takes 3 потому что он еще и self считает. И пишет он 13 по факту в time_range у тебя 12 их также self учитывает. Так и выходит 43200, 50400 - 10 цифр + 1 запятая + пробел = 12 + self = 13 элементов.
    Ответ написан
    Комментировать
  • Как правильно импортировать таблицу excel в бд postgre?

    Maksim_64
    @Maksim_64
    Data Analyst
    Я бы в принципе рекомендовал использовать pandas для таких целей.
    1. Читаем excel в pandas dataframe псевдокод будет такой.

    import pandas as pd
    df =pd.read_excel(data.xlsx,sheet_name=’Ткани’)

    у функции read_excel много параметров, в том числе header, index_col которые возможно придется настраивать.

    2. Глянул бы на него что таблица в порядке (это как фрейм запишется в базу), глянул бы на типы данных, df.dtypes что бы все типы колонок, были в том виде как их ожидает база. Если надо изменил бы их. Проверил бы есть ли пропущенные значения (nan, NA). Если есть провел бы работу с ними.

    3. Затем бы отправлял в базу методом to_sql(). Псевдо код будет такой.
    df.to_sql('table_name', connection, if_exists='replace')

    Параметр if_exists (если таблица существует) имеет также метод append просто весь фрейм добавит новыми строками, и fail тогда будет ошибка.

    У pandas хорошая документация и он силен в чтениях фалов любых форматов, так что если что то не получается, это почти всегда поправимо, ну и как писать в базу тоже конфигурируется очень удобно, так что если в этом будут проблемы то тоже решается.
    Ответ написан
    1 комментарий
  • Как определить, где запущен код python - в PyCharm или в Google Colab?

    Maksim_64
    @Maksim_64
    Data Analyst
    from tqdm.auto import tqdm
    И все для терминала будет обычное, а для notebook'a специальное.
    Ответ написан
    2 комментария
  • Как выбрать правильно выбрать период в pandas?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну во первых ты не представил игрушечного датафрейма (входные данные), и каков желаемый результат (выходные данные).

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

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

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({
        'temperature':[
            1.5,1,4,-2,1,-1,-1,4,3,2,1,-2,-3,-4,-5,-6,-1,2,-2,-2,-3,4,-5,-3,3,1,2,5,3,2
        ]
    }, index = pd.date_range('2023-01-01', periods=30))
    
    
    negative_groups = (
        df
        .query('temperature < 0')
        .groupby((df.temperature > 0).cumsum())
    )
    positive_groups = (
            df
            .query('temperature >= 0')
            .groupby((df.temperature < 0).cumsum())
    )
    start_date = [value for value in negative_groups.groups.values() if len(value) >=5][0][4]
    end_date = [value for value in positive_groups.groups.values() if len(value) >=5][0][4]
    
    df.loc[start_date:end_date]


    Я создал фрейм, и вытащил из него индексы даты, 5-го значения для последовательно отрицательных элементов. Как начало зимы и индекс даты 5-го значения для последовательности положительных элементов. И осуществил выборку между этими датами.

    Заметь, если у нас например 6 повторяющихся отрицательных элементов то он он возьмет дату 5 так как по условию если 5 то начало зимы и если 5 то конец.

    Ну распечатай фрейм и распечатай выборку подсета из фрейма и убедишься, что работает правильно. Бери мой пример и прикручивай его к своим данным. Не забудь дату поставить в индекс и не забудь что бы у даты был тип данных date а не object.
    Ответ написан
  • Почему Jupyter noteboor не видит torch?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ты когда команду запускаешь, !pip3 show torch там тебе должно выдать в том числе и location (Путь). Ты не упомянул, у тебя стоит анаконда или ты просто jupyter поставил. Судя по всему анаконду ты не установил. Создай окружение посредством conda в терминале, активируй его conda activate environment name. Затем запусти, jupyter и тогда устанавливай torch.

    Еще в jupyter посмотри у тебя есть разные окружающие среды ты можешь сменить kernel? если нет установи ipykernel. И проделай то что я написал выше.

    Вот по ссылке пример, что бы с ipykernel не запутался https://www.geeksforgeeks.org/using-jupyter-notebo... . Это на случай если проблема в том что ipykernel не установлен. А так не забудь активировать свое окружение а не просто его установить.
    Ответ написан
  • Как отсортировать значение по группам?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну смотри скажу прямо задачка для общего кейса безнадежная надо менять вводные, потому что с одной стороны мы можем создать категории например ОГСЭ но затем у них еще и индексы 01, 02 и т.д., для того куска что ты дал я сделал, ну как общее решение это надо на уровне дизайна проблемы решать.
    cat = pd.Categorical(df['Шифр дисциплины'].str.split('.').str[0], 
    categories=['ОГСЭ','ЕН','ОПЦ','МДК','УП','ПМ','ПП'])
    print(df
     .groupby(cat)
     .apply(lambda x: x.sort_values('Шифр дисциплины', key = lambda x: x.str.split('.').str[1]))
     .reset_index(drop=True)
    )

    По решению, трюк следующий, создаем категории, они имеют порядок индекс. Когда, мы группируем groupby он СОРТИРУЕТ по умолчанию, и затем мы сортируем снова. То есть хитрость в том что бы впихнуть двойную сортировку, сначала по категориям а потом по цифрам внутри каждой категории.

    Кстати имей ввиду во второй своей попытке ты был на правильном направлении и задачка вполне себе типичная, только вместо твоего кода надо писать вот так
    cat = pd.Categorical(df['Шифр дисциплины'].str.split('.').str[0], 
    categories=['ОГСЭ','ЕН','ОПЦ','МДК','УП','ПМ','ПП'])
    df.sort_values(by=['Шифр дисциплины'],key= lambda x: cat)
    Результат будет, как у тебя только кода меньше и без всяких созданий временных колонок.

    Но повторюсь, для общего кейса на уровне дизайна надо работать, такие сложные парсинги внутри колонок это плохо. Pandas он конечно может все (что помещается в память) но лучше для полезных задач его использовать.
    Ответ написан
    2 комментария