Использование Python в качестве платформы для анализа данных
При работе с алгоритмами машинного обучения мы сталкиваемся с большим перемещением данных, но во многих алгоритмах наиболее важной частью является интенсивное использование операций линейной алгебры и других математических/векторных вычислений.
У Intel есть математическая библиотека, оптимизированная для новейших процессоров (MKL), включая созданные программистами оптимизации для нескольких ядер, более широкие векторные единицы и более разнообразные архитектуры, которые обеспечивают производительность, которая не может быть достигнута только с автоматической оптимизацией компилятора для таких подпрограмм, как как сильно векторизованная и многопоточная линейная алгебра, быстрые преобразования Фурье, а также векторная математика и статистика. Эти функции не требуют авторских отчислений, поэтому их статическое включение в программу осуществляется бесплатно.
Кристоф Гольке и его сотрудники имеют лицензию MKL и приложили усилия для компиляции серии модулей Python, скомпилированных против них. В частности, Numpy и Scipy включают эти мощные библиотеки. Добавьте к этому, что он уже скомпилировал двоичные файлы для 64-битной Windows, которые очень редко встречаются в Интернете.
Ниже приведены два теста с положительно определенной матрицей. Мы вычисляем собственные значения в R и Python, используя в каждом случае симметричный решатель собственных значений. Процессор i5 3210M не подключен к розетке (теряет примерно половину своей производительности). Обратите внимание, что эта версия R скомпилирована со стандартными библиотеками Atlas.
**B=read.csv(«B.csv»,заголовок=F)
ст=прок.время(); eigB = собственный (B, симметричный = T); en=proc.time()
en-st
пользовательская система истекла
0,58 0,00 0,58 **
В Питоне
из времени импортировать время
импортировать numpy
**B=numpy.loadtxt(«B.csv», разделитель=»,»)
ст = время(); U, E = numpy.linalg.eigh(B); эн = время ()
en-st
0,13400006294250488
**И последнее замечание: существует альтернатива высокопроизводительным процессорам с открытым исходным кодом, и это библиотеки OpenBLAS. Их производительность сравнима с MKL.
Ссылка на положительно определенную матрицу, использованную в экспериментах, здесь. Ссылка на страницу Кристофа Гольке здесь.
Несмотря на то, что я знал о Scikits Learn (sklearn) некоторое время в аспирантуре, у меня никогда не было возможности по-настоящему использовать Python для анализа данных, и вместо этого я стал жертвой собственной инертности и ограниченности. я использую R и особенно Matlab.
Должен сказать, поначалу Python выглядел неуклюже: для меня было немыслимо использовать невидимый элемент (пробелы или табуляции) в качестве структурной конструкции программы (определяющие блоки), в чем-то очень похожем на Фортран, который я всегда считается странным (из мира C). Это, а также отсутствие вездесущей точки с запятой в конце строки C-синтаксиса оказывается важным элементом повышения эффективности при программировании на Python. Я должен сказать, что любой недостаток производительности компьютера компенсируется скоростью, с которой программист работает при написании программного обеспечения. Это относится к общему программному обеспечению, такому как сервер приложений, который я готовлю, который пишется на Python с использованием Google App Engine, и я должен сказать, что он просто работает гладко, нет необходимости в перекомпиляциях, четкий синтаксис и однострочный сложные фрагменты кода для обработки данных.