2023. 6. 19. 18:35ㆍpython
Decision tree를 배웠다.
Decision Tree(의사결정 트리)는 데이터를 분류하거나 예측하기 위한 지도 학습 알고리즘이다. 이 알고리즘은 트리 구조를 사용하여 데이터를 분할하고 판단 규칙을 만들어 내는 방식이다.
이 트리는 데이터의 특성을 기반으로 하여 노드(node)라고 불리는 분기점들을 생성하고, 각 노드는 특정한 조건을 통해 데이터를 분할한다. 분할은 정보 이득(information gain), 지니 불순도(gini impurity), 분산 감소(variance reduction) 등의 지표를 사용하여 이루어진다.
log 할 줄을 몰라서 좀 헤맸다. 밑이 있고 log를 어떻게 사용하는지 등을 몰랐다. 이제는 앎.
import numpy as np
# 로그를 계산할 값.
x = 10
# 자연로그 계산 (밑이 e)
result = np.log(x)
print("자연로그:", result)
Entropy에 대한 개념.
물리적 엔트로피는 열역학에서 사용되는 개념으로, 시스템의 무질서 정도를 측정하는 값이다.. 엔트로피가 높을수록 시스템은 더 큰 무질서 상태에 가깝다고 말할 수 있다. 엔트로피는 분자의 움직임, 에너지 분배, 입자의 배치 등 시스템의 상태에 따라 달라지는데 예를 들어, 고체 상태의 물질은 분자들이 잘 정렬되어 있어 엔트로피가 낮지만, 액체나 기체 상태로 변하면 분자들의 움직임이 자유로워져 엔트로피가 더 높아진다.
정보 이론에서 사용되는 엔트로피는 메시지나 데이터의 불확실성이나 예측 가능성을 나타내는 지표이다. 엔트로피가 높을수록 정보의 불확실성이 커지고, 엔트로피가 낮을수록 정보의 불확실성이 작아진다. 예를 들어, 동전을 한 번 던져서 앞면 또는 뒷면이 나올 때의 엔트로피는 가장 높다. 반면, 동전이 고정된 상태로 앞면만 나올 때의 엔트로피는 0에 가깝다.
둘 모두 불확실성이나무질서에 관련된 개념이라는것이 공통점이여서 이 것을 생각하면 된다.
# H = -Σ(p * log2(p))
#
# H: 엔트로피 (Entropy)
# p: 각 사건이 발생할 확률
# log2: 밑이 2인 로그 (정보량을 비트 단위로 표현하기 위함)
result1 = -12/12*np.log2(12/12)
print(result1)
result2 = (-9/12*np.log2(9/12))+(-3/12*np.log2(3/12))
print(result2)
result3 = (-6/12*np.log2(6/12))+(-6/12*np.log2(6/12))
print(result3)
result4 = (-6/12*np.log2(6/12))+(-3/12*np.log2(3/12))+(-3/12*np.log2(3/12))
print(result4)
result5 = (-4/12*np.log2(4/12))*3
print(result5)
result6 = (-1/12*np.log2(1/12))*12
print(result6)
엔트로피 공식에 대한 것을 잘 알고 계산하자.
가중치(Weight) : 각 데이터 포인트에 대한 중요도. 총 데이터 중에 몇 개가 들어가있는지를 계산한다.
rint('Weight Start')
print('--------------------------')
# 가중치 * 엔트로피
n1 = 2/10*1
n2 = 5/10*0.971
n3 = 3/10*0.919
print(n1+n2+n3)
#정보 획득량(information gain)
print('--------------------------')
print('Information Gain Start')
# 현재 노드의 엔트로피를 계산.
# 각 속성에 대해 분할 후의 엔트로피를 계산.
# 분할 후의 엔트로피의 가중 평균을 계산.
# 현재 노드의 엔트로피 - 가중 평균된 분할 후 엔트로피
#1. 엔트로피 구하기.
print('--suspicious start---')
suspicious = -3/6*np.log2(3/6)*2
print(suspicious)
spam_node = -3/3*np.log2(3/3)
print(spam_node)
#가중치 * 엔트로피
spam_weight_entropy = 3/6*spam_node
ham_node = -3/3*np.log2(3/3)
print(ham_node)
#가중치 * 엔트로피
ham_weight_entropy = 3/6*ham_node
#분기 이후 엔트로피
rem=ham_weight_entropy+spam_weight_entropy
information_gain = suspicious-rem
print(information_gain)
print('---Unknown Sender Start---')
unknown_sender = -3/6*np.log2(3/6)*2
print(unknown_sender)
spam_node = (-2/3*np.log2(2/3)) + (-1/3*np.log2(1/3))
print(spam_node)
#가중치 * 엔트로피
spam_weight_entropy = 3/6*spam_node
ham_node = (-1/3*np.log2(1/3)) + (-2/3*np.log2(2/3))
print(ham_node)
#가중치 * 엔트로피
ham_weight_entropy = 3/6*ham_node
#분기 이후 엔트로피
rem=ham_weight_entropy+spam_weight_entropy
information_gain = unknown_sender-rem
print('information_gain: ',information_gain)
'python' 카테고리의 다른 글
머신러닝 용어, 기본 개념. 학습데이터? 테스트 데이터? 머신러닝 계의 Hello World인 붓꽃(load_iris) 연습하기. (0) | 2023.06.25 |
---|---|
경기도미래기술학교 AI개발자 부트캠프 30일차 TIL- Decision Tree의 한계. ratio와 지니인덱스 (0) | 2023.06.20 |
경기도미래기술학교 AI개발자 부트캠프 28일차 TIL-파이썬으로 하는 벡터공부 계속. Mean subtraction 하는 이유, 편차 만들기, 분산, 표준편차 등. (0) | 2023.06.16 |
경기도미래기술학교 AI개발자 부트캠프 27일차 TIL- 벡터 공부 (0) | 2023.06.15 |
코딩테스트. 백준허브 연결하기. (0) | 2023.06.13 |