Machine Learning-workflows ontwerpen in Python
Dr. Chris Anagnostopoulos
Honorary Associate Professor
Class AGE SEX STEROID ...
0 2.0 50.0 2.0 1.0 ...
1 2.0 40.0 1.0 1.0 ...
...
label sequence
0 VIRUS AVTVVPDPTCCGTLSFKVPKDAKKGKHLGTFDIRQAIMDYGGLHSQ...
1 IMMUNE SYSTEM QVQLQQPGAELVKPGASVKLSCKASGYTFTSYWMHWVKQRPGRGLE...
2 IMMUNE SYSTEM QAVVTQESALTTSPGETVTLTCRSSTGAVTTSNYANWVQEKPDHLF...
3 VIRUS MSQVTEQSVRFQTALASIKLIQASAVLDLTEDDFDFLTSNKVWIAT...
...
Kunnen we een detector bouwen die virussen als afwijkend markeert in deze data?
import stringdist
stringdist.levenshtein('abc', 'acc')
1
stringdist.levenshtein('acc', 'cce')
2
label sequence
169 IMMUNE SYSTEM ILSALVGIV
170 IMMUNE SYSTEM ILSALVGIL
stringdist.levenshtein('ILSALVGIV', 'ILSALVGIL')
1
# Dit werkt niet
pdist(proteins['sequence'].iloc[:3], metric=stringdist.levenshtein)
Traceback (most recent call last):
ValueError: A 2-dimensional array must be passed.
sequences = np.array(proteins['sequence'].iloc[:3]).reshape(-1,1)# Dit werkt om een andere reden niet pdist(sequences, metric=stringdist.levenshtein)
Traceback (most recent call last):
TypeError: argument 1 must be str, not numpy.ndarray
# Deze werkt wel!! def my_levenshtein(x, y): return stringdist.levenshtein(x[0], y[0])pdist(sequences, metric=my_levenshtein)
array([136., 2., 136.])
# Dit duurt 2 minuten voor ~1000 voorbeelden
M = pdist(sequences, my_levenshtein)
LoF-detector met een vooraf berekende afstandsmatrix:
# Dit duurt 3 seconden
detector = lof(metric='precomputed', contamination=0.1)
preds = detector.fit_predict(M)
roc_auc_score(proteins['label'] == 'VIRUS', preds == -1)
0.64
Machine Learning-workflows ontwerpen in Python