Skip to content

phepy.toys.line

LineToyExample

LineToyExample(rng: np.random.Generator, N: int = 10000)

Bases: ToyExample

Source code in phepy/toys/line.py
def __init__(
    self, rng: np.random.Generator, N: int = 10_000
) -> LineToyExample:
    X1 = np.concatenate(
        [np.linspace(0, 4, N // 2), np.linspace(6, 10, N // 2)]
    )
    X2 = 1 + X1 * 0.5 + rng.normal(loc=0.0, scale=0.1, size=N)
    X1 += rng.normal(loc=0.0, scale=0.1, size=N)

    self.__X_train = np.stack([X1, X2], axis=1)
    self.__Y_train = X1 * np.sqrt(1.25)

    X1 = np.concatenate(
        [np.linspace(0, 4, N // 2), np.linspace(6, 10, N // 2)]
    )
    X2 = 1 + X1 * 0.5 + rng.normal(loc=0.0, scale=0.1, size=N)
    X1 += rng.normal(loc=0.0, scale=0.1, size=N)

    self.__X_valid = np.stack([X1, X2], axis=1)
    self.__Y_valid = X1 * np.sqrt(1.25)

    X1T, X2T = np.mgrid[-2:12:0.01, -1:8:0.01]
    X1T = X1T.flatten()
    X2T = X2T.flatten()

    self.__X_test = np.stack([X1T, X2T], axis=1)

X_test property

X_test: np.ndarray

X_train property

X_train: np.ndarray

X_valid property

X_valid: np.ndarray

Y_train property

Y_train: np.ndarray

Y_valid property

Y_valid: np.ndarray

aspect_ratio property

aspect_ratio: float

is_in_distribution

is_in_distribution(X: np.ndarray) -> np.ndarray
Source code in phepy/toys/line.py
def is_in_distribution(self, X: np.ndarray) -> np.ndarray:
    # Two standard deviations off the mean -> 95.45% interval
    return np.linalg.norm(X - self.reconstruct(X), axis=1) <= 0.2

plot

plot(
    conf: np.ndarray,
    ax: mpl.axes.Axes,
    cmap: Union[str, mpl.colors.Colormap],
    with_scatter: bool = True,
)
Source code in phepy/toys/line.py
def plot(
    self,
    conf: np.ndarray,
    ax: mpl.axes.Axes,
    cmap: Union[str, mpl.colors.Colormap],
    with_scatter: bool = True,
):
    N_skip = len(self.X_train) // 40

    ax.imshow(
        conf.reshape(np.mgrid[-2:12:0.01, -1:8:0.01][0].shape).T,
        cmap=cmap,
        vmin=0.0,
        vmax=1.0,
        extent=[-2, 12, -1, 8],
        origin="lower",
        interpolation="bicubic",
        rasterized=True,
    )

    ax.set_xlim(-2, 12)
    ax.set_ylim(-1, 8)

    if with_scatter:
        ax.scatter(
            self.X_train[::N_skip, 0],
            self.X_train[::N_skip, 1],
            c="white",
            marker="x",
            lw=3,
            s=48,
        )
        ax.scatter(
            self.X_train[::N_skip, 0],
            self.X_train[::N_skip, 1],
            c="black",
            marker="x",
        )

    ax.axis("off")

reconstruct

reconstruct(X: np.ndarray) -> np.ndarray
Source code in phepy/toys/line.py
def reconstruct(self, X: np.ndarray) -> np.ndarray:
    # Project X onto the line
    return np.array([[0.0, 1.0]]) + np.array([[1.0, 0.5]]) * (
        np.matmul((X - np.array([0.0, 1.0])), np.array([[1.0], [0.5]]))
        / np.matmul(np.array([[1.0, 0.5]]), np.array([[1.0], [0.5]]))
    )