파이썬 decision tree dropna() 사용 질문입니다 고수분들 환영입니다 !!
조회수 541회
파이썬에서 decision tree를 구축할 때 있어서 weighted_memory를 구해야되는데
그 과정에서 entropy 값을 구하는 코드가 이해가 안되서 질문 올립니다.
Weighted_Entropy = np.sum([(counts[i] / np.sum(counts))
* entropy(data.where(data[feature] == vals[i]).dropna()[class]) \
for i in range(len(vals))])
에서 entropy를 값을 구할 때 제가 이해하는 개념은 feature
가 vals[i]
일때 각 class가 각 class일 확률들을 모두 더한 값을 entropy 값이라고 이해하고 있습니다.
제가 이해한 개념은 맞다고 생각하는데 여기서 왜 dropna()
를 사용했고, 바로 뒤에 class가 붙는게 무슨의미인지 문법적으로도 이해가 잘 가지않고 코드상에서의 이해도 잘 되지 않습니다. 제가 이해한 개념이 틀리다면 틀린 것도 지적 환영합니다.
이에 대해서 잘 아시는 분이 계시다면 설명 부탁드리겠습니다!
1 답변
-
data.where(data[feature] == vals[i])
에서data.where
함수는 조건이 참일 때data
내의 조건에 부합하는 곳의 데이터는 그대로 두고, 조건이 거짓인 부분의 데이터를NaN
으로 반환합니다. 그래서data.where(data[feature] == vals[i])
에 의해 반환된 전체 데이터 중에서NaN
부분을 제거하기 위해서.draopna()
를 사용한 것이구요. 뒤에 있는[class]
는 반환되는 데이터가 여러 칼럼을 가지고 있기 때문에 그중에서[class]
칼럼만 지적해서 그 칼럼만 가지고 온 것입니다.아래 코드와 결과를 참고하시면 이해하실 수 있을 거에요.
- 코드
# -*- coding: utf-8 -*- import pandas as pd A=[[101,'a','z'],[102,'b','y'],[103,'c','x'],[104,'d','w']] data=pd.DataFrame(A) data.columns=['number','class','school'] print('=========') print(data) print('=========') print(data.where(data['number']==101)) print('=========') print(data.where(data['number']==101).dropna()) print('=========') print(data.where(data['number']==101).dropna()['class']) print('=========')
- 결과
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력