Skip to content

Commit 18d291e

Browse files
prism_algorithm.py added
1 parent 5954108 commit 18d291e

1 file changed

Lines changed: 62 additions & 0 deletions

File tree

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
def prism(data, target):
2+
rules = []
3+
classes = set(row[target] for row in data)
4+
5+
for cls in classes:
6+
cls_data = [row for row in data if row[target] == cls]
7+
uncovered = cls_data.copy()
8+
9+
while uncovered:
10+
rule = {}
11+
remaining_features = list(data[0].keys())
12+
remaining_features.remove(target)
13+
14+
while True:
15+
best_feature, best_value, best_coverage = None, None, 0
16+
17+
for feature in remaining_features:
18+
values = set(row[feature] for row in uncovered)
19+
for value in values:
20+
coverage = [row for row in uncovered if row[feature] == value]
21+
if len(coverage) > best_coverage:
22+
best_coverage = len(coverage)
23+
best_feature = feature
24+
best_value = value
25+
26+
if best_feature is None:
27+
break
28+
29+
rule[best_feature] = best_value
30+
uncovered = [row for row in uncovered if row[best_feature] == best_value]
31+
32+
if all(row[target] == cls for row in uncovered):
33+
rules.append((rule.copy(), cls))
34+
uncovered = [row for row in cls_data if not rule_matches(rule, row)]
35+
break
36+
37+
remaining_features.remove(best_feature)
38+
39+
return rules
40+
41+
def rule_matches(rule, row):
42+
for feature, value in rule.items():
43+
if row[feature] != value:
44+
return False
45+
return True
46+
47+
if __name__ == "__main__":
48+
n = int(input("Enter number of rows: "))
49+
features = input("Enter feature names separated by space (last one is target): ").split()
50+
data = []
51+
52+
for _ in range(n):
53+
values = input(f"Enter values for {features} separated by space: ").split()
54+
row = {features[i]: values[i] for i in range(len(features))}
55+
data.append(row)
56+
57+
target = features[-1]
58+
rules = prism(data, target)
59+
60+
print("\nGenerated Rules:")
61+
for r, cls in rules:
62+
print(f"If {r} then {target} = {cls}")

0 commit comments

Comments
 (0)