Skip to content

java.lang.NullPointerException during expert rule induction #17

Closed
@cezary986

Description

@cezary986

Problem description:
The error occurs when using left-open mathematical intervalas in expert rules during expert rule induction. For example: gimpuls = (200, 750).

Minimal example to reproduce error:

import io
import requests
from scipy.io import arff
import pandas as pd
from rulekit.classification import ExpertRuleClassifier


def read_dataset() -> tuple[pd.DataFrame, pd.Series]:
    data: str = requests.get(
        'https://raw.githubusercontent.com/adaa-polsl/RuleKit-python/main/doc/source/rst/tutorials/seismic-bumps.arff'
    ).text
    data_file = io.StringIO(data)
    data_df = pd.DataFrame(arff.loadarff(data_file)[0])
    data_df['class'] = data_df['class'].astype(int)
    X = data_df.drop(['class'], axis=1)
    y = data_df['class']
    return X, y


X, y = read_dataset()
expert_rules = [
    ('rule-0', 'IF [[gimpuls = (200, 750)]] THEN class = {0}'), # <-- the error is (200, ... it works if its <200, 0
]

clf = ExpertRuleClassifier(
    minsupp_new=8,
    max_growing=0,
    extend_using_preferred=True,
    extend_using_automatic=True,
    induce_using_preferred=True,
    induce_using_automatic=True
)
clf.fit(
    X, y,
    expert_rules=expert_rules
)

Stack trace:

---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
File ExpertRuleGenerator.java:294, in adaa.analytics.rules.operator.ExpertRuleGenerator.learn()

Exception: Java Exception

The above exception was the direct cause of the following exception:

java.lang.NullPointerException            Traceback (most recent call last)
Cell In[14], [line 33](vscode-notebook-cell:?execution_count=14&line=33)
     [21](vscode-notebook-cell:?execution_count=14&line=21) expert_rules = [
     [22](vscode-notebook-cell:?execution_count=14&line=22)     ('rule-0', 'IF [[gimpuls = (200, 750)]] THEN class = {0}'), # <-- the error is (200, ... it works if its <200, 0
     [23](vscode-notebook-cell:?execution_count=14&line=23) ]
     [25](vscode-notebook-cell:?execution_count=14&line=25) clf = ExpertRuleClassifier(
     [26](vscode-notebook-cell:?execution_count=14&line=26)     minsupp_new=8,
     [27](vscode-notebook-cell:?execution_count=14&line=27)     max_growing=0,
   (...)
     [31](vscode-notebook-cell:?execution_count=14&line=31)     induce_using_automatic=True
     [32](vscode-notebook-cell:?execution_count=14&line=32) )
---> [33](vscode-notebook-cell:?execution_count=14&line=33) clf.fit(
     [34](vscode-notebook-cell:?execution_count=14&line=34)     X, y,
     [35](vscode-notebook-cell:?execution_count=14&line=35)     expert_rules=expert_rules
     [36](vscode-notebook-cell:?execution_count=14&line=36) )

File [c:\Users\cezar\OneDrive\Pulpit\EMAG\GIT\PythonRulekit\rulekit\classification.py:512](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/classification.py:512), in ExpertRuleClassifier.fit(self, values, labels, expert_rules, expert_preferred_conditions, expert_forbidden_conditions)
    [510](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/classification.py:510) self._get_unique_label_values(labels)
    [511](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/classification.py:511) self._prepare_labels(labels)
--> [512](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/classification.py:512) return ExpertKnowledgeOperator.fit(
    [513](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/classification.py:513)     self,
    [514](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/classification.py:514)     values,
    [515](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/classification.py:515)     labels,
    [516](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/classification.py:516)     expert_rules=expert_rules,
    [517](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/classification.py:517)     expert_preferred_conditions=expert_preferred_conditions,
    [518](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/classification.py:518)     expert_forbidden_conditions=expert_forbidden_conditions
    [519](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/classification.py:519) )

File [c:\Users\cezar\OneDrive\Pulpit\EMAG\GIT\PythonRulekit\rulekit\_operator.py:206](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/_operator.py:206), in ExpertKnowledgeOperator.fit(self, values, labels, survival_time_attribute, contrast_attribute, expert_rules, expert_preferred_conditions, expert_forbidden_conditions)
    [200](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/_operator.py:200) self._validate_contrast_attribute(example_set, contrast_attribute)
    [201](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/_operator.py:201) self._configure_expert_parameters(
    [202](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/_operator.py:202)     expert_rules,
    [203](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/_operator.py:203)     expert_preferred_conditions,
    [204](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/_operator.py:204)     expert_forbidden_conditions,
    [205](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/_operator.py:205) )
--> [206](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/_operator.py:206) java_model = self._rule_generator.learn(example_set)
    [207](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/_operator.py:207) self.model = RuleSet(java_model)
    [208](file:///C:/Users/cezar/OneDrive/Pulpit/EMAG/GIT/PythonRulekit/rulekit/_operator.py:208) return self.model

java.lang.NullPointerException: java.lang.NullPointerException

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions