как обрабатывать log (0) в javascript при попытке построить график - PullRequest
0 голосов
/ 05 апреля 2020

Я использую регрессионный пакет , который использует это вычисление для получения массива точек:

exponential(data, options) {
  const sum = [0, 0, 0, 0, 0, 0];

  for (let n = 0; n < data.length; n++) {
    if (data[n][1] !== null) {
      sum[0] += data[n][0];
      sum[1] += data[n][1];
      sum[2] += data[n][0] * data[n][0] * data[n][1];
      sum[3] += data[n][1] * Math.log(data[n][1]);
      sum[4] += data[n][0] * data[n][1] * Math.log(data[n][1]);
      sum[5] += data[n][0] * data[n][1];
    }

Проблема в том, что Math.log(data[n][1]) может вернуть -Infinity, если data[n][1] равно 0.

Как бы я справился с этим делом. Моя математика подводит меня к этому.

1 Ответ

0 голосов
/ 05 апреля 2020

Чтобы избежать этой проблемы, вы можете добавить постоянное значение c ко всем data[n][1], чтобы ни один из них больше не был 0 (который в основном сдвигает все точки на c единицы). Если пакет делает правильные вещи, он должен предсказать эквивалентный полином, который также сдвинут на c единиц. Таким образом, вы можете изменить этот многочлен, чтобы получить действительный, вычитая из него c.

Теперь вы можете просто игнорировать точки, имеющие значение ординаты 0, потому что эти точки не влияют на метод exponential. Я только что проверил исходный код и в методе exponential всякий раз, когда используются data[n][0] и log(data[n][1]), data[n][1] умножается на них, поэтому, когда data[n][1] равен 0, это не имеет никакого значения , Но проблема в том, что он вызывает метод determinationCoefficient, который вычисляет mean всех значений data[n][1]. Таким образом, если вы не используете точки с data[n][1] = 0, он получит другое значение для mean. В результате вы можете получить другой результат.

Теперь вопрос в том, нужны ли вам точки с 0 ординатами? Пакет написан при условии, что ординаты не 0. Возможно, вы используете слишком много очков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...