MINERVA/Python 2026. 2. 3. 11:49
반응형

데이타 관점에서 정의하면 NaN은 '빈칸(결측치)' 또는 '값이 없다'를 의미한다. 이 내용을 시각적으로 정의하면, 엑셀 cell이 하얗게 비여 있는 상태를 의미한다.

 

1. NaN(Not a Number)

1.1 왜? 이것을 '빈칸'이라고 하지 않지 않고, NaN이라고 할까?

제 짐작으로는 프로그래밍 언어의 데이타 타입에 따라 다르게 인식하기 때문일듯하다.

1) 숫자 상태에서 빈칸: NaN(float로 취급)

2) 객체 상태에서 빈칸: None 

3) 문자열에서 빈칸:""(Empty String, 이건 내용이 없는것이지 NaN이 아니다!)

위와 같이 데이타 타입에 따라 의미하는 바가 다르기때문에 NaN이라는 것을 만들어 낸듯하다.

 

1.2. NaN의 특징

1) 연상 불능: NaN에 숫자를 더하거나 곱해도 무조건 NaN이 됨

2) 자기 자신 비교 불가

- if NaN == NaN 은 언제나 False이다.그래서, df == np.nan 대신 반드시 df.isna()를 사용해야함

 

2. inf(Infinity:무한대)

- 단순히 '엄청나게 큰 수'가 아닌, 계산이 불가능할 정도로 커진 상태 의미

- 수학에서 말하는 무한대 개념을 컴퓨터에 적용하기 위해서 만들어 냄

 

2.1 언제 발생

- 숫자를 0으로 나눌때 발생

print(10 / 0)        # 일반 파이썬에선 ZeroDivisionError 발생

print(np.array([10]) / 0)  # 넘파이/판다스에선 [inf] 발생

- 양의 무한대 (inf): $10 / 0$ 처럼 양수를 0으로 나눴을 때

- 음의 무한대 (-inf): $-10 / 0$ 처럼 음수를 0으로 나눴을 때

 

2.2 inf 특징

1) 전염성: inf에 어떤 숫자를 더하거나 곱해도 결과 inf

2) 통계 파괴자: 이게 제일 중요함

데이터에 inf가 단 하나라도 섞여 있으면, 해당 컬럼의 평균(mean) 또는 합계(sum)를 구했을 때 결과가 무조건 inf로 나옵니다. 
분석 데이터가 통째로 망가짐

 

3. NaN vs Inf

  NaN Inf
의미 데이터가 없음 (빈칸) 숫자가 너무 커서 측정 불가 (무한대)
발생 원인 데이터 누락, 잘못된 연산 (0/0) 0으로 나누기, 지수 함수 폭발 등
데이타 타입 실수형(float) 실수형(float)

 

4. 실무적인 작업

판다스의 많은 기능(fillna, dropna 등)은 기본적으로 NaN을 기준으로 설계되어 있음. 그래서, inf를 NaN으로 먼저 바꿔놓아야 함.

그렇지 않으면 데이타가 망가짐

(실무예)

df = df.replace([np.inf, -np.inf, 'inf', '-inf'], np.nan)

"무한대(inf)라는 계산 불가능한 값들을 일단 '비어있는 칸(NaN)'으로 만들어버리자. 그러면 나중에 한꺼번에 0으로 채우든 지우든 처리하기 편하니까!"

 

 

 

 

반응형
posted by choiwonwoo
:
MINERVA/Python 2025. 10. 2. 17:16
반응형

오늘 그동안 우연히(?) 그것도 오랫동안 잘 동작하는 코드에 문제가 생겨서, 하루 종일 고생을 해서 내용을 정리함.

 

 

1. 기존방식: (\d{6})

pattern_a = re.compile(rf"{file_key}_(\d{6})_(\d{6})\.xlsx")

- 정상적으로 동작하다가 에러가 발생

- 에러: {6} 는 f-string 문법에서 "변수를 포맷팅할 때 쓰는 중괄호"로 인식  -> 그동안 어떻게 동작했지?

- 에러 원인: 추측하기로는 파이썬이 이걸 f-string의 포맷팅 구문으로 보려고 하다가, 6은 변수도 아니고 포맷 명세도 아닌데 그냥 "6"으로 인식해서 에러가 발생함(구글링을 해보니, 보통은 잘된다고 나옴 ㅠㅠㅠ)

- 해결 아래와 같이 안전한 방식으로 하는게 최고임

 

2. 개선방식: (\d{{6}})

pattern_b = re.compile(rf"{file_key}_(\d{{6}})_(\d{{6}})\.xlsx")

- {{ 와 }} 는 f-string에서 중괄호 이스케이프이기때문, f-string이 해석할 때 {{6}} → 문자열 "{6}" 으로 변환됨

- 안전한 방식으로 하자

 

3. 결론

- 정규식에 {n} 패턴을 쓸 때는 f-string 안에서는 반드시 {{n}} 로 써야함.

반응형
posted by choiwonwoo
:
AI 2025. 4. 23. 17:32
반응형

 

다양한 AI 서비스가 나오면서, 각각의 서비스는 자기들의 매개변수(파라미터)를 자랑하듯이 발표하고 있습니다.

마치 '파라미터(prameter)' 개수가 많을 수록 똑똑하다고 말하는 듯이 자랑합니다.

 

간단하게 각 서비스의 '파라미터(prameter)' 개수를 보면 아래와 같습니다.

1. GPT-3 : 1750억개

2. GPT-4: 1조 8천억개

3. Gemini Ultra: 1조~1조 5천억개

4. ResNet-50: 2560만개

 

'파라미터(prameter)' 개수 많을 수록 절대적으로 똑똑하지는 않겠지만, 똑똑할 확률이 높다고 봐도 될 듯합니다.

 

그럼, 이제 기본적인 '파라미터(prameter)' 에 대해서 정리하겠습니다.

 

AI 모델에서 말하는 '파라미터(prameter)'란?
- AI 모델이 학습을 통해 얻게된 지식
- 즉, 반복적으로 데이터를 학습하면서, 예측과 정답의 차이를 줄이도록 점점 업데이트하면서 얻는 값!

AI 모델에서 '학습'이란?
- 파라미터(prameter)를 얻는 과정을 의미
- 파라미터(prameter)가 더 좋은 예측, 결과를 낼수 있게 조정하는 과정을 의미
- 이것을 이과적으로 설명하면, 
예측을 위해, 딥러닝 모델은 수많은 수학적인 연산을 통해 입력데이타를 처리하고 결과를 만들어내게 됨
이때 사용하는 **가중치(weight)**와 편향(bias) 같은 값들이 바로 파라미터임.
- 예: y = wx + b
여기서 w(가중치)와 b(편향)이 파라미터야.
모델이 학습하면서 w랑 b의 값을 조금씩 바꿔가며 결과가 얼마나 좋은지 확인하고, 다시 수정하고… 이 과정을 반복!

다시 정리하면, 파라미터(prameter)는 데이터를 반복적으로 보면서, 예측과 정답의 차이를 줄이도록 점점 업데이트하면서 얻는 값, 즉 AI 모델이 학습을 통해서 얻게 된 지식을 의미함!!!!

 

 

 

 

반응형
posted by choiwonwoo
: