Привет, я новичок в kaggle и работаю над Набор данных House Prediction. Я только что наткнулся на один из этих Ядра и не мог понять, что делает numpy.log1p() в третьем конвейере этого кода.
Я погуглил, и документация numpy говорит об этом
Возврат:
Но какова цель поиска журнала с одним добавленным (+1) при обнаружении асимметрии исходного и преобразованного массива одинаковых функций? Что оно делает ?
Может ли кто-нибудь направить меня?
Мы никогда не указываем ноль в журнале, потому что в feat_trial есть данные. Кстати, мой вопрос был в том, какой смысл вести журнал?
Хорошо, я понял, что журналы используются для реагирования на перекос в сторону больших значений; то есть случаи, когда одна или несколько точек намного больше, чем основная часть данных. но зачем прибавлять 1 к x; а он даже не пустой и в нем есть данные?
log1p также полезен для суммирования логарифмических вероятностей (общее представление вероятностей). Подробнее на en.wikipedia.org/wiki/Log_probability






Документы NumPy дают подсказку:
For real-valued input,
log1pis accurate also forxso small that1 + x == 1in floating-point accuracy.
Так, например, давайте добавим крошечное ненулевое число и 1.0. Ошибки округления делают его 1.0.
>>> 1e-100 == 0.0
False
>>> 1e-100 + 1.0 == 1.0
True
Если мы попытаемся взять log этой неверной суммы, мы получим неверный результат (сравните с Вольфрам Альфа):
>>> np.log(1e-100 + 1)
0.0
Но если мы воспользуемся log1p(), то получим правильный результат
>>> np.log1p(1e-100)
1e-100
Тот же принцип действует для exp1m() и logaddexp(): они более точны для небольших x.
Спасибо, также ясно, применимо ли это только для небольших значений x? Поскольку ввод, который мы даем этому np.log1p (), то есть feat_trial, имеет в нем большие значения
Ожидается, что их точность будет хорошей для всех чисел (хотя все числа с плавающей запятой теряют точность для больших значений)
Если x находится в диапазоне 0 ... + Inf, тогда это никогда не вызовет ошибки (как мы знаем, log (0) вызовет ошибку).
Не всегда лучший выбор, потому что, как вы видите, вы потеряете большую кривую перед x = 0, что является одним из лучших моментов в функции журнала.
Я не понимаю, почему log1p полезен (в отличие от простого использования log (1 + x)). Если мы предполагаем, что x находится в [0; + inf], то избежание ошибки log (0) не будет причиной существования log1p (x), потому что log (1 + p) никогда не вызовет эту ошибку.
Когда ваше входное значение настолько мало, используя для расчета np.log1p или np.expm1, вы получите более точный результат, чем np.log или np.exp в соответствии с интерпретацией из эта ссылка.
потому что логарифм нуля вызывает ошибку ...