AutoEnceoder를 사용하여 예외 감지를 시도했습니다.


학습표 데이터의 이상 검출을 위해 아래 사이트의 코드를 시도해 봤습니다.
데이터 집합은kaggle의 심전도 데이터를 사용합니다.
https://www.kaggle.com/shayanfazeli/heartbeat?select=ptbdb_normal.csv
AutoEnocder에서 PTB 진단 ECG 데이터베이스의 정상 데이터를 학습하여 정상 데이터와 이상 데이터의 이상 점수를 계산하여 비교합니다.
데이터 세트의 상세한 상황은 이쪽을 보십시오.
https://note.com/mucun_wuxian/n/n0e5c00491341
Colab에서 실행되는 코드는 여기.입니다.
데이터 세트가 Google Drive에 업로드되어 실행되고 있습니다.
또 신경 네트워크에 익숙하지 않은 사람이기 때문에 이상한 점이 있다면 부드럽게 지적해 주시면 감사하겠습니다.

참고 사이트에서 온 코드 변경점


코드는 참고 사이트에서 유용한 것으로 자세한 내용은 참고 사이트(재등재)나 Colab의 데이터를 참조하십시오.
https://tips-memo.com/python-ae
이 밖에 사용된 데이터 집합의 열수 188에 따라 네트워크의 층수를 변경하여 한 층을 증가시켰다.
class AutoEncoder(nn.Module):
    def __init__(self):
        super(AutoEncoder, self).__init__()
        self.dense_enc1 = nn.Linear(188*20, 1024)
        self.bn1 = nn.BatchNorm1d(1024)
        self.dense_enc2 = nn.Linear(1024, 512)
        self.bn2 = nn.BatchNorm1d(512)
        self.dense_enc3 = nn.Linear(512, 256)
        self.bn3 = nn.BatchNorm1d(256)
        self.dense_enc4 = nn.Linear(256,128)
    
        self.dense_dec1 = nn.Linear(128,256)
        self.bn4 = nn.BatchNorm1d(256)
        self.dense_dec2 = nn.Linear(256, 512)
        self.bn5 = nn.BatchNorm1d(512)
        self.dense_dec3 = nn.Linear(512, 1024)
        self.bn6 = nn.BatchNorm1d(1024)
        self.drop1 = nn.Dropout(p=0.2)
        self.dense_dec4 = nn.Linear(1024, 188*20)

# 以下略

데이터 사용


일반 데이터는 ptbdbnormal.csv 사용 중입니다.
또한 아래 도표는 심전도 5개를 1개의 도표에 표시한다(이상 데이터도 마찬가지).
또 6할은 학습용 데이터, 4할은 평가용 데이터다.
正常データ
이상 데이터는 ptbdb입니다abnormal.csv 사용 중입니다.
異常データ

이상 득점


正常データの異常スコア
걱정은 적지만 정상 데이터의 이상 점수는 약 0.01이다.
異常データの異常スコア
이상 데이터의 이상 점수는 0.03~0.05로 정상 데이터보다 높다.
0.02~0.03을 한도값으로 설정하면 이상을 검출할 수 있습니다.

기타


Azure의 이상 검출 서비스Anomaly DetectorAmazon Lookout for Metrics도 마음에 걸려서 조만간 해보고 싶어요.
또 이상 검출을 공부할 때 아래의 책을 읽었다.
기계 학습과 통계적 생각과 시간 서열 분석의 생각이 상세하게 해설되었다.
https://www.amazon.co.jp/dp/B08WZ1ZBHG/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1
이상은 끝까지 읽어주셔서 감사합니다.

좋은 웹페이지 즐겨찾기