Ответы пользователя по тегу Машинное обучение
  • Какая есть литература полезная и понятная по Data Science на русском?

    Maksim_64
    @Maksim_64
    Data Analyst
    Data Science довольно широкий термин. Насчет Deep Learning посмотри недавно советовал хорошую книгу Ну а насчет Data Science слишком широко берешь, вышеупомянутый Deep Learning относится к DS, статистические тесты, вероятностное моделирование и т.д. также относится к DS, при этом они требуют углубления в совершенно разные разделы математики.
    Ответ написан
    1 комментарий
  • Как лучше построить архитектуру ML-сервиса?

    Maksim_64
    @Maksim_64
    Data Analyst
    Мало информации, конечно. Я обычно использую dash. Он позволяет создать полноценное веб приложение. Для взаимодействия с пользователем. Есть большое коммунити например я использую компоненты для создания красивого интерфейса и взаимодействия. Насчет одновременного доступа не проблема, каждая сессия пользователя изолирована. В доках есть раздел галерея там большие и крутые проекты выложены на github, то есть можно много чего подсмотреть. Есть и платные компоненты. Все что по ссылкам это бесплатно и для продакшен уровня достаточно.

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

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну у твоей модели есть метод predict. Что то вроде этого.
    df['predictions'] = (
        model
       .predict(X)
       .replace({0:'Метка ассоциируема с 0', 1:'Метка ассоциируемая с 1'})
    )

    Где, X это входные данные массив фич.

    Все самые лучшие примеры лежат в доках scikit-learn это вообще где брать примеры относительно ML, а это классический классификатор распознаватель цифр, твой пример куда проще так как у тебя бинарная классификация.
    Ответ написан
    Комментировать
  • Почему удаление отклоненных значений удаляет так много данных?

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

    Если тебе надо отфильтровать фрейм по возрасту (5 персентиль 95 персентиль). Используй что нибудь вроде такого.
    low = df['Age'].quantile(0.05)
    upper = df['Age'].quantile(0.95)
    
    df[df['Age'].between(low, upper)]


    Ну и не забудь про параметры метода quantile, например задать interpolation (интерполяцию). По у молчанию там линейная среднее между двумя значения, можешь например поставить 'nearest' и будет идентичное поведение np.percentile()
    Ответ написан
    Комментировать
  • Как youtube детектирует использование нейросети при создании видеоконтента?

    Maksim_64
    @Maksim_64
    Data Analyst
    Путем другой нейросети, которую обучали различать контент созданный нейросетью или человеком. Как создавали такую сеть? Да также как и другие, создали множество контента средствами AI и дали обычный контент созданный людьми и поставили метки AI not AI, бинарная классификация. И обучили, все.
    Ответ написан
    Комментировать
  • Обучение модели машинного обучения прерывается без ошибки. Что может быть причиной и как это решить?

    Maksim_64
    @Maksim_64
    Data Analyst
    Я тоже читал эту книгу, класс книга. В colab запускал? У тебя там не заглушены сообщения об ошибках или предупреждениях? Ну а так остается только экспериментировать попробуй learning rate ему поменять. Попробуй optimizer поменять. Например увеличил вдвое batch_size, увеличь вдвое и learning rate. Скорее всего схождения не происходит, точнее происходит но слишком медленно, ну и видимо, notebook подвисает или там какая нибудь остановка предусмотрена. Одназначно увеличивай learning rate (линейно с увеличением batch), после того как в colab попробуешь, конечно.
    Ответ написан
  • Можно ли обучить нейросеть на книгах?

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

    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
    Ну "формулировка" вашего вопроса, говорит о том, что надо начать с архитектуры нейронных сетей.

    Узел (Node) | Персептрон | Нейрон | Unit - все это одно и тоже, вычислительная единица которая имеет входные данные, функцию активации, выходные данные.

    функция активации - определяет каким образом взвешенная сумма (weighted sum) ввода трансформирована в вывод из нейрона.

    Слои Layers Input Layer, Hidden Layer, Output Layer.

    Нейронные сети используют одну и туже функцию активации внутри слоя. Часто внутри Hidden Layers используется одна функция активации, а в Output Layer другая в зависимости от типа задачи например мы хотим интерпретировать выходной слой как вероятности, что бы они были от 0 до 1 и суммировались в 1. И наша функция активации в Hidden будет RELU, а в Output Layer Sigmoid например. Потому что каким таким чудом RELU нам даст числа которые могут быть интерпретированы как вероятности? Нормализация не решит наших проблем RELU не может быть использована в задачах классификации в OUTPUT LAYER в HIDDEN на здоровье самая популярная.

    Я к чему это все, вы в своем вопросе упускаете этот момент, что это обычное дело иметь разные функции активации для Hidden и Output Layer's.

    Для Hidden Layer вот эти три функции самые популярные.

    1. Rectified Linear Activation (ReLU)
    2. Logistic (Sigmoid)
    3. Hyperbolic Tangent (Tanh)

    Для Output Layer вот эти функции самые популярные.
    1. Linear
    2. Logistic (Sigmoid)
    3. Softmax

    Подробнее про Output Layer линейная функция активации, она не для мебели в списке, а это как нейронные сети решают задачи регрессии, то есть например для регрессии например Hidden Layer - RELU + Output Layer - Линейная функция, это абсолютно нормальная конфигурация.

    Для классификации там или softmax или logistic в Output Layer. В зависимости от количества классов и т.д.

    Про количество нейронов да и количество слоев мы имеем.

    Size - количество нейронов в модели
    Width - количество нейронов внутри слоя
    Depth - Количество слоев в модели.

    Сколько нейронов использовать внутри слоя? Ответ мы не знаем, это дизайн ты экспериментируешь, нету на этот счет теории. Сколько слоев? больше одного не считая входного, если объекты нельзя разделить в пространстве прямой линией (Linearly separable). Дальше этого у нас нет теории сколько слоев иметь, эксперимент и еще раз эксперимент. Так обычно нейронные сети имеют 2+ hidden layers.

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Есть библиотека tensorflow. Она имеет api для разных языков, в том числе и для js. Ее вы и нашли tensorflow.js.

    Да это возможно. Построить классификатор (распознаватель) OCR (Optical character recognition) в данном случае, который будет распознавать данные из каждой ячейки. Построение таких распознователей, это задача для специалиста. Такого что засунул файл с изображением в нейронную сеть и готово нет. Это целый процесс.

    В первую очередь я бы попробовал готовый parser таблиц, для картинок и pdf файлов. На python. Библиотека img2table она базируется на OpenCV, но специализируется на табличных данных. Возможно она решит все ваши вопросы, это будет значительно проще и быстрее.
    Ответ написан
    Комментировать
  • Какой тип нейросетей или машинного обучения выбрать для обучения торгового робота?

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

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

    3. Отсюда вывод вы слабо себе представляете то о чем спрашиваете, так или иначе, то о чем вы спрашиваете это работа с временной последовательностью, вот прочтите https://qna.habr.com/q/1295634
    Ответ написан
    4 комментария
  • Какая разница между валидационным и тестовым наборами данных?

    Maksim_64
    @Maksim_64
    Data Analyst
    Смотри в теории машинного обучения есть такая важная тема как Resampling Methods. Это методы случайной выборки из данных которые у тебя есть. Есть два основных это Cross Validation и Bootstrap. Обычно во всяких обучающих материалах используется Cross Validation да и на практике он тоже очень популярен. Что он из себя представляет мы берем например делим случайным образом датасет на 5 частей. Сначала треним на 4 потом тестим на одном что остался, потом на других 4 и тестим на одном что остался и т.д. Так вот каждый такой набор (на котором мы тестим) называется валидационным набором. Например наша метрика MSE мы получим 5 MSE по каждому валидационному набору потом обычно берут среднее по ним.

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

    Используют и то и то. Это инженерное решение и ты будешь видеть оба подхода. Ну и на каких то обучающих историях, ты можешь увидеть отсутствие кросс-валидации и только разбиение train_test_split.

    В идеале все выглядит вот так. Единственное существует огромное количество разных кросс-валидаций.

    64bcbf8e217a9092904980.png

    Это пример где кросс-валидация используется для тюнинга гиперпараметров, но точно также она будет использоваться и для других целей, каждый синий Fold это и есть валидационный набор.
    Ответ написан
    4 комментария
  • Какие требование к данным для t теста?

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

    t-test сравнивает средние по группам. Так вот основные ДОПУЩЕНИЯ это.
    1. Независимость
    2. Отсутствие экстремальных величин.
    3. И НОРМАЛЬНОЕ распределение групп по которым считались средние для сравнения.
    Это основные подробнее гугли.
    Ответ написан
    3 комментария
  • Как исправить ошибку 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
    1. Метрики используй либо ROC, а лучше матрицу ошибок классификации (confusion matrix). Тебе здесь необходимо смотреть в сторону байесовых интерпретации теории вероятности.

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

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

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

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну смотри, vip - Variable Importance Plot. Это думаю ты и сама знаешь.

    1. Как измеряются - здесь все зависит от моделей и от задач которые они выполняют (задача регрессии или классификации). Много различных способов измерения важности предикторов (признаков) . По этому поговорим интуитивно, а не о деталях. Зачем это нужно в рамках анализа? В рамках нашей модели, какие предикторы (признаки) наиболее важные, на этот вопрос мы хотим ответить, например, мы можем выкинуть предикторы (признаки) со слабым влияниям (это может серьезно улучшить стабильность нашей модели, то как модель будет работать в продакшене потому что чем больше предикторов (признаков) тем больше ИСТОЧНИКОВ потенциальной ошибки, и если предиктор (признак не имеет практически никакого влияния для нас) то лучше от него избавится).

    2. В чем измеряется - и тут все зависит от модели и от метрики (на которой точность этой модели измерялась). Тут единица измерения ВАЖНОСТЬ. Для множественной линейной регрессии это это одна единица для деревьев другая. По этому у тебя на оси x VIP scores (Просто оценка важности). Что бы иметь более детальную интерпретацию, это надо брать модель, брать метод оценки MSE, RMSE, r_squared и т.д. и отдельно работать, в рамках данной функции это просто оценка важности.
    Ответ написан
    Комментировать
  • Как увеличить точность предсказаний?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну информации вы даете мало, а сделать для увеличения точности можно много всего.
    1. Трансформации, кейс ваш простой, все входные данные числовые. (Нормализация, Стандартизация), как делать смотрите https://scikit-learn.org/stable/modules/preprocess... там хорошие примеры как правильно применять StandardScaller min_max_scalar в общем приведение ваших входных данных к единой шкале.

    2. Увеличение сложности модели здесь мы говорим о bias vs variance компромисс Мы имеем простую модель или сложную модель. Например поведение простой модели слабая точность на тренировочном сете и еще более слабая точность на тестовом сете, такое поведение называется underfitting или говорят еще high bias. В свою очередь high variance или overfitting это высокие показатели на тренировочном сете и значительно более низкие на тестовом сете. Что делать читаем и изучаем https://scikit-learn.org/stable/modules/generated/... это трансформатор и затем https://scikit-learn.org/stable/auto_examples/mode... это кривая валидации в интернете полно примеров как применять. Через них находится оптимальная сложность модели.

    3. Тюнинг гиперпарматров https://scikit-learn.org/stable/modules/grid_searc... это как осуществить правильный подбор параметров эстиматора (когда уже сделаны нужные трансформации и выбрана модель).

    Перед этим сделайте ну хоть какое то подобие EDA используйте seaborn и функцию pairplot хоть глянуть может какие то корреляции есть. По гуглите другие методы EDA для задач регрессии это задаст направление для лучшего понимания датасета что у вас есть.

    Начните делать появятся более конкретные вопросы и будут более конкретные ответы.
    Ответ написан
    2 комментария
  • Как реализовать классификатор на датасете рукописных цифр?

    Maksim_64
    @Maksim_64
    Data Analyst
    По этой ссылке репозитарий с реализацией вашей задачи на чистом numpy (python библиотека), которая предоставляет векторизованный массив. (все функции написаны вручную) не каких ML алгоритмов из коробки не используется.

    Реализуйте на том языке на котором вам необходимо. Я думаю иметь готовый код без ML библиотек это хорошее начало для решения вашей проблемы.

    Так же автор репозитария написал статью на https://towardsdatascience.com/ вы можете зарегистрироваться там они дают по моему три бесплатные статьи в месяц и изучить его статью, как весь процесс организовать и т.д. Название статьи "MNIST Handwritten digits classification from scratch using Python Numpy".
    Ответ написан
    Комментировать
  • Как повысить точность модели машинного обучения?

    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.

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

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

    Если у вас есть алгоритм который например в течении следующих торговых 252 дней, покажет точность 0.7 то вы богаты. 0.7 вероятность успеха при экспонентом росте хватит с головой. (Помните что речь о последовательности) а не а классической классификации или регрессии. Возможно вы учите модель на данных которых у вас не будет в момент прогноза, (классическая ошибка). То есть все ваши данные должны быть: это различные индикаторы (оконные функции, которые с агрегировали статистику за определенное время), например какой нибудь скользящее среднее с окном 10, скользящее среднее с окном 21 и.т.д. Ваши вход X это набор индикаторов, статистик которые будут вам доступны в момент предсказания.

    Там временная последовательность, кросс-валидация делается специальным классом для этого в документации sklearn есть про это в разделе кросс-валидации.

    Ну и наконец про алгоритм лучший алгоритм не существует. Даже если вам удастся создать модель которая зацепит текущее положение дел, и будет КАКОЕ ТО время хорошо работать потом она перестанет никакого универсального хорошего алгоритма не существует. Потому что на ценообразование в разное время в мире влияют разные факторы. В одно время это факторы настроения а все фундаментальные работают слабо, в другое в точности наоборот и т.д. Не ищете лучший алгоритм.
    Ответ написан