Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 14.11.2013
Сообщений: 68

Обучение в sklearn

10.08.2020, 16:09. Показов 1031. Ответов 5

Студворк — интернет-сервис помощи студентам
Всем доброго дня!
Прошу знающих, ну или не очень знающих помочь)
Задача спрогнозировать событие и время когда это событие произойдёт.
Для этого я использовал библиотеку sklearn.
Данные привёт в такой формат:
Python
1
2
3
4
5
6
7
8
9
                  дата1    дата1+1 день   дата1 +n дней
 
событие2     кол-во        кол-во              кол-во
   
событие3     кол-во        кол-во              кол-во
 
событие4     кол-во         кол-во             кол-во
 
событие5     кол-во         кол-во             кол-во
Для обучения использую весь датафрейм, в качестве учителя выступает последний день.
В качестве ответа хочу получить сколько и каких событий будет в дата1+ n+1 дней.
Хотел бы уточнить в каком виде лучше представлять датафрейм и как обучать, может кто-то сталкивался уже с этой проблемой.

(Так же была мысля разбить каждое событие на отдельный датафрейм, состоящий из одной строчки:
Python
1
2
                  столбец1        столбец2     столбецn
событие1                даты события в unix
И для каждого события отдельно предсказывать дату следующего, но хотелось бы как-то более комплексно поступить что ли)

Так же, буду признателен за ссылки на какие-нибудь курсы или литературу по этой теме)
Заране спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.08.2020, 16:09
Ответы с готовыми решениями:

sklearn
Здравствуйте, только недавно начал изучать ML , пытаюсь написать простейшую линейную регрессию используя Ridge() , пытаюсь выполнить 2...

Дедуктивное обучение или Обучение по прецедентам (плюсы и минусы)
Привет, друзья! Как вы смотрите на то, чтобы обсудить вопрос о преимуществах и недостатках 2 типов обучения? Развернутой статьи не...

Sklearn регрессия
Считал данные из .csv файла, затем каждый столбец поместил в переменную, хочет обучить методом .fit, но DeprecationWarning: Passing 1d...

5
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
10.08.2020, 16:28
А можно задать вопрос незнающему, или вернее - не понимающему то, что вы написали?
1. У вас события независимы? Т.е. вы можете предсказывать одно событие без оглядки на другие?
2. Если у вас события происходят каждый день, что что значит "спрогнозировать время когда это событие произойдёт"? Если же у вас события происходят не каждый день, то почему про это ни слова?
3. Что значит - "спрогнозировать событие и время"? Союз "и" в русском языке предполагает, что вы прогнозируете эти сущности отдельно друг от друга. Это соответствует действительности?
4. "Для обучения использую весь датафрейм, в качестве учителя выступает последний день" - а это что за загадка? Если у вас события независимы и заданы (количеством??) по дням, то это у вас т.н. "ряд событий". Анализируется соответствующими методами, рассматриваемыми в курсе "Анализ потоков событий". Если же у вас события зависимы или вообще это разные реализации одного и того-же события, то у вас задача предсказания значений классического временного ряда, рассмотриваемые в курсе "Анализ временных рядов". Правда, что такое "учитель" в таком случае - непонятно.
5. "В каком виде лучше представлять датафрейм" - датафрейм он и есть датафрейм. Что значит в каком виде, да еще и "лучше"? Другое дело, что если у вас первый из упомянутых случаев, то вам можно и Серией ограничиваться.
6. Вот после ответа на вопросы, возможно удастся понять, чему именно вы собрались обучать и что-то подсказать.
0
0 / 0 / 0
Регистрация: 14.11.2013
Сообщений: 68
10.08.2020, 17:25  [ТС]
Цитата Сообщение от passant Посмотреть сообщение
А можно задать вопрос незнающему, или вернее - не понимающему то, что вы написали?
1. У вас события независимы? Т.е. вы можете предсказывать одно событие без оглядки на другие?
2. Если у вас события происходят каждый день, что что значит "спрогнозировать время когда это событие произойдёт"? Если же у вас события происходят не каждый день, то почему про это ни слова?
3. Что значит - "спрогнозировать событие и время"? Союз "и" в русском языке предполагает, что вы прогнозируете эти сущности отдельно друг от друга. Это соответствует действительности?
4. "Для обучения использую весь датафрейм, в качестве учителя выступает последний день" - а это что за загадка? Если у вас события независимы и заданы (количеством??) по дням, то это у вас т.н. "ряд событий". Анализируется соответствующими методами, рассматриваемыми в курсе "Анализ потоков событий". Если же у вас события зависимы или вообще это разные реализации одного и того-же события, то у вас задача предсказания значений классического временного ряда, рассмотриваемые в курсе "Анализ временных рядов". Правда, что такое "учитель" в таком случае - непонятно.
5. "В каком виде лучше представлять датафрейм" - датафрейм он и есть датафрейм. Что значит в каком виде, да еще и "лучше"? Другое дело, что если у вас первый из упомянутых случаев, то вам можно и Серией ограничиваться.
6. Вот после ответа на вопросы, возможно удастся понять, чему именно вы собрались обучать и что-то подсказать.
Действительно, не совсем понятно о чём идёт речь) За время "самоизоляции" забыл как с людьми надо общаться, извините)

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

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

