Python 기계 학습 알고리즘 의 결정 트 리 알고리즘 의 실현 과 장단 점
결정 트 리 알고리즘 은 이미 알 고 있 는 각종 상황 발생 확률 을 바탕 으로 결정 트 리 를 구성 하여 순 현 가 치 를 구 하 는 기대 치가 0 과 같은 확률 보다 크 고 프로젝트 위험 을 평가 하 며 타당 성 을 판단 하 는 결정 분석 방법 이다.
분류 알고리즘 은 훈련 샘플 집합 을 이용 하여 분류 함수 즉 분류 모델(분류 기)을 얻어 데이터 가 집 중 된 샘플 을 각 유형 으로 나 누 는 것 을 실현 한다.분류 모델 은 훈련 샘플 중 속성 집합 과 유형 간 의 잠재 적 관 계 를 학습 하고 이 를 근거 로 새로운 샘플 이 어떤 유형 에 속 하 는 지 예측한다.
결정 트 리 알고리즘 은 확률 분석 을 직관 적 으로 활용 하 는 도해 법 으로 매우 자주 사용 하 는 분류 방법 으로 감독 학습 에 속한다.
결정 트 리 는 일종 의 트 리 구조 로 그 중에서 모든 내부 결점 은 하나의 속성 에 대한 테스트 를 나타 내 고 모든 지점 은 하나의 테스트 출력 을 대표 하 며 모든 잎 결점 은 하나의 유형 을 대표 한다.
결정 트 리 학습 은 사례 를 바탕 으로 하 는 귀납 학습 으로 위 에서 아래로 재 귀 하 는 방법 을 사용한다.그의 기본 사상 은 정보 엔트로피 를 도량형 으로 엔트로피 값 이 가장 빨리 떨 어 지 는 나 무 를 구성 하고 잎 결점 에 있 는 엔트로피 값 이 0 이 며 이때 모든 잎 노드 의 인 스 턴 스 는 같은 유형 에 속한다.
결정 트 리 학습 알고리즘 의 가장 큰 장점 은 스스로 학습 할 수 있다 는 것 이다.학습 과정 에서 사용자 가 배경 지식 을 너무 많이 이해 하지 않 고 훈련 사례 를 잘 표시 하면 학습 할 수 있다 는 것 이다.
2.알고리즘 종류
ID3 알고리즘
3.알고리즘 예시
기계 학습 에서 결정 트 리 는 예측 모델 로 대상 속성 과 대상 값 간 의 매 핑 관 계 를 대표 한다.
결정 트 리 의 목적 은 지정 한 입력 값 을 통 해 최종 출력 가치 모델 을 예측 할 수 있 도록 하 는 것 이다.
4.의사 결정 트 리 구축 예시
묘사 하 다.
분석 하 다.
계산 하 다.
결론.
5.알고리즘 구현 절차
선택 속성 은 결정 트 리 를 구축 하 는 데 매우 관건 적 인 단계 이다.선택 한 속성 은 결정 트 리 의 한 노드 가 되 고 가장 좋 은 속성 을 계속 선택 하면 최종 적 으로 결정 트 리 를 구축 할 수 있다.
데이터 세트 S 의 모든 속성 을 계산 하 는 엔트로피 H(xi)는 데이터 세트 S 에서 엔트로피 값 이 가장 작 거나 정보 이득 이 가장 크 거나 이들 등가)의 속성 을 선택 하여 결정 트 리 에서 이 속성 노드 를 생 성 합 니 다.나머지 노드 를 사용 하여 상기 절 차 를 반복 하여 결정 트 리 의 속성 노드 를 생 성 합 니 다.
6.알고리즘 관련 개념
엔트로피
1948 년 에 향 농 은'정보 엔트로피'라 는 개념 을 제 기 했 는데 엔 트로피 는 수 신 된 모든 정보 에 포 함 된 정보의 평균 양 이 고 불확실 성의 양 이지 확정 성의 양 이 아니 라 무 작위 신원 의 엔트로피 가 크기 때문이다.엔트로피 는 확률 분포 의 대수 적 반대 수로 정의 된다.
정보 엔트로피 의 공식:
정보 이득
'정보 이득'은 하나의 속성 으로 데이터 견본 을 구분 하 는 능력 을 평가 하 는 것 으로 특정한 속성 을 결정 트 리 의 뿌리 노드 로 사용 할 때 이 속성의 정보 이득 량 이 크다.결정 트 리 는 최대 화 된 정보 이득 을 선택 하여 결점 을 구분 합 니 다.
7.알고리즘 구현 코드
import numpy as np
import math
from collections import Counter
#
def create_data():
X1 = np.random.rand(50, 1)*100
X2 = np.random.rand(50, 1)*100
X3 = np.random.rand(50, 1)*100
def f(x):
return 2 if x > 70 else 1 if x > 40 else 0
y = X1 + X2 + X3
Y = y > 150
Y = Y + 0
r = map(f, X1)
X1 = list(r)
r = map(f, X2)
X2 = list(r)
r = map(f, X3)
X3 = list(r)
x = np.c_[X1, X2, X3, Y]
return x, ['courseA', 'courseB', 'courseC']
#
def calculate_info_entropy(dataset):
n = len(dataset)
# Counter Y
labels = Counter(dataset[:, -1])
entropy = 0.0
#
for k, v in labels.items():
prob = v / n
entropy -= prob * math.log(prob, 2)
return entropy
#
def split_dataset(dataset, idx):
# idx
splitData = defaultdict(list)
for data in dataset:
# idx ,
splitData[data[idx]].append(np.delete(data, idx))
return list(splitData.values()), list(splitData.keys())
#
def choose_feature_to_split(dataset):
n = len(dataset[0])-1
m = len(dataset)
#
entropy = calculate_info_entropy(dataset)
bestGain = 0.0
feature = -1
for i in range(n):
# i
split_data, _ = split_dataset(dataset, i)
new_entropy = 0.0
#
for data in split_data:
prob = len(data) / m
new_entropy += prob * calculate_info_entropy(data)
#
gain = entropy - new_entropy
if gain > bestGain:
bestGain = gain
feature = i
return feature
#
def create_decision_tree(dataset, feature_names):
dataset = np.array(dataset)
counter = Counter(dataset[:, -1])
# ,
if len(counter) == 1:
return dataset[0, -1]
# ,
if len(dataset[0]) == 1:
return counter.most_common(1)[0][0]
#
fidx = choose_feature_to_split(dataset)
fname = feature_names[fidx]
node = {fname: {}}
feature_names.remove(fname)
# ,
split_data, vals = split_dataset(dataset, fidx)
for data, val in zip(split_data, vals):
node[fname][val] = create_decision_tree(data, feature_names[:])
return node
#
def classify(node, feature_names, data):
#
key = list(node.keys())[0]
node = node[key]
idx = feature_names.index(key)
#
pred = None
for key in node:
#
if data[idx] == key:
# , ,
if isinstance(node[key], dict):
pred = classify(node[key], feature_names, data)
else:
pred = node[key]
# ,
if pred is None:
for key in node:
if not isinstance(node[key], dict):
pred = node[key]
break
return pred
8.알고리즘 장단 점장점:소 규모 데이터 세트 유효
결점.
결정 트 리 알고리즘 은 매우 전형 적 인 알고리즘 으로 훈련 과정 에서 데이터 간 의 엔트로피 와 정보 이득 을 얻 는 것 을 구분 근거 로 하고 분류 효과 가 비교적 좋다.그러나 일반적인 상황 에서 우리 의 훈련 결정 트 리 는 모두 데이터 양 이 비교적 적은 데이터 세트 에서 진행 되 는데 훈련 분류 기 가 사용 하 는 훈련 데이터 가 충분 할 때 결정 트 리 는 나무 가 너무 높 고 의합 효과 가 떨 어 지 는 등 문제 가 발생 할 수 있다.따라서 결정 트 리 를 어떻게 효율 적 이 고 정확하게 구축 하 는 지 는 모델 인식 분야 의 연구 핫 이 슈 가 되 었 다.
증분 훈련 방식 으로 의사 결정 트 리 를 교체 훈련 하 다.
Bagging 과 Boosting 기술 을 융합 하여 여러 그루 의 의사 결정 트 리 를 훈련 합 니 다.
파동 이 크 지 않 고 분산 이 비교적 작은 데이터 세트 에 대해 비교적 안정 적 인 분열 준칙 을 찾 아 해결 방법 으로 할 수 있다.
총결산
파 이 썬 머 신 러 닝 알고리즘 의 결정 트 리 알고리즘 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 결정 트 리 알고리즘 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 지원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.