/**
 * Restricted Boltzmann machine
 */
export class RBM {
    /**
     * @param {number} hiddenSize Size of hidden layer
     * @param {number} [lr] Learning rate
     */
    constructor(hiddenSize: number, lr?: number);
    _hidden: number;
    _visible: number;
    _w: number[][];
    _a: any[];
    _b: any[];
    _lr: number;
    _k: number;
    _normalize(x: any): void;
    _sgm(x: any): number;
    _h(v: any, sample?: boolean): any[][];
    _v(h: any, sample?: boolean): any[][];
    /**
     * Fit model.
     * @param {Array<Array<number>>} x Training data
     */
    fit(x: Array<Array<number>>): void;
    /**
     * Return a energy value of the data.
     * @param {Array<number>} v Sample data
     * @param {Array<number>} h Target values
     * @returns {number} Energy value
     */
    energy(v: Array<number>, h: Array<number>): number;
    /**
     * Returns predicted values.
     * @param {Array<number>} x Sample data
     * @returns {(0 | 1)[]} Predicted values
     */
    predict(x: Array<number>): (0 | 1)[];
}
/**
 * Gaussian-Bernouili Restricted Boltzmann machine
 */
export class GBRBM {
    /**
     * @param {number} hiddenSize Size of hidden layer
     * @param {number} [lr] Learning rate
     * @param {boolean} [fixSigma] Do not learn sigma or not
     */
    constructor(hiddenSize: number, lr?: number, fixSigma?: boolean);
    _hidden: number;
    _visible: number;
    _w: number[][];
    _b: any[];
    _z: any[];
    _c: any[];
    _lr: number;
    _fixSigma: boolean;
    _k: number;
    _randn(): number;
    get _s(): number[];
    _h(v: any, sample?: boolean): any[][];
    _v(h: any, sample?: boolean): any[][];
    /**
     * Fit model.
     * @param {Array<Array<number>>} x Training data
     */
    fit(x: Array<Array<number>>): void;
    /**
     * Return a energy value of the data.
     * @param {Array<number>} v Sample data
     * @param {Array<number>} h Target values
     * @returns {number} Energy value
     */
    energy(v: Array<number>, h: Array<number>): number;
    /**
     * Returns predicted values.
     * @param {Array<Array<number>>} x Sample data
     * @returns {Array<Array<number>>} Predicted values
     */
    predict(x: Array<Array<number>>): Array<Array<number>>;
}
