Closed
Description
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