Как подготовить данные для нейросети

Подготовка данных для настройки и обучения нейросети по детекции объектов

Подготовка данных для настройки и обучения нейросети по детекции объектов.

Продолжаем тему детекции объектов. Для того, чтобы алгоритм различал объекты или был способен выявлять отклонения в процессе, его необходимо обучить на наборе данных, который соответствует общей картине анализируемых видеоматериалов. Подготовка обучающего набора является очень трудоемким процессом, от которого зависит как скорость обучения, так и качество работы алгоритма. Рассмотрим применение нескольких инструментов, которые помогут правильно подготовить данные.

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

Если составление набора данных осуществлялось при помощи фотоаппарата или телефона, вероятнее всего изображения будут иметь высокое разрешение, что негативно влияет на процесс обучения. Основной проблемой при высоком разрешении изображений будет ошибка «Out of memory», даже при малом значении параметра batch_size. Чтобы уменьшить вероятность возникновения данной ошибки необходимо уменьшить размер изображений. В этом нам поможет программа IrfanView. Данная программа позволяет пакетно обрабатывать изображения, т.е. нужно лишь указать путь к исходными изображениям, задать параметры преобразования и запустить процесс преобразования. В результате получим «облегченные» изображения в указанной папке. Для этого в стартовом окне программы нажмите клавишу B (русская раскладка «И») или во вкладке File выберите пункт «Batch Conversion/Rename», появится окно следующего вида:

Как подготовить данные для нейросети

Далее нам необходимо:

Как подготовить данные для нейросети

Таким образом, если исходное изображение было 4160 х 3120, то результирующее изображение станет 416 х 312 пикселей.

Формирование обучающей выборки достаточно утомительный процесс, будь то формирование скрин-снимков из видеоматериалов или съемка на фотоаппарат и телефон. Чтобы в разы увеличить объем набора данных применяют различные методы аугментации. Разберем несколько таких методов, реализованных в языке программирования Python с помощью библиотеки Pillow. Одним из самых популярных методов аугментации является «зеркальное отражение».

Для начала импортируем необходимые библиотеки:

Укажем путь расположения директории с исходными изображениями и путь для результата преобразования:

Напишем функцию для преобразования изображения в «зеркальное отражение»:

Еще одним популярным методом аугментации является поворот изображения. Стоит учитывать при полноразмерных объектах, что при данном методе аугментации теряется часть изображения. Напишем функцию для поворота изображения:

Значение (-30) – это угол поворота изображения, который подбирается исходя из типа объекта. Например, поворот на 180 градусов, если на изображении телефон, то это неплохой вариант аугментации, но если на изображении человек, то 180 градусов для данного изображения плохой пример, т.к. навряд ли вы встретите видео, на котором люди ходят вверх ногами.

И, наконец, проведем 2 типа аугментации для каждого изображения:

Пример аугментации «зеркальное отражение»:

Как подготовить данные для нейросети

Пример аугментации «поворот изображения»:

Как подготовить данные для нейросети

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

Для разметки будем использовать программу LabelImage, так как на мой взгляд она достаточно проста в использовании и многофункциональна. Данная программа способна возвращать результат разметки в двух форматах (PascalVOC и YOLO). Первый формат представлен в виде XML – файла, в котором обозначены параметры изображения, а также координаты прямоугольников, которые описывают местоположение объектов на изображении:

Как подготовить данные для нейросети

Такой XML – файл формируется для каждого изображения, в котором описаны все размеченные объекты. Имя файла разметки совпадает с именем изображения. Формат YOLO представлен в виде текстового файла, в котором обозначен класс объекта и координаты прямоугольников, описанные значениями x,y,w,h в нормализованном виде:

Как подготовить данные для нейросети

Помимо текстового файла с разметкой для формата YOLO, также формируется файл classes.txt, в котором указаны имена объектов. Порядковые номера имен объектов зависят от порядка появления при разметке изображений. Стоит отметить, что файл classes.txt может быть перезаписан при повторном открытии приложения, поэтому необходимо следить за последовательностью внесения имен в программе, в противном случае произойдет несогласованность координат. Разметка объектов происходит в следующей последовательности:

Как подготовить данные для нейросети

Источник

Глубокие нейросети (Часть I). Подготовка данных

Как подготовить данные для нейросети

Как подготовить данные для нейросети

