Python 기계 학습 알고리즘 의 결정 트 리 알고리즘 의 실현 과 장단 점

1.알고리즘 개요
결정 트 리 알고리즘 은 이미 알 고 있 는 각종 상황 발생 확률 을 바탕 으로 결정 트 리 를 구성 하여 순 현 가 치 를 구 하 는 기대 치가 0 과 같은 확률 보다 크 고 프로젝트 위험 을 평가 하 며 타당 성 을 판단 하 는 결정 분석 방법 이다.
분류 알고리즘 은 훈련 샘플 집합 을 이용 하여 분류 함수 즉 분류 모델(분류 기)을 얻어 데이터 가 집 중 된 샘플 을 각 유형 으로 나 누 는 것 을 실현 한다.분류 모델 은 훈련 샘플 중 속성 집합 과 유형 간 의 잠재 적 관 계 를 학습 하고 이 를 근거 로 새로운 샘플 이 어떤 유형 에 속 하 는 지 예측한다.

결정 트 리 알고리즘 은 확률 분석 을 직관 적 으로 활용 하 는 도해 법 으로 매우 자주 사용 하 는 분류 방법 으로 감독 학습 에 속한다.
결정 트 리 는 일종 의 트 리 구조 로 그 중에서 모든 내부 결점 은 하나의 속성 에 대한 테스트 를 나타 내 고 모든 지점 은 하나의 테스트 출력 을 대표 하 며 모든 잎 결점 은 하나의 유형 을 대표 한다.
결정 트 리 학습 은 사례 를 바탕 으로 하 는 귀납 학습 으로 위 에서 아래로 재 귀 하 는 방법 을 사용한다.그의 기본 사상 은 정보 엔트로피 를 도량형 으로 엔트로피 값 이 가장 빨리 떨 어 지 는 나 무 를 구성 하고 잎 결점 에 있 는 엔트로피 값 이 0 이 며 이때 모든 잎 노드 의 인 스 턴 스 는 같은 유형 에 속한다.
결정 트 리 학습 알고리즘 의 가장 큰 장점 은 스스로 학습 할 수 있다 는 것 이다.학습 과정 에서 사용자 가 배경 지식 을 너무 많이 이해 하지 않 고 훈련 사례 를 잘 표시 하면 학습 할 수 있다 는 것 이다.
2.알고리즘 종류
ID3 알고리즘
  • ID3 알고리즘 에서 정보 론 에 따 른 정보 이득 평가 와 선택 특징.매번 정보 이득 이 가장 큰 후보 특징 을 선택 하여 판단 모듈 로 한다.
  • 정보 이득 은 속성의 값 영역 크기 와 정비례 한다.속성 수치 종류 가 많 을 수록 분열 속성 이 될 수 있 습 니 다.
  • ID3 도 연속 적 으로 분 포 된 데 이 터 를 처리 할 수 없다.
  • C 4.5 알고리즘
  • C 4.5 알고리즘 은 정보 이득 대신 정보 이득 률 을 사용 하여 특징 선택 을 하여 정보 이득 이 특징 을 선택 할 때 특징 값 개수 가 많은 부족 을 극복 했다.
  • C 4.5 알고리즘 의 구체 적 인 알고리즘 절 차 는 ID3 와 유사 하 다.
  • C 4.5 는 연속 속성 에 대한 이산 화 처 리 를 완성 하고 불완전한 데 이 터 를 처리 할 수 있다.
  • C5.0 알고리즘
  • C5.0 알고리즘 은 Quinlan 이 C 4.5 알고리즘 을 바탕 으로 제 시 된 상업 용 개선 버 전 으로 대량의 데 이 터 를 포함 한 데이터 세트 를 분석 하 는 데 목적 을 둔다.
  • C5.0 알고리즘 은 C 4.5 알고리즘 에 비해 다음 과 같은 장점 이 있다.
  • 의사 결정 트 리 구축 시간 은 C 4.5 알고리즘 보다 몇 배 빠 르 고 생 성 된 의사 결정 트 리 규모 도 작 으 며 더 적은 잎 매듭 포인트
  • 를 가진다.
  • 향상 법(boosting)을 사용 하여 여러 개의 결정 트 리 를 조합 하여 분 류 를 하여 정확 도 를 크게 높 였 다
  • .
  • 선택 가능 한 옵션 을 제공 하 는 것 은 사용자 가 상황 에 따라 결정 한다.예 를 들 어 샘플 의 가중치,샘플 오류 분류 비용 등 을 고려 하 는 지 여부 등 이다.
  • CART 알고리즘
  • CART 의사 결정 트 리 의 생 성 은 이 진 트 리 를 재 귀적 으로 구축 하 는 과정 이다.
  • CART 는 지 니 계수 최소 화 준칙 으로 특징 선택 을 하여 이 진 트 리 를 생 성 한다.
  • 지 니 계수 계산 공식:

  • 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.알고리즘 장단 점
     장점:소 규모 데이터 세트 유효
    결점.
  • 연속 변 수 를 처리 하 는 것 이 좋 지 않 습 니 다
  • 유형 이 많 을 때 오류 가 빨리 증가 합 니 다
  • 대량의 데 이 터 를 처리 할 수 없다
  • 9.알고리즘 최적화
    결정 트 리 알고리즘 은 매우 전형 적 인 알고리즘 으로 훈련 과정 에서 데이터 간 의 엔트로피 와 정보 이득 을 얻 는 것 을 구분 근거 로 하고 분류 효과 가 비교적 좋다.그러나 일반적인 상황 에서 우리 의 훈련 결정 트 리 는 모두 데이터 양 이 비교적 적은 데이터 세트 에서 진행 되 는데 훈련 분류 기 가 사용 하 는 훈련 데이터 가 충분 할 때 결정 트 리 는 나무 가 너무 높 고 의합 효과 가 떨 어 지 는 등 문제 가 발생 할 수 있다.따라서 결정 트 리 를 어떻게 효율 적 이 고 정확하게 구축 하 는 지 는 모델 인식 분야 의 연구 핫 이 슈 가 되 었 다.
    증분 훈련 방식 으로 의사 결정 트 리 를 교체 훈련 하 다.
    Bagging 과 Boosting 기술 을 융합 하여 여러 그루 의 의사 결정 트 리 를 훈련 합 니 다.
    파동 이 크 지 않 고 분산 이 비교적 작은 데이터 세트 에 대해 비교적 안정 적 인 분열 준칙 을 찾 아 해결 방법 으로 할 수 있다.
    총결산
    파 이 썬 머 신 러 닝 알고리즘 의 결정 트 리 알고리즘 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 결정 트 리 알고리즘 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 지원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기