Source code for PyBMF.models.OrMachine

import sys
import os

# current_path = os.path.dirname(os.path.abspath(__file__))
# pybmf_path = os.path.abspath(os.path.join(current_path, os.pardir))
# external_model_path = os.path.abspath(os.path.join(current_path, 'bmf_ormachine_rakut'))
# sys.path.insert(1, pybmf_path)
# sys.path.insert(1, current_path)
# sys.path.insert(1, external_model_path)

from .ContinuousModel import ContinuousModel
from ..utils import show_matrix, matmul

try:
    import ormachine
except ImportError:
    print('[E] Missing package: ormachine. Please install it first.')
    pass


[docs] class OrMachine(ContinuousModel): def __init__(self, k): self.check_params(k=k)
[docs] def fit(self, X_train, X_val=None, X_test=None, **kwargs): super().fit(X_train, X_val, X_test, **kwargs) self._to_dense() self._to_float() self._fit() self.finish(show_logs=self.show_logs, save_model=self.save_model, show_result=self.show_result)
def _fit(self): X = 2 * self.X_train - 1 # invoke machine object orm = ormachine.machine() data = orm.add_matrix(val=X, sampling_indicator=False) # add layer layer1 = orm.add_layer(size=self.k, child=data, lbda_init=2) # run inference orm.infer() self.U = orm.members[1].val self.U = (self.U + 1) / 2 self.V = orm.members[2].val self.V = (self.V + 1) / 2 self.X_pd = matmul(self.U, self.V.T, boolean=True, sparse=True) self.evaluate(df_name='boolean')