Эта статья продолжает и развивает тему «Глубокие нейросети» (DNN), начатую мною в предыдущих статьях (1, 2, 3).

DNN получили широкое применение и интенсивное развитие в различных практических областях. Самые яркие примеры их повседневного использования — распознавание образов и речи, автоматический перевод с одного языка на другой. Применяются они и в трейдинге, поэтому их углубленное изучение на фоне очень быстрого развития алготрейдинга видится мне полезным и перспективным.

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

Четыре основных вопроса, на которых будет сфокусирована серия статей:

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

Содержание

Введение

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

Первый этап занимает большую часть времени реализации проекта: около 70%. При этом от его результатов на 80% зависит результат работы модели. Как известно, «мусор на входе — мусор на выходе». Поэтому состав работ на этом этапе мы рассмотрим очень подробно.

Для повторения экспериментов вам необходимо будет установить MRO 3.4.0 и Rstudio. О том, как установить этот софт, есть достаточно информации и в Сети, и в приложенных к статье файлах, не будем на этом подробно останавливаться.

Вспомним немного важной информации о языке R. Это язык программирования, а также среда для статистических вычислений и построения графиков, разработанная в 1996 году новозеландскими учеными Россом Ихака и Робертом Джентельменом при университете Окленда. R — это GNU-проект, то есть свободное программное обеспечение. Его философия использования которого к следующим принципам (свободам):

Преимущества языка R:

1. Создание начального (сырого) набора данных

«Всё предыдущее, текущее и будущее движение цены заключено в самой цене»

Существует множество методов (пакетов), предназначенных для предподготовки, оценки и выбора предикторов. Обзор этих методов приведен в [1]. Их разнообразие объясняется не меньшим разнообразием данных реального мира. От понимания того, какой тип данных мы используем, и будет зависеть, какие методы исследования и обработки мы выберем.

Финансовые данные, исследованием которых мы занимаемся — это иерархические, регулярные таймсерии, которые «бесконечны» и легко извлекаемы. Базовый ряд — это котировки OHLCV по инструменту на конкретном таймфрейме.

Из этого базового ряда происходят все остальные таймсерии:

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

Котировки OHLC, Volume и time мы получаем из терминала в виде векторов (o, h, l, cl, v, d). Напишем функцию, которая объединит векторы, полученные из терминала в dataFrame. При этом переведем время начала бара в формат POSIXct.

Поскольку мы загрузили векторы котировок в окружение env, вычислим dataFrame pr и подчистим окружение env от ненужных переменных:

Посмотрим, как выглядит этот dataFrame в начале:

В отличие от предыдущих наших экспериментов, мы упростили набор предикторов. В их роли будут выступать цифровые фильтры FATL, SATL, RFTL, RSTL. Они подробно описаны в статье В. Кравчука «Новый адаптивный метод следования за тенденциями и рыночными циклами», которую вы можете найти в приложенных к данной статье файлах (см. главу «Новые инструменты технического анализа и их интерпретация). Здесь лишь кратко перечислим их.

Темп изменения FATL и SATL отслеживаются по индикаторам FTLM (Fast Trend Line Momentum) и STLM (Slow Trend Line Momentum).

Среди технических инструментов, которые нам понадобятся, есть еще два осциллятора — индексы RBCI и PCCI. Индекс RBCI (Range Bound Channel Index) — ограниченный по полосе индекс канала, который вычисляется с помощью полосового фильтра (фильтр удаляет низкочастотный тренд и высокочастотный шум). Индекс PCCI (Perfect Commodity Channel Index) — совершенный индекс товарного канала.

Функция, вычисляющая цифровые фильтры FATL, SATL, RFTL, RSTL, выглядит так:

Вычислим и добавим их в датафрейм pr

Добавим осцилляторы FTLM, STLM, RBCI, PCCI, их первые разности и первые разности цифровых фильтров в датафрейм pr:

В качестве индикатора, генерирующего целевую переменную, будем использовать ZigZag().

Функция для его вычисления получает на вход таймсерию и два параметра: это минимальная длина колена (int либо double) и тип цены для вычисления (Close, Med, Typ, Wd, c (High, Low) ).

Вычислим ZigZag, первую разность, знак первой разности и добавим их вдатафрейм pr:

1.4.Начальный набор данных

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

