LINUX.ORG.RU

Shogun 1.0.0

 , , , , , , , ,


0

4

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

В Shogun акцентируется внимание на широком использовании различных методов и инструментов для решения задач распознавания образов, таких как: метод опорных векторов (SVM), пошаговый дискриминантный анализ, регрессионный анализ, перцептроны, алгоритмы обучения скрытых моделей Маркова и других. Большинство инструментов основывается на методе опорных векторов. Также возможно использование комбинированных методов.
Shogun написан на C++ и предоставляет интерфейсы для MATLAB, Octave, Python и R.

Данный релиз содержит значительные улучшения:

  • поддержка новых ЯП (Java, C #, Ruby, Lua) в модульных интерфейсах;
  • добавлены новые алгоритмы обучения (LLE, HLLE, LTSA и другие);
  • поддержка MATLAB 2011a;
  • исправление ошибок, чистка кода, изменения в API и многое другое.

В рамках Google Summer of Code 2011 над проектом работало пять студентов, часть их работы вошла в представленный релиз.

Пример распознавания цифр (Shockwave Flash)

Исходный код

>>> Подробности

★★★★★

Проверено: maxcom ()

>Shogun 1.0.0

Сначала прочитал как Shodan... Глаза протер, выдохнул.

программный пакет предназначенный для машинного обучения

Ну, собственно, к ней все и идет :)

slackwarrior ★★★★★ ()

Слава роботам! Убить всех человеков!

adriano32 ★★★ ()
Ответ на: комментарий от slackwarrior

>Сначала прочитал как Shodan... Глаза протер, выдохнул.

Сначала прочитал как Shotgun.

splinter ★★★★★ ()

Отлично! Будет очень интересно посмотреть исходники

yoghurt ★★★★★ ()

SVM - это хорошо. Надо будет посмотреть на еще один DM-инструмент.

r_a_vic ()

>C++ Не нужен

над проектом работало пять студентов,

ОМГ. Пять студентов всё лето писали на С++ код... Волосы дыбом встают, как представлю, что они понаписали.

Интересно, за чколько минут один взрослый хаскеллист реализует то, что они настрочили за лето?

anonymous ()

Я мне encog нравится. http://www.heatonresearch.com там тоже и SVM и bayesian network есть. На крестах раньше таких проектов не видел почему-то.

Leron ★★ ()

Да. На исходники глянуть будет очень интересно. Спасибо!

anonymoos ★★★★★ ()

Молодцы!

Правильное дело делают, доведут до ума можно будет капчи ломать...

anonymous ()
Ответ на: комментарий от anonymous

Ога, и начнут на некоторые сайты только по паспортам пускать :)

Evtomax ()
Ответ на: комментарий от Evtomax

Дело не в абсолютной идентификации человека. Гугл уже понял, что капча не спасает от человеческого спама, и ввёл сотовые номер телефонов, где и паспортные данные наши и так светятся, кстати. Всё идёт к тому, что доступ на хорошие сервисы будет платным. А там ты хоть шпионом будь, главное денежку отстёгивай кому надо.

anonymous ()
Ответ на: комментарий от anonymous

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

snizovtsev ★★★★ ()

Посмотрел код. Действительно студенты.

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

u42 ()
Ответ на: комментарий от u42

Там не смотреть, а тестировать надо. Если не чудит и даёт приличную производительность - плевать, какой код, это не бухгалтерия, править особо не надо. Один раз написали - и всё.

anonymous ()
Ответ на: комментарий от anonymous

Ну мы просто с разных колоколен смотрим. Я когда-то некоторые алгоритмы из этого набора реализовывал. Вот и оценивал, насколько перспективно будет поучаствовать. С учетом GPL и качества кода желание отпало.

Чтобы оно работало на уровне аналогов надо использовать что-то типа liboil, Intel IPP или NVIDIA Performance Primitives (неполный клон IPP поверх CUDA). Иначе сходу будет проигрывать раза в 2-3.

u42 ()
Ответ на: комментарий от blackburn

Закрытых. Подобных велосипедов на самом деле довольно много, просто они не выходят на рынок в чистом виде как библиотеки машинного обучения. Чаще они присутствует в составе узкоспециализированного продукта: распознование образов, data mining, etc.

Если бы мне сегодня нужно было делать проект и выбор был - взять (и возможно где-то допилить) shogun или выставить тендер на разработку подобного функционала, я бы выбрал второе. Даже если бы меня устраивала GPL в рамках проекта.

u42 ()

чтоб не ругать голословно

Проблемы кода на вскидку:
1. Ручное управление памятью раскиданное по всему проекту.
2. Указатели и передача по указателям, там где должны быть передача по ссылке и объекты с умными указателями внутри.
3. Зашитые в код типы данных. Сколько будет стоить замена математики с float64_t на float32_t?
4. Отсутствие const.
Для того, чтобы не возникало лишних вопросов вот этот код
void set_global_version(Version* version);
Version* get_global_version();
должен выглядеть примерно так:
void set_global_version(const Version& version);
Version get_global_version() const;
5. Переменные класса должны отличаются от локальных: x_ вместо x.

u42 ()
Ответ на: комментарий от u42

Не забывайте, что shogun тоже изначально был узкоспециализирован для largescale задач биоинформатики.

Ваша позиция понятна, но мне не известны подобные библиотеки, код которых можно смело брать в продакшн.

blackburn ()
Ответ на: чтоб не ругать голословно от u42

1-2,4. Частично вызвано использованием SWIG. 3. Справедливо, но не знаю решения лучше. 5. В новых/отрефакторенных классах используется m_x.

В любом случае спасибо за замечания.

blackburn ()
Ответ на: комментарий от blackburn

«3» можно реализовать через фабрику
http://ru.wikipedia.org/wiki/Абстрактная_фабрика_(шаблон_проектирования)

class DataFactory
{
//...
};

class Float32Factory : DataFactory
{
public:
typedef float32_t DataType;
//...
static Array<DataType> GetArray(size_t size);
static Matrix<DataType> GetMatrix(size_t n, size_t m);
//...
};

template <class T>
class GetFactory
{
public:
static DataFactory Get();
};

template <> DataFactory GetFactory<float32_t>::Get()
{ return Float32Factory(); }

template <class TData>
class SomeAlgo
{
static DataFactory Factory() { return GetFactory<TData>::Get(); }

void doSomething()
{
Array<TData> a = Factory().GetArray(100);
}
};

С кодом наверняка где-нибудь накосячил, демонстрировал идею.

u42 ()
Ответ на: комментарий от u42

Проблема в том, что врапперы к лапаку, бласу и арпаку тоже придётся как-то прятать. Не самый идеальный вариант.

blackburn ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.