파이썬 decision tree dropna() 사용 질문입니다 고수분들 환영입니다 !!

조회수 540회

파이썬에서 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를 값을 구할 때 제가 이해하는 개념은 featurevals[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('=========')
    
    • 결과

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)