Быстрый Data Mining или сравнение производительности C# vs Python (pandas-numpy-skilearn)

Dec 26, 2016 17:38

Всем привет!

Разбираясь со Spark Apache, столкнулся с тем, что после достаточно небольшого усложнения алгоритмов подготовки данных расчеты стали выполняться крайне медленно. Поэтому захотелось реализовать что-нибудь на C# и сравнить производительность с аналогичным по классу решением на стеке python (pandas-numpy-skilearn). Аналогичным, потому что ( Read more... )

big data, c#, data mining, python

Leave a comment

Comments 29

softwizard December 26 2016, 16:19:07 UTC
Страшно подумать, насколько быстрее работало бы, если переписать на ++, да скомпилировать без отладочных вставок :)) На С#, наверное, отладка не так сильно влияет...

Reply

pustota_2009 December 27 2016, 19:38:04 UTC
Сомневаюсь что ++ даст заметный выигрыш. Как-то сравнивал время выполнения кода чистого С под linux с аналогом C# и получил идентичные результаты. Похоже что .net вылизан весьма прилично.

Reply

softwizard December 29 2016, 11:04:43 UTC
странно это... Я несколько далёк сейчас от деталей процессоростроения, но я не понимаю, куда могли деться накладные расходы на интерпретацию кода. Ну или под C# сделали честный компилятор, тогда и нет никакой особой разницы.

Reply

ext_2057957 March 18 2017, 21:05:59 UTC
Дело в том, что в C# или той же Java используются jit компитяторы. Тоесть код на с#, java компилируется в байткод (при компиляции выполняются определенные оптимизации). При запуске скомпилированного приложения рантайм начинает интерпритировать этот байткод. Начиная с какого то момента рантайм .net или jvm понимает, что некоторые куски приложения используются чаще и происходит компиляция байткода в машинный код, который уже условно будет выполняться как есть. Дальше статистика использования продолжает накапливаться, более часто используемые куски кода подвергаются все более агрессивным оптимизациям. в итоге прогретое c# или java приложние в некоторых случаях может быть и быстрее чем плюсовое.

Reply


i_v_s December 26 2016, 16:32:50 UTC
Я не настоящий волшебник, но зачем использовалась дополнительная прокладка в виде JN? Он хорош для отладки, для документирования, но когда код готов - разумнее же его гонять в чистом Python (CPython)?

p.s. А ещё б глянуть скорости исполнения питон-кода в IronPython или Cython.

Reply

pustota_2009 December 27 2016, 19:34:06 UTC
Прокладка совсем не мешает, запуск под ipython sriptname.py дает аналогичные результаты. Насчет Cython, я подозреваю что это не поможет, потому что причина замедления скорее всего не в компиляторе, а в наличие оберток которые упрощают исходный код, но замедляют обработку. Первая версия на С# с использованием удобных абстракций типа DataFrame была еще медленнее python.

Reply


adf_asfd December 26 2016, 18:10:08 UTC
А вы библиотек по нейронным сетям не посоветуете случайно?
Хочу на попробовать на c++ биржевого робота написать. Базу для обучения буду брать из графиков с биржи (картинки просто). Но вот с какой стороны к нейросетям подступиться- не знаю.

Reply

pustota_2009 December 27 2016, 16:54:16 UTC
Я бы посмотрел на этот список и выбрал наиболее подходящее для вашего случая (требование к производительности/поддержка CUDA/наличие примеров и т.д.),

http://deeplearning.net/software_links/

Reply

adf_asfd December 27 2016, 18:02:54 UTC
Ох какую вы хорошую ссылочку то дали! Спасибо!

А вы опытом не поделитесь, на сколько вообще это в целом интересно сейчас? Или насколько такие решения эффективны?

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

Reply

pustota_2009 December 27 2016, 19:47:40 UTC
Решения на базе НС могут быть весьма эффективны (кто бы мог подумать https://nplus1.ru/news/2016/11/23/criminalface), однако тут все зависит от правильности постановки задачи. Можно с уверенностью сказать что первый опыт будет скорее всего неудачным, но это даст понимание куда двигаться. В частности я пробовал преобразовывать биржевые данные в графический формат и обучать сверточную сеть, но результат не удовлетворил. Поэтому имеет смысл пробовать, вдруг получится сразу. А если нет, то опыт весьма вероятно пригодится)

Reply


ext_951563 December 30 2016, 06:55:25 UTC
опять 25, вы не задавались целью оптимизировать код py? линейная регрессия есть не только в skilearn

Reply


unburden January 1 2017, 05:39:59 UTC
интересная статья, но как-то подозрительно было читать код написанный курсивом... курьером привычнее.

Reply

pustota_2009 January 1 2017, 18:45:44 UTC
Спасибо! В следующий раз закажу пиццу и попрошу курьера оформить;)
Если серьезно, вот дублирую технические статьи на хабре, там весьма удобно и красиво получается код вставлять: https://habrahabr.ru/post/318484/

Reply

unburden January 2 2017, 06:37:42 UTC

А интересно, тэг pre работает в ЖЖ?

for (int i = 0; i < lTransFullA2.Count; i++)
{
md[i, n_features] = lTransFullA2[i].getAmount1();
md[i, n_features + 1] = lTransFullA2[i].getAmount2();
v.AddAt(i, lTransFullA2[i].getAmount());
}

Reply


Leave a comment

Up