3. Это значит, что по итогу мне нужно получить произойдёт событие1 в день n или нет.
Ну в данной ситуации у меня была такая логика:
обучается модель на последнем дне (т.е. на списке, где указано количество событий за последний день), и пытается предсказать следующий. Но до меня только после формирования модели и датафреймов дошло, что если в последний день ничего происходить не будет (кол-во будет везде проставлено как 0), то она даст предсказание со всеми нулями.
Ну а так, да, отдельно друг от друга. Получается что я делаю прогноз на основе данных по количеству событий в день.
Вот так выглядит датафрейм (значения от 0 до 208 и есть события):
Python
1
2
3
4
5
6
7
8
9
10
11
12
date  2019-06-04  2019-06-05  2019-06-06  ...  2020-08-06  2020-08-07  2020-08-08
0            0.0         0.0         0.0  ...         0.0         0.0         0.0
1            0.0         0.0         0.0  ...         0.0         0.0         0.0
2            0.0         0.0         0.0  ...         0.0         1.0         0.0
3            0.0         0.0         0.0  ...         0.0         0.0         0.0
4            0.0         0.0         0.0  ...         0.0         0.0         0.0
..           ...         ...         ...  ...         ...         ...         ...
204          0.0         0.0         0.0  ...         0.0         0.0         0.0
205          0.0         0.0         0.0  ...         0.0         0.0         0.0
206          0.0         0.0         0.0  ...         0.0         0.0         0.0
207          0.0         0.0         1.0  ...         0.0         0.0         0.0
208          0.0         0.0         0.0  ...         0.0         0.0         0.0
4 и 5. Сели я вас правильно понял, то я и хотел уточнить как это лучше рассматривать, как ряд событий или как временной ряд)

Т.е. в случае если я рассматриваю это как временной ряд, получается такой датафрейм:

