derzeit schreibe ich an einer Arbeit, in der ich unter anderem Anomalien in einem Datensatz herausfiltern möchte. Dafür setze ich unter anderem den BernoulliNB ein. Der Datensatz enthält 1,2mio Daten in Form von Integern zwischen 0 und 4 im Normalfall. Der Anteil von Anomalien beträgt etwa 0,1%. Diese liegen zwischen 5 und 100.
Der fachlich relevante Code sieht derzeit so aus:
Code: Alles auswählen
y_train, y_test, c_train, c_test = train_test_split(y,trueClassification, test_size=0.2, stratify=trueClassification, random_state=42)
#bnb = BernoulliNB(alpha=0, force_alpha=True)
bnb = BernoulliNB()
model = bnb.fit(y_train, c_train)
predictedClassification = bnb.predict(y_test)
conf = confusion_matrix(c_test, predictedClassification)
tn = conf[0,0]
fp = conf[0,1]
fn = conf[1,0]
tp = conf[1,1]
print(f'tn: {tn}, fp: {fp}, fn: {fn}, tp: {tp}')
tn: 241678, fp: 0, fn: 242, tp: 0
Warum erkennt er garkeine Anomalien?
Das ist die Frequency Distribution der Most Common 5 im Datensatz:
[(2, 242105), (1, 241977), (0, 241811), (3, 241268), (4, 241230), (48, 23), (49, 22), (46, 22), (10, 21), (96, 20)]
Das sollte doch eigentlich reichen für eine statistische Identifikation.
Wäre echt cool wenn mir jemand erklären könnte, warum er dennoch nichts findet.
Vielen Dank schon mal
Sqwan