Мы получили из терминала векторы OHLCV и временную метку начала бара таймфрейма М15 по EURJPY. Из этих данных был сформирован датафрейм pr, в который добавлены переменные FATL, SATL, RFTL, RSTL, FTLM, STLM, RBCI, PCCI и первые разности от них. Также в датафрейм добавлен ZigZag с минимальным плечом в 25 п (4 знака), его первая разность и знак первой разности (-1,1), который будет использоваться как сигнал.

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

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

Выберем в датафрейм dataSet все ранее расcчитанные предикторы. Целевую переменную sig преобразуем в фактор и сдвинем на один бар в «будущее».

Визуальный анализ данных

Построим график OHLC c использованием пакета ggplot2. Возьмем данные за последние 2 дня и отрисуем график котировок в барах.

Как подготовить данные для нейросети

рис.1. График котировок

Построим график FATL, SATL, RFTL, RSTL и ZZ:

Как подготовить данные для нейросети

Рис.2. FATL, SATL, RFTL, RSTL и ZZ

Осцилляторы разобьем на 3 группы для более удобного отображения.

Как подготовить данные для нейросети

Рис.3. Осцилляторы базовые

Как подготовить данные для нейросети

Рис.4. Осцилляторы 2 группы

Осцилляторы третьей группы будут отрисованы на последних 100 барах:

Как подготовить данные для нейросети

Рис.5. Осцилляторы 3 группы

2.Разведочный анализ данных (Exploratory data analysis, EDA)

“Не бывает обычных статистических вопросов — только сомнительные статистические процедуры.” — Сэр Дэвид Кокс

“Гораздо лучше приблизительный ответ на правильный вопрос, который часто расплывчат, чем точный ответ на неправильный вопрос, который всегда может быть точным.” — Джон Тьюки

Наша цель в EDA — развить понимание наших данных. Самый простой способ сделать это — использовать вопросы в качестве инструмента исследования. Когда мы задаем вопрос, то фокусируемся на определенной части данных. Это помогает нам решить, какие графы, модели или преобразования лучше всего применить.

EDA — это принципиально творческий процесс. И, как в большинстве творческих процессов, ключ к постановке качественных вопросов — это создание еще большего количества вопросов. Трудно задать раскрывающие вопросы в начале анализа, потому что мы не знаем, какие выводы содержатся в наборе данных. С другой стороны, каждый новый вопрос, который мы задаем, открывает новый аспект данных и увеличивает шанс сделать открытие. Мы можем быстро перейти в наиболее интересную часть выборки и путем последовательных вопросов все глубже прояснять ситуацию.

Нет правил о том, какие вопросы мы должны задать, чтобы выполнить исследования. Однако два типа вопросов всегда будут нам полезны:

Определимся с основным понятием.

Вариации — это тенденции изменения значений переменной от одного измерения к другому. Вы можете легко увидеть изменения в реальной жизни: если семь раз измерить любую непрерывную переменную, то вы получите семь разных результатов. Это верно, даже если вы измеряете постоянные величины (например, скорость света). Каждое из измерений будет содержать небольшие доли ошибок, которые постоянно меняются. Переменные из одной категории тоже могут меняться, если измерять разные конкретные предметы (например, цвет глаз у разных людей), или в разное время (например, уровни энергии электрона в разные моменты). У каждой переменной свой собственный характер вариаций, которые могут выявить интересную информацию. Лучший способ к пониманию картины — визуализировать распределение значений переменной. Это как раз тот случай, когда один рисунок лучше тысячи слов.

Общую статистику нашей таймсерии удобно отслеживать с помощью функции table.Stats()::PerformenceAnalitics.

Что мы видим из этой таблицы:

2.2.Визуализация суммарной статистики

“Самая большая ценность картины в том, что она заставляет нас заметить то, что мы никогда не ожидали увидеть”. — Джон Тьюки

Посмотрим вариацию и ковариацию наших переменных в наборе dataSet. Поскольку количество переменных (14) не позволяет разместить их на одном графике, разобьем их на три группы.

Как подготовить данные для нейросети

Рис. 6. Первая группа предикторов

Как подготовить данные для нейросети

Рис. 7. Вторая группа предикторов

Как подготовить данные для нейросети

Рис. 8. Третья группа предикторов

Что мы видим на графиках:

3.Подготовка данных

Стандартно в этап подготовки данных включают семь этапов:

