인프런 커뮤니티 질문&답변

이건희님의 프로필 이미지
이건희

작성한 질문수

처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]

Binary Classfication 딥러닝 적용해보기 (URL Phishing Kaggle 문제)

마지막에 confusion matrix 작성할때

작성

·

56

0

/usr/local/lib/python3.10/dist-packages/sklearn/utils/validation.py in check_consistent_length(*arrays)
    405     uniques = np.unique(lengths)
    406     if len(uniques) > 1:
--> 407         raise ValueError(
    408             "Found input variables with inconsistent numbers of samples: %r"
    409             % [int(l) for l in lengths]

ValueError: Found input variables with inconsistent numbers of samples: [2286, 238]


수업 내용대로 했는데 이러한 에러가 나오네요.. 그대로 코드로 작성했는데요. 샘플 수가 안맞는건가요.

답변 1

0

안녕하세요. 답변 도우미입니다.

네 맞습니다. 완전히 동일한 것인지, 데이터가 다른 것인지 문의하신 부분으로는 알기는 어렵긴 한데요. 가볍게 다음 내용 참고해보시면 도움이 되실 것 같습니다.

이 오류는 Confusion Matrix를 계산할 때, 예측값(predictions)과 실제 라벨(labels)의 샘플 수가 일치하지 않아서 발생한 문제입니다. 에러 메시지에 따르면, 두 배열의 샘플 수가 [2286, 238]로 다르다는 것을 알 수 있습니다.

### 가능한 원인

1. Batch 처리 문제: 학습 시 데이터셋이 배치로 나뉘어 처리되었고, 마지막 배치에서 크기가 달라졌을 가능성이 있습니다.

2. 모델 예측과 실제 라벨의 불일치: 모델의 예측값이 전체 테스트 데이터와 일치하지 않을 수 있습니다. 이는 예측을 할 때 일부 데이터가 누락되거나, 예측값이 잘못 처리된 경우일 수 있습니다.

### 해결 방법

1. 모델의 예측값과 실제 라벨의 크기 확인: predictionslabels 배열의 크기를 확인하여 동일한지 확인합니다. 이를 통해 어디에서 문제가 발생했는지 파악할 수 있습니다.

```python

print(f"Predictions shape: {predictions.shape}")

print(f"Labels shape: {labels.shape}")

```

2. 데이터 로더 확인: DataLoader를 사용하여 데이터를 배치로 나눌 때, 마지막 배치 크기가 작아지는 경우가 발생할 수 있습니다. 이를 방지하기 위해 drop_last=True 옵션을 사용하여 마지막 배치를 제거할 수 있습니다.

```python

data_loader = DataLoader(dataset, batch_size=batch_size, shuffle=True, drop_last=True)

```

3. Confusion Matrix 계산: 예측값과 실제 라벨의 크기가 일치하는지 확인한 후 Confusion Matrix를 계산해야 합니다.

### 예시 코드

```python

# 모델 예측

outputs = model(inputs)

_, predictions = torch.max(outputs, 1)

# 실제 라벨

labels = labels

# 예측값과 실제 라벨의 크기 확인

print(f"Predictions shape: {predictions.shape}") # 예: torch.Size([2286])

print(f"Labels shape: {labels.shape}") # 예: torch.Size([238])

# 만약 크기가 다르면 문제가 발생한 부분을 찾아 수정해야 합니다.

# Confusion Matrix 계산

from sklearn.metrics import confusion_matrix

cm = confusion_matrix(labels.cpu().numpy(), predictions.cpu().numpy())

```

이와 같이 데이터를 정확하게 처리하고 예측값과 실제 라벨의 크기를 맞추는 것이 중요합니다. 이를 통해 Confusion Matrix를 문제없이 계산할 수 있습니다.

감사합니다.

잔재미코딩 드림

이건희님의 프로필 이미지
이건희

작성한 질문수

질문하기