tf.nn.isotonic_regression
Решает задачи изотонной регрессии вдоль указанной оси.
tf.nn.isotonic_regression(
inputs, decreasing=True, axis=-1
)
Для каждого вектора x решаемая задача:
\[\argmin_{y_1 >= y_2 >= ... >= y_n} \sum_i (x_i - y_i)^2.\]
Поскольку решение является покомпонентно постоянным, возвращается второй тензор, кодирующий сегменты. Задачи решаются вдоль указанной оси.
Рассмотрим следующий пример, где решается набор из двух задач. Первый вход — [3, 1, 2], а второй 1, 3, 4.
>>> x = tf.constant([[3, 1, 2], [1, 3, 4]], dtype=tf.float32)
>>> y, segments = tf.nn.isotonic_regression(x, axis=1)
>>> y # The solution.
<tf.Tensor: shape=(2, 3), dtype=float32, numpy=
array([[3. , 1.5 , 1.5 ],
[2.6666667, 2.6666667, 2.6666667]], dtype=float32)>
Обратите внимание, что первое решение состоит из двух блоков [2] и [1.5, 1.5]. Второе решение является постоянным и, следовательно, имеет один сегмент. Эти сегменты именно то, что кодирует второй возвращаемый тензор:
segments
<tf.Tensor: shape=(2, 3), dtype=int32, numpy=
array([[0, 1, 1],
[0, 0, 0]], dtype=int32)>
| Аргументы | |
|---|---|
inputs | Тензор, содержащий входные данные. |
decreasing | Если установлено в False, неравенства в оптимизирующих ограничениях инвертируются. |
axis | Ось, вдоль которой должны решаться задачи. |
| Возвращаемое значение | |
|---|---|
output | Решения, с той же формой и типом, что и входные данные. |
segments | Тензор int32, с той же формой, что и входные данные, указывающий на сегменты, имеющие одинаковое значение. Точнее, позиции с одинаковым значением соответствуют одному сегменту. Эти значения начинаются с нуля и монотонно возрастают для каждого решения. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/nn/isotonic_regression