язык R: глюки пакета ridge

Если нужна гребневая регрессия в R, то можно использовать библиотеку с подходящим названием ridge. Основная фишка реализованного в ней метода – автоматический выбор параметра регуляризации, см. статью Cule, E. and De Iorio, M. (2012) A semi-automatic method to guide the choice of ridge parameter in ridge regression. Это действительно работает, причём на моих данных очень неплохо. Но в реализации допущены просто «потрясные» баги…

И как так можно писать! И как можно не тестить!

1. У Вас не получится ничего сделать с контрольной выборкой, состоящей из одного объекта.

Вот целую матрицу обработать — пожалуйста, а один объект — нет. Видимо, создатели даже и не подумали, что иногда бывает интересно значение целевой переменной ровно на одном объекте!

Почему так иногда происходит, я поясню на примере другой системы – Matlab, чтобы дать понять, что подобные ошибки происходят во многих скриптовых языках. Допустим, Вы пишите код, который нормирует все столбцы, скажем, делит на сумму всех элементов в столбце. Как-то так, если не проверять деление на ноль:

Рис. Код на M-языке.
Рис. Код на M-языке.

Так вот, если теперь X – вектор-строка, то этот код не работает. Причина в том, что sum(X) – это сумма столбцов матрицы X, кроме случая, когда X является матрицей размера 1×n. Поэтому надо в явном виде указывать, по какой размерности суммировать. Мораль: не полагайтесь на значения параметров по умолчанию.

2. Самую простую зависимость – константу – экстраполировать не удастся.

Если в обучении целевой вектор константный, т.е. регрессионные значения у всех объектов одинаковые, то на контроле будут выдаваться NaN-ы.

Из моего опыта (я не копался в коде ridge) – в чём причина подобного поведения? Видимо, изначально все значения нормируются, например делятся на дисперсию… а она-то нулевая… В R, естественно, делить на ноль можно – ошибки не будет:

blogRpic2Положительные моменты из мира R.

Открыл для себя библиотечку readr. В частности, там есть хорошая функция для загрузки csv-файлов: read_csv, она быстрее стандартной read.csv, а главное – правильнее работает (в Windows-версии, если в csv-файле много текстовых данных в кавычках, то read.csv иногда не справляется).

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

Data Science in R: A Case Studies Approach to Computational Reasoning and Problem Solving
Data Science in R: A Case Studies Approach to Computational Reasoning and Problem Solving
Реклама

2 thoughts on “язык R: глюки пакета ridge

  1. Язык то больше академический, а там люди не привыкшие, на 20 строк кода писать 100 строк тестов :).

    • Это же проблема не языка, а отдельного пакета (который добрые люди за бесплатно сделали). Причём, с подобным я столкнулся в первый раз. Остальные пакеты очень качественные. Просто эти глюки довольно типичны для, скажем так, новичков в программировании на R, Matlab, Python.

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s