카테고리 없음

Python/Scikit-learn의 'ValueError: Input contains NaN, infinity or a value too large for dtype('float64').' 오류 해결 가이드

Fixlog 노트 2025. 6. 23. 13:00
반응형
SMALL

Python/Scikit-learn의 'ValueError: Input contains NaN, infinity or a value too large for dtype('float64').' 오류 해결 가이드

안녕하세요, 개발자 여러분. 이번 포스트에서는 Python의 Scikit-learn 라이브러리를 사용할 때 자주 접할 수 있는 오류 중 하나인 ValueError: Input contains NaN, infinity or a value too large for dtype('float64').에 대해 다뤄보겠습니다. 이 오류는 주로 데이터 전처리 단계에서 발생하며, 이를 해결하기 위한 방법을 알아보겠습니다.

오류 메시지 소개

Scikit-learn을 사용하여 머신러닝 모델을 학습시키거나, 예측을 수행할 때 다음과 같은 오류 메시지를 볼 수 있습니다:

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

이 오류는 주로 입력 데이터에 NaN(결측값)이나 무한대 값, 또는 너무 큰 값이 포함되어 있을 때 발생합니다. 이 문제는 모델의 학습이나 예측을 방해하기 때문에 필수적으로 해결해야 합니다.

발생 원인

이 오류는 주로 다음과 같은 이유로 발생합니다:

  • NaN 값: 데이터셋에 결측값이 포함되어 있을 경우 발생할 수 있습니다.
  • 무한대 값: 데이터 전처리 과정에서 무한대 값이 생성될 수 있습니다. 예를 들어, 로그 변환 시 0을 취급할 때 발생할 수 있습니다.
  • 너무 큰 값: 데이터 값이 너무 커서 float64 데이터 타입의 범위를 초과하는 경우도 있습니다.

해결 방법

이 문제를 해결하는 방법은 여러 가지가 있습니다. 아래에서는 가장 일반적인 해결 방법을 소개합니다:

  • NaN 값 처리: NaN 값을 처리하는 가장 일반적인 방법은 이를 평균값이나 중앙값으로 대체하거나, NaN을 포함하는 행 또는 열을 제거하는 것입니다.
  • 무한대 값 처리: 무한대 값을 적절한 값으로 대체하거나, 무한대를 포함하는 데이터 포인트를 제거합니다.
  • 값 범위 조정: 값이 너무 커서 문제가 된다면, 스케일링 기법(예: MinMaxScaler, StandardScaler)을 사용하여 데이터를 조정할 수 있습니다.

코드 예제

아래는 NaN 값을 처리하고, 무한대 값을 적절히 대체하는 방법을 보여주는 코드 예제입니다:

import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import MinMaxScaler

# 예제 데이터 생성
X = np.array([[np.nan, 2, np.inf], [6, np.nan, 5], [7, 8, 9]])

# NaN 값 대체를 위한 SimpleImputer 사용
imputer = SimpleImputer(strategy='mean')
X_imputed = imputer.fit_transform(X)

# 무한대 값 처리
X_imputed[np.isinf(X_imputed)] = 0  # 필요에 따라 다른 값으로 대체 가능

# 값 범위 조정을 위한 MinMaxScaler 사용
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X_imputed)

print("전처리된 데이터:")
print(X_scaled)

위 코드에서는 SimpleImputer를 사용하여 NaN 값을 평균값으로 대체하고, 무한대 값을 0으로 대체한 뒤, MinMaxScaler를 사용해 데이터를 0과 1 사이로 스케일링했습니다. 이를 통해 Scikit-learn의 모델이 오류 없이 데이터를 처리할 수 있게 됩니다.

결론

이번 포스트에서는 Python의 Scikit-learn에서 발생할 수 있는 'ValueError: Input contains NaN, infinity or a value too large for dtype('float64').' 오류의 원인과 해결 방법에 대해 알아보았습니다. 데이터 전처리는 머신러닝 파이프라인에서 매우 중요한 단계이므로, 오류가 발생했을 때 차분히 원인을 분석하고 적절한 해결 방법을 적용하는 것이 중요합니다. 다음에도 더욱 유익한 Python/Scikit-learn 관련 팁과 해결 방법으로 찾아뵙겠습니다. 감사합니다.

📚 함께 읽으면 좋은 글

1

Python/Scikit-learn: 'ValueError: Input contains NaN, infinity or a value too large for dtype('float64').' 오류 해결하기

📂 python/scikit-learn 오류 해결 📅 2025. 6. 19. 🎯 python/scikit-learn 오류
2

scikit-learn ImportError: DLL load failed 오류 해결하기

📂 python/scikit-learn 오류 해결 📅 2025. 6. 19. 🎯 python/scikit-learn 오류
3

Python/Scikit-learn 오류: 'ValueError: could not convert string to float' 해결하기

📂 python/scikit-learn 오류 해결 📅 2025. 6. 13. 🎯 python/scikit-learn 오류
4

R 오류 해결: 'Error in library(dplyr): there is no package called 'dplyr''

📂 r 오류 해결 📅 2025. 6. 21. 🎯 r 오류
5

R에서 자주 발생하는 'object not found' 오류 해결하기

📂 r 오류 해결 📅 2025. 6. 19. 🎯 r 오류

💡 위 글들을 통해 더 깊이 있는 정보를 얻어보세요!

📢 이 글이 도움되셨나요? 공유해주세요!

여러분의 공유 한 번이 더 많은 사람들에게 도움이 됩니다 ✨

🔥 공유할 때마다 블로그 성장에 큰 힘이 됩니다! 감사합니다 🙏

💬 여러분의 소중한 의견을 들려주세요!

python/scikit-learn 오류에 대한 여러분만의 경험이나 노하우가 있으시나요?

💡
유용한 정보 공유
궁금한 점 질문
🤝
경험담 나누기
👍
의견 표현하기

⭐ 모든 댓글은 24시간 내에 답변드리며, 여러분의 의견이 다른 독자들에게 큰 도움이 됩니다!
🎯 건설적인 의견과 경험 공유를 환영합니다 ✨

🔔 블로그 구독하고 최신 글을 받아보세요!

📚
다양한 주제
17개 카테고리
정기 업데이트
하루 3회 발행
🎯
실용적 정보
바로 적용 가능
💡
최신 트렌드
2025년 기준

🌟 python/scikit-learn 오류 해결부터 다양한 실생활 정보까지!
매일 새로운 유용한 콘텐츠를 만나보세요 ✨

📧 RSS 구독 | 🔖 북마크 추가 | 📱 모바일 앱 알림 설정
지금 구독하고 놓치는 정보 없이 업데이트 받아보세요!

반응형
LIST