Python
1
2
3
4
5
6
7
8
9
10
11
12
Событие1    [2019-11-07 00:00:00, 2019-11-15 00:00:00, 202...
Событие2                   [2019-09-10 00:00:00, 2019-10-23 00:00:00, 201...
Событие3                                                                 [2019-07-04 00:00:00, 2019-07-10 00:00:00, 201...
Событие4                                                                   [2019-08-12 00:00:00, 2019-11-15 00:00:00]
Событие5                                                                                            [2019-11-15 00:00:00]
                                                                                               ...                        
Событие205                                          [2020-02-10 00:00:00, 2020-06-23 00:00:00]
Событие206                             [2019-07-05 00:00:00, 2020-02-01 00:00:00]
Событие207                                                                           [2019-12-09 00:00:00]
Событие208                                                    [2019-06-06 00:00:00, 2019-06-10 00:00:00, 201...
Событие209                                                              [2019-11-06 00:00:00, 2019-11-15 00:00:00]
Name: date, Length: 209, dtype: object
И для прогноза следующей даты, не нужно отдельно рассматривать каждое событие. Т.к. если я вгоню всё в один датафрейм, у многих событий данные будут не определены (т.к. события происходят не каждый день, и если в этот день есть событие1, не факт что в этот же день будет событие2). А их заполнение может повлиять на конечный прогноз.

Надеюсь, в этот раз я немного понятнее обрисовал ситуацию)
0
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
10.08.2020, 18:31
Да, стало немного :-) понятнее.
Смотрите.
Исходим из ситуации, что серии событий независимы.
Если у вас действительно количество событий 0 (в основном),1 (иногда), 2 ( редко) в день, то я бы рассматривал вашу задачу как ряд событий. Для таких рядов оперируют такими статистиками, как распределение вероятностей между появлениями событий и производными от нее- интенсивность события за период. Там работает не нормальное распределение, а распределение Пуассона, ну и всякие его "усложнения" (Иногда довольно сложные - но до них доберетесь потом). Т.о. получив это распределение по предыдущим значением вы можете предсказать вероятность события в следующий (некоторые после него) периоды - хоть час, хоть день, хоть неделю - как модель построите.
Ваш Датафрейм (для КАЖДОГО события отдельный!!!) - это по сути единственный столбец Столбец -"ВременнАя метка" наступления события. Ну если очень хочется (или заготовка - "на потом"), можно свести все такие столбцы в единый датафрейм, где первый столбце "Временная метка" всех(!!!) событий (по сути объединение временных меток всех отдельных событий), а дальше - каждый столбец - содержит 1 в том рядке, которые соответствует моменту его наступления. Понятно, что так работать будет сложнее для каждого события в отдельности, зато вы потом сможете искать корреляции событий, что может оказать очень полезным (например, при анализе того-же интернет-трафика).

Если же у вас события более часты, и вас не интересует момент события, а достаточно просто определить - по сути - сколько событий в день произойдет, то как я уже писал - это типичный временной ряд, и его можно "предсказывать" любым методом, который окажется подходящим и адекватным по сложности - от элементарного усреднения или методов Брауна-Хольта-Винтерса, до АRIMA или LSTM-нейросетей. Тут вы тоже по сути предсказываете вероятность того или иного значения количества событий на период прогнозирования.
Надо сказать, что для временных рядов разработана и теория "панельных данных", и теория "многомерных рядов" и задача анализа контегральных рядов - когда значения одного ряда в разных сочетаниях могут оказывать влияние на значения другого. Но тут уже все намного сложнее.

Так что выбирайте :-)
1
0 / 0 / 0
Регистрация: 14.11.2013
Сообщений: 68
11.08.2020, 12:12  [ТС]
Цитата Сообщение от passant Посмотреть сообщение
Да, стало немного :-) понятнее.
Смотрите.
Исходим из ситуации, что серии событий независимы.
Если у вас действительно количество событий 0 (в основном),1 (иногда), 2 ( редко) в день, то я бы рассматривал вашу задачу как ряд событий. Для таких рядов оперируют такими статистиками, как распределение вероятностей между появлениями событий и производными от нее- интенсивность события за период. Там работает не нормальное распределение, а распределение Пуассона, ну и всякие его "усложнения" (Иногда довольно сложные - но до них доберетесь потом). Т.о. получив это распределение по предыдущим значением вы можете предсказать вероятность события в следующий (некоторые после него) периоды - хоть час, хоть день, хоть неделю - как модель построите.
Ваш Датафрейм (для КАЖДОГО события отдельный!!!) - это по сути единственный столбец Столбец -"ВременнАя метка" наступления события. Ну если очень хочется (или заготовка - "на потом"), можно свести все такие столбцы в единый датафрейм, где первый столбце "Временная метка" всех(!!!) событий (по сути объединение временных меток всех отдельных событий), а дальше - каждый столбец - содержит 1 в том рядке, которые соответствует моменту его наступления. Понятно, что так работать будет сложнее для каждого события в отдельности, зато вы потом сможете искать корреляции событий, что может оказать очень полезным (например, при анализе того-же интернет-трафика).
Если же у вас события более часты, и вас не интересует момент события, а достаточно просто определить - по сути - сколько событий в день произойдет, то как я уже писал - это типичный временной ряд, и его можно "предсказывать" любым методом, который окажется подходящим и адекватным по сложности - от элементарного усреднения или методов Брауна-Хольта-Винтерса, до АRIMA или LSTM-нейросетей. Тут вы тоже по сути предсказываете вероятность того или иного значения количества событий на период прогнозирования.
Надо сказать, что для временных рядов разработана и теория "панельных данных", и теория "многомерных рядов" и задача анализа контегральных рядов - когда значения одного ряда в разных сочетаниях могут оказывать влияние на значения другого. Но тут уже все намного сложнее.
Так что выбирайте :-)
Исходя из того, что первый абзац я хоть немного понял - думаю что он мне подойдёт больше)
Я не знаток таких вещей, на работе поставили такую задачу (мол, тыж там интересовался этим...), сейчас пытаюсь это дело как-то реализовать)
Я ведь правильно понимаю, что в первом случае алгоритм будет следующий:
взять первый датафрейм (для первого события) где каждый столбец имеет значение времени события, обучить модель на последнем значении, предсказать следующее.
Ну и так для всех оставльных событий)
0
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
11.08.2020, 23:25
Цитата Сообщение от СекретФирмы Посмотреть сообщение
взять первый датафрейм (для первого события) где каждый столбец имеет значение времени события, обучить модель на последнем значении, предсказать следующее.
Модели ОБУЧЕНИЯ никогда не строятся по одному обучающему значению!
В данном случае, предполагая, что каждое Событие живет своей жизнью, все что вы можете - построить вероятность распределения времени ожидания следующего события. Ну, или вероятность наступления события в следующий день. Все! Ни больше и ни меньше. Для этого "последнее событие " вам без надобности.

А вот в временном ряду - там можно "обучать" модель, но тоже,не на одном значении. Большинство методов связанных с временными рядами строят адаптивные модели, т.е. модели, которые набирая новые значения временного ряда и сверяя их с известными данными способны подстраиваться, адаптироваться, и "предсказывать" свои значения на следующих временных тиках.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.08.2020, 23:25
Помогаю со студенческими работами здесь

Ошибка sklearn
Всем хай! Падает sklearn при использовании метода кластеризации K-Means для наборов текста. Как понять в чем трабла? ...

Библиотека Sklearn
Подскажите пожалуйста, кто знает, как проверять обученную сеть на тестовом файле методом RandomForest. В приложении код, в котором сам...

Обучение C# по видео курсам. Оптимально ли такое обучение?
Всем привет. Вот уже как 3 месяца я с нуля начал изучать C# по видео курсам CyberBionic Systematics. (Кстати, сразу вопрос к тем, кто в...

sklearn бинарная классификация
Нужно предсказать, результат будет положительным или отрицательным. Есть обучающая выборка (.csv), тестовая - в них однозначные числа с...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru