Есть ли формула для s-образной кривой с доменом и диапазоном [0,1]


10

По сути, я хочу преобразовать показатели сходства в веса, которые используются в качестве предикторов. Сходства будут на [0,1], и я ограничу веса также на [0,1]. Мне бы хотелось, чтобы параметрическая функция выполняла это отображение, которое я, скорее всего, оптимизирую с помощью градиентного спуска. Требования состоят в том, чтобы 0 отображалось на 0, 1 отображалось на 1, и оно строго увеличивалось. Простая производная также приветствуется. заранее спасибо

Редактировать: Спасибо за ответы, они очень полезны. Чтобы сделать мою цель более ясной, задача - предсказание. Мои наблюдения представляют собой чрезвычайно разреженные векторы с одним измерением для прогнозирования. Мои входные размеры используются для вычисления сходства. Мой прогноз - это взвешенная сумма значений других наблюдений для предиктора, где вес является функцией подобия. Я ограничиваю свои веса на [0,1] для простоты. Надеюсь, теперь очевидно, почему мне требуется 0 для отображения на 0, 1 для отображения на 1, и чтобы оно строго увеличивалось. Как указал whuber, использование f (x) = x отвечает этим требованиям и на самом деле работает довольно хорошо. Однако он не имеет параметров для оптимизации. У меня много наблюдений, поэтому я могу терпеть множество параметров. Я буду вручную кодировать градиентный спуск, отсюда мое предпочтение простой производной.

Например, многие из приведенных ответов симметричны относительно .5. Было бы полезно иметь параметр для сдвига влево / вправо (например, с бета-распределением)


4
удовлетворяет всем вашим требованиям. е(Икс)знак равноИкс
whuber

Я добавил немного в ответ на ваши изменения об управлении смещением влево-вправо. Все три примера семейства на моей картине имеют прямой способ контролировать это.
Glen_b

Ответы:


8

Вот один из них:

Yзнак равно11+(Икс1-Икс)-β

где является > 0β>0

[! [] [1]] 2


Это стандартная функция, такая как of s i n ? Я заинтересован, чтобы идентифицировать это в браке, но я не мог. Не могли бы вы дать ссылку? tanhsin
Darkmoor

Привет, Darkmoor, я получил это уравнение, играя с "функцией обратного логита". Вы можете видеть, что это похоже на y = обратный логит (x) = 1 / (1 + e ^ -x), потому что логит отображается на (0,1) imgur.com/a/H0kGF
Исмам Худа

2
Вы можете добавить дополнительный уровень регулировки, чтобы настроить положение, в котором функция равна .5, используя y = 1 / (1+ (x ^ r / (1-x ^ r)) ^ - b) , Тогда для достижения y = .5 при x0 установите r = -log (2) / log (x0). Или, если вы хотите убедиться, что y = k для некоторого k между 0 и 1 при x = x0, тогда установите r = -log ((1 / k - 1) ^ (1 / b) +1) / log (x0)
wmsmith

7

Как уже прокомментировал @whuber, функция удовлетворяет трем упомянутым вами требованиям (то есть 0 соответствует 0, 1 соответствует 1, и функция строго увеличивается). В заголовке вашего вопроса вы, кажется, указываете, что вас также интересует S-образная функция, как в сигмоидальной / логистической кривой. Это правильно? В этом случае вам непременно следует попробовать следующую логистическую функцию, которая будет приблизительно соответствовать всем 4 указанным вами критериям: 1е(Икс)знак равноИкс .

11+е-К(Икс-0,5)

в этом уравнении будет контролировать наклон вашей кривой. Изменение k также позволит вам контролировать, насколько близко f ( 0 ) и f ( 1 ) к 0 и 1 соответственно. Например , для к = 20 , F ( 0 ) = 4.539787 е - 05 и F ( 1 ) = 0.9999546 .ККе(0)е(1)Кзнак равно20е(0)знак равно4.539787е-05е(1)знак равно0.9999546

Производная этой функции легко вычисляется как:

Ке-К(Икс-0,5)(1+е-К(Икс-0,5))2

Эта функция не отображает 1 -> 1. Фактически, f -> 1 при x -> ∞. В зависимости от k значение f при x = 1 может быть довольно маленьким, но оно никогда не будет ровно 0. Фактически, это основная причина использования e ^ ... в знаменателе, т. Е. Чтобы соответствующая область [0, ∞) вместо [0,1].
wmsmith

7

Позвольте мне предложить наиболее общее решение, соответствующее требованиям: это даст вам максимальную гибкость при выборе и оптимизации.

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

ее'

е''

Эта вторая производная может делать практически все : все, что нам нужно, это

  • это интегрируемо,

  • [0,К)

  • (К,1]

е''

е

е'(Икс)знак равно0Иксе''(T)dT

а также

е(Икс)знак равно0Иксе'(T)dT,

е''ее(0)е(1)знак равноСеС


е

фигура

е''[0,К)(К,1]R

е'е''е'е

ее''е''

е(Икс)знак равноИксе''(Икс)знак равно0е'е10е'е(Икс)знак равно1-Икс

n <- 51                      # Number of interpolation points
k.1 <- floor(n * 2/3)        # Width of the left-hand interval
k.2 <- n - k.1               # ............ right-hand interval
x <- seq(0, 1, length.out=n) # x coordinates
set.seed(17)

# Generate random values of the second derivative that are first negative,
# then positive.  Modify to suit.
y.2 <- (c(runif(k.1, -1, 0), 0.5*runif(k.2, 0, 1))) * abs(cos(3*pi * x)) + 
  c(rep(-.1, k.1), rep(.5,k.2))

# Recover the first derivative and then the transformation.  Control the 
# minimum slope of the transformation.
y.1 <- cumsum(y.2)
y.1 <- y.1 - min(y.1) + 0.005 * diff(range(y.1))
y <- cumsum(y.1)
y <- (y - y[1]) / (y[n] - y[1]) # Normalize the transformation

#
# Plot the graphs.
par(mfrow=c(1,3))
plot(x, y.2, type="l", bty="n", main="Second derivative")
points(x, y.2, pch=20, cex=0.5)
abline(h=0, col="Red", lty=3)
plot(x, y.1, type="l", bty="n", lwd=2, main="First derivative")
abline(h=0, col="Red", lty=3)
plot(x, y, type="l", lwd=2, main="Transformation")

7

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

  • S-образная кривая

  • параметрическая функция

  • 0 карт до 0, 1 карт до 1, строго увеличивается

  • простая производная

Так почему бы просто не взять какое-нибудь удобное конкретное семейство непрерывных унимодальных * распределений на [0,1], чей pdf "простой"? Это, кажется, выполняет каждую часть того, что вы перечисляете там.

* (режим которого ограничен от конечных точек)

  • S-образная кривая - гарантируется унимодальностью (с режимом не в конечных точках)

  • параметрический - путем указания любого конкретного семейства, имеющего параметры

  • 0 отображает 0, 1 отображает 1, строго увеличивая - это то, что делают функции распределения в [0,1]; вам просто нужно, чтобы плотность была> 0 в (0,1)

  • Простая производная - это PDF, так что если PDF "простой" по любому критерию, вы готовы.

Существует (как сказал Алекс Р) их бесконечное множество. Бета, о которой он упоминает, очевидна, но cdf - это неполная бета-функция, поэтому вам нужно кое-что для ее оценки - это стандартная функция во многих пакетах (включая почти все пакеты приличной статистики), поэтому я сомневаюсь, что быть трудным Однако обратите внимание, что не все бета-версии являются унимодальными (с режимом не на концах), поэтому семейство также включает в себя cdf-файлы, которые не имеют «s» -образной формы.

Вот фотографии трех достаточно простых семей:

введите описание изображения здесь

Есть много других вариантов, и новые могут быть легко построены.

-

В ответ на правку вопроса:

сзнак равно12μα-βαα+β-12

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.