Первый этап подготовки сырых данных — удаление или импутация неопределенных значений и пропусков в данных. Несмотря на то, что многие модели допускают использование неопределенных данных (NA) и пропусков в наборах, лучше удалить их до выполнения основных манипуляций. Эта операция проводится на полном наборе данных и независимо от используемой модели.

Выше мы смотрели суммарную статистику наших сырых данных, из которой видно, что NA присутствуют в наборе. Это искусственные A, которые образовались при вычислении цифровых фильтров. Их относительно немного, поэтому их можно удалить. Ранее мы получили набор данных dataSet, готовый для дальнейшей обработки. Очистим его.

В общем случае под очисткой понимают следующие операции:

Все эти операции реализованы в функции preProcess()::caret методами, указанными выше, и выполняются на полном наборе данных до разделения на обучающий и тестовый наборы.

Посмотрим, есть ли удаленные предикторы, и что осталось после очистки:

3.2. Выявление и обработка выбросов (outliers)

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

Дадим рабочее определение: под выбросом мы будем понимать наблюдение, которое слишком велико или слишком мало по сравнению с большинством других имеющихся наблюдений. Глубокая классификация выбросов, методов их определения и обработки приведена в [2].

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

Чем вызваны выбросы?

Выбросы можно разделить по происхождению:

Естественные — выбросы, обусловленные природой переменной.

Каково влияние выбросов?

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

Как определить локальные «выбросы»?

Чаще всего выбросы выявляются с помощью визуализации. Простой и широко используемый способ — boxplot. Например, посмотрим предиктор ftlm:

Как подготовить данные для нейросети

Рис.9. Боксплот ftlm

Некоторые пояснения к рисунку:

IQR — внутриквартильный диапазон, или расстояние между первым и третьим квартилем.

Существует несколько определений выбросов в этом свете:

В дальнейшем будем использовать первое определение выбросов (через IQR).

Как обработать выбросы?

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

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

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

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

Извлечь данные одной переменной (ftlm, например) без выбросов можно так:

Сколько данных попало в выбросы?

Посмотрим, как выглядит ftlm без выбросов:

Как подготовить данные для нейросети

Рис. 10. ftlm без выбросов

Вышеописанный способ неприменим для матриц и датафреймов, поскольку каждая переменная в датафрейме может иметь различное количество выбросов. Для таких выборок данных приемлем метод замены локальных выбросов на NA с последующим применением стандартных методов обработки NA. Напишем функцию, заменяющую локальные выбросы на NA:

Заменим в нашем наборе данных dataSetClean во всех переменных, кроме c(Data, Class), выбросы на NA и посмотрим, как изменится распределение полученного набора x.out:

Как подготовить данные для нейросети

Рис. 11. Данные с выбросами

Как подготовить данные для нейросети

Рис.12. Данные без выбросов

Импутация NA, появившихся вместо выбросов

Под импутацией понимается процесс замены пропущенных, некорректных или несостоятельных значений другими значениями. При подаче данных для обучения модели мы должны заменить NA действительными значениями. Варианты:

Напишем функцию, выполняющую последний вариант действия, выполним преобразование и посмотрим на распределение после преобразования:

Как подготовить данные для нейросети

Рис.13. Набор данных с импутированными выбросами

Посмотрим вариацию и ковариацию наших переменных в наборе dataSetCap (это тот же набор dataSet, но очищенный и с импутированными локальными выбросами). Поскольку количество переменных (13) не позволяет разместить их на одном графике, разобьем их на две группы.

Как подготовить данные для нейросети

Рис.14. Вариация и ковариация первой части набора данных с импутированными выбросами.

И вторая часть набора:

Как подготовить данные для нейросети

Рис.15. Вариация и ковариация второй части набора данных с импутированными выбросами

Как определить глобальные выбросы?

Двумерные и многомерные выбросы обычно измеряются с помощью индекса влияния или дистанции. Для обнаружения глобальных выбросов используют различные дистанции. Можем использовать несколько пакетов (DMwR, mvoutliers,Rlof), которые содержат функции для определения глобальных выбросов, оцениваемые с помощью LOF (local outlier factor) — фактора локальных выбросов. Вычислим и сравним LOF для набора с выбросами x и для набора с импутированными выбросами x.cap.

Как подготовить данные для нейросети

Рис.16. Глобальный фактор выбросов для набора данных с выбросами и набора с импутированными выбросами

