작성
·
261
0
당뇨병 문제에서 직접 이상치 제거하는 게 손실 함수 줄이는데 도움이 될거라고 생각했는데 오히려 너무 커져버려서 왜 그런 건지 궁금합니다. 또 직접 제거하는 방식 말고 다르게 이상치 탐지하는 게 딥러닝에는 따로 있나요?
답변 3
0
안녕하세요. 답변 도우미입니다.
말씀하신대로, 실수가 있었습니다. 죄송합니다. 다음과 같이 업데이트된 코드와 상세 설명을 넣었습니다.
핵심은 기존 코드 diabetes_data.data[:, [-1]] 은 타겟 변수값이 마지막 특성 열이라고 가정하였는데, load_diabetes() 함수에서 로드된 데이터는 diabetes_data.data에 특성(features)을 포함하고 있으며, diabetes_data.target에 타겟 변수를 포함하고 있습니다. diabetes_data.data[:, [-1]] 은 타겟 변수값이 마지막 특성 열이라고 가정하고 코드를 작성한 부분에서 실수가 있어서, 자료와 상세 설명을 업데이트하였습니다.
# diabetes_data.target에 타겟 변수를 포함하고 있습니다
import numpy as np
import pandas as pd
from sklearn.datasets import load_diabetes
diabetes_data = load_diabetes()
# 데이터 세트에 대한 전체 설명
print (diabetes_data.DESCR)
x = torch.from_numpy(np.array(diabetes_data.data[:, :-1], dtype=np.float32))
# y = torch.from_numpy(np.array(diabetes_data.data[:, [-1]], dtype=np.float32))
# 2024 업데이트:
# load_diabetes() 함수에서 로드된 데이터는 diabetes_data.data에 특성(features)을 포함하고 있으며,
# diabetes_data.target에 타겟 변수를 포함하고 있습니다
# 기존 코드 diabetes_data.data[:, [-1]] 은 타겟 변수값이 마지막 특성 열이라고 가정하였는데, 이 부분에 실수가 있었습니다.
# diabetes_data.target 타겟은 벡터이므로, 이를 열 벡터로 재형성하기 위해 reshape(-1, 1) 코드까지 추가하였습니다.
y = torch.from_numpy(np.array(diabetes_data.target, dtype=np.float32).reshape(-1, 1))
#shape
print('shape of x is : ',x.shape)
print('shape of y is : ',y.shape)
0
선생님 y[1] 이 -0.0922 나오는 것부터 틀린 거 아닌가요?
타겟 대신 s6가 들어가서 오차가 낮게 잡힌 거 같습니다.
제대로 손실 함수 계산하면 2800대 나오는 거 맞는 지 확인 부탁드립니다.
0
안녕하세요, 인프런 AI 인턴입니다.
황민섭님, 딥러닝 모델의 손실 함수의 값이 이상치를 제거했을 때 오히려 증가하는 현상은 여러 가지 원인으로 인해 발생할 수 있습니다. 우선적으로, 이상치의 제거가 훈련 데이터에서 중요한 정보를 손실시키고, 모델이 데이터의 일반적인 패턴을 학습하는 데 방해가 되었을 수 있습니다. 또한, 이상치가 제거된 후의 데이터 분포가 모델의 성능을 최적화하는데 부적합할 수도 있습니다.
딥러닝에서 이상치를 탐지하고 처리하는 방법은 여러 가지가 있습니다. 데이터를 전처리하는 과정에서 이상치를 제거하거나, 이상치의 영향을 최소화하는 robust한 손실 함수를 사용하는 것입니다. 또한, 이상치 탐지 알고리즘을 적용하여 데이터 포인트들이 주어진 문맥에서 얼마나 비정상적인지를 평가할 수 있고, 오토인코더(autoencoder)를 사용한 비지도 학습 방법으로 이상치를 식별하는 방법도 있습니다.
각 방식은 사용하고자 하는 데이터와 모델의 특성에 따라 달리 적용될 수 있으므로, 문제의 맥락을 고려하여 최적의 방법을 선택해야 합니다. 실험을 반복하면서 데이터의 특성과 모델의 동작에 대해 더 깊이 이해할 수 있습니다.