Skip to content

Cannot use F1 objective, because w is set to None #1

@wolpl

Description

@wolpl

When running the fit(X,y) method of the GOSDT python class, I consistently get the following error message (trace shortened):

Traceback (most recent call last):
...
  File ".../gosdt.py", line 95, in fit
    self.__python_train__(X, y)
  File ".../gosdt.py", line 273, in __python_train__
    leaves_c, pred_c, dic, nleaves, m, n, totaltime, time_c, R_c, COUNT, C_c, accu, best_is_cart, clf = bbound(
  File ".../imbalance/osdt_imb_v9.py", line 1875, in bbound
    root_leaf = CacheLeaf(name, n, P, N, (), x, y, y_mpz, z_mpz, make_all_ones(n + 1),
  File ".../imbalance/osdt_imb_v9.py", line 1676, in __init__
    self.pred = bound.leaf_predict(self.p, self.n, w)
  File ".../imbalance/osdt_imb_v9.py", line 1344, in leaf_predict
    if w * p <= n:
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'

When printing the variables w, p and n prior to the last call (line 1344 in osdt_imb_v9.py) I can see that w is None, the other two are not.

It seems to me that using the F1-score is impossible, because in gosdt.py the configuration entry for w is set to None whenever F1 should be used. Unless w is altered somewhere the operation in osdt_imb_v9.py consequently has to fail. File gosdt.py, lines 85-87:

elif self.configuration["objective"] == "f1":
    self.configuration["theta"] = None
    self.configuration["w"] = None

Running the algorithm without specifying the objective and with other objectives like acc, bacc or wacc works perfectly fine. How can I use F1?
Is the C++ implementation able to optimize for an F1 objective function?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions