Scénario de test & Cas d'usage
Klassifikation mit Bayes-Netzen.
Entdecken Sie alle Aktionen von bayesianNetClassifierErstellung einer Patiententabelle mit fehlenden Werten in den Variablen 'blutdruck_systolisch' und 'raucherstatus'.
| 1 | DATA work.patienten_daten; |
| 2 | call streaminit(456); |
| 3 | DO patient_id = 1 to 2000; |
| 4 | alter = 40 + floor(rand('Uniform') * 45); |
| 5 | IF rand('Uniform') < 0.7 THEN geschlecht = 'M'; ELSE geschlecht = 'W'; |
| 6 | /* 20% fehlende Blutdruckwerte */ |
| 7 | IF rand('Uniform') < 0.8 THEN blutdruck_systolisch = 100 + rand('Normal', 25, 10); ELSE blutdruck_systolisch = .; |
| 8 | /* 15% fehlende Raucherstatus-Werte */ |
| 9 | rand_raucher = rand('Uniform'); |
| 10 | IF rand_raucher < 0.5 THEN raucherstatus = 'Nichtraucher'; |
| 11 | ELSE IF rand_raucher < 0.85 THEN raucherstatus = 'Raucher'; |
| 12 | ELSE raucherstatus = ''; /* Fehlend */ |
| 13 | wiedereinweisung_wahrscheinlichkeit = 1 / (1 + exp(-( -3 + (alter/20) + (blutdruck_systolisch/100) + (raucherstatus='Raucher') ))); |
| 14 | IF rand('Uniform') < wiedereinweisung_wahrscheinlichkeit THEN wiedereinweisung_30t = 1; ELSE wiedereinweisung_30t = 0; |
| 15 | OUTPUT; |
| 16 | END; |
| 17 | RUN; |
| 1 | |
| 2 | PROC CASUTIL; |
| 3 | load |
| 4 | DATA=work.patienten_daten outcaslib='casuser' casout='PATIENTEN_DATEN' replace; |
| 5 | RUN; |
| 6 |
| 1 | PROC CAS; |
| 2 | bayesianNetClassifier.bnet / |
| 3 | TABLE={caslib='casuser', name='PATIENTEN_DATEN'}, |
| 4 | target='wiedereinweisung_30t', |
| 5 | inputs={'alter', 'geschlecht', 'blutdruck_systolisch', 'raucherstatus'}, |
| 6 | nominals={'geschlecht', 'raucherstatus', 'wiedereinweisung_30t'}, |
| 7 | missingInt='IMPUTE', |
| 8 | missingNom='LEVEL', |
| 9 | structures={'MB'}, |
| 10 | OUTPUT={casout={caslib='casuser', name='patienten_vorhersage', replace=true}, copyvars={'patient_id'}}, |
| 11 | outNetwork={caslib='casuser', name='bnet_patienten_netzwerk', replace=true}; |
| 12 | RUN; |
| 1 | PROC CAS; |
| 2 | TABLE.fetch / TABLE={caslib='casuser', name='patienten_vorhersage'}; |
| 3 | TABLE.numRows / TABLE={caslib='casuser', name='patienten_vorhersage'}; |
| 4 | TABLE.numRows / TABLE={caslib='casuser', name='PATIENTEN_DATEN'}; |
| 5 | RUN; |
Die Aktion wird ohne Fehler ausgeführt. Die Ausgabetabelle 'patienten_vorhersage' enthält die gleiche Anzahl von Zeilen wie die Eingabetabelle 'PATIENTEN_DATEN', was zeigt, dass die Beobachtungen mit fehlenden Werten nicht verworfen, sondern wie angegeben verarbeitet wurden. Das Modell hat gelernt, fehlende Werte als Information zu nutzen.