В пакете Rlof реализована функция lof(). Она находит локальный фактор outlier [3] матричных данных с использованием k соседей. Локальный коэффициент выброса (LOF) — мера вероятности принадлежности к выбросам, которая рассчитывается для каждого наблюдения. На основе этой меры пользователь решает, будет ли наблюдение рассматриваться как выброс или нет.

LOF учитывает плотность окрестности вокруг наблюдения, чтобы определить ее внешность. Это более быстрая реализация LOF с использованием другой структуры данных и функции вычисления расстояния по сравнению с функцией lofactor(), доступной в пакете “dprep”. Он также поддерживает несколько значений k, которые будут вычисляться параллельно, а также различные меры расстояния, кроме стандартного евклидова расстояния. Вычисления выполняются параллельно на нескольких ядрах процессора. Вычислим lofactor для тех же двух наборов (x и x.cap) для 5, 6, 7, 8, 9 и 10 соседей с использованием метода вычисления расстояния “minkowski”. Построим гистограммы этих lofactor.

Как подготовить данные для нейросети

Рис.17. Глобальный фактор выбросов для различных значений к-соседей

Практически все наблюдения находятся в пределах lofactor = 1.6. Вне этого предела:

Это незначительное количество умеренных выбросов приемлемо для такого размера набора.

Напишем функцию, которая будет проводить предварительные вычисления:

Вычислим параметры, необходимые для определения и импутации выбросов. Примем предварительно длину train набора в 4000 баров в начале, и следующие 2000 баров использовать как test.

Посмотрим на результат:

Как видим, для каждой переменной в наборе определены первый, третий квартиль и медиана, а также 5 и 95 персентиль — это все, что необходимо для определения и обработки выбросов.

Нам нужна функция, которая будет обрабатывать выбросы любого набора данных по предварительно определенным параметрам. Возможные варианты обработки: замещение выброса на NA, замещение выброса на медиану, замещение выбросов на 5/95 персентиль.

Поскольку мы уже определили необходимые параметры на тренировочном наборе, обработаем выбросы на тренировочном наборе, заменив их на 5/95 персентиля, затем так же обработаем выбросы на тестовом наборе данных, после чего сравним распределения в полученных наборах, построив три графика.

Как подготовить данные для нейросети

Рис.18. Тренировочный набор данных с выбросами

Как подготовить данные для нейросети

Рис.19. Тренировочный набор данных с импутированными выбросами

Как подготовить данные для нейросети

Рис.20. Тестовый набор данных с импутированными выбросами

Не все модели чувствительны к выбросам. Например, модели решающих деревьев ( DT) и случайных лесов (RF) нечувствительны к ним.

При определении и обработке выбросов могут быть полезны и несколько других пакетов: “univOutl”, “mvoutlier”, “outlier”, funModeling::prep.outlier().

3.3. Устранение асимметрии (skewness)

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

Правая асимметрия исправляется логарифмированием, а левая — экспонированием.

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

Как видим, и набор с удаленными выбросами x.out, и с импутированными выбросами x.cap идеально симметричны и не требуют никакого исправления.

Давайте посмотрим и на коэффициент эксцесса (kurtosis). Коэффицие́нт эксце́сса (коэффициент островершинности) — мера остроты пика распределения случайной величины. У нормального распределения равен 0. Он положителен, если пик распределения около математического ожидания острый, и отрицателен, если пик очень гладкий.

В исходном наборе данных x пики распределения переменных чрезвычайно остры (эксцесс намного больше 0). В наборе x.out с удаленными выбросами пики близки к нормальной островерхости, в наборе с импутированными выбросами вершины более гладкие, и оба набора не требуют никаких корректировок.

Приложение

1. В архиве DARCH12_1.zip находятся скрипты к первой части статьи (dataRaw.R, PrepareData.R, FUNCTION.R), а также картинка сессии Rstudio с исходными данными Cotir.RData. Загрузив их в Rstudio, вы сможете воспроизвести все скрипты, а также экспериментировать с ними. Вы можете также скачать все это c Git /Part_I.

2. В архиве ACTF.zip статья В. Кравчука «Новый адаптивный метод следования за тенденциями и рыночными циклами»

3. В архиве R_intro.zip собрана литература по языку R.

Ссылки

[1] A Systematic Approach on Data Pre-processing In Data Mining. COMPUSOFT, An international journal of advanced computer technology, 2 (11), November-2013 (Volume-II, Issue-XI)

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *