>백엔드 개발 >파이썬 튜토리얼 >Python 기계 학습 의사 결정 트리에 대한 자세한 소개

Python 기계 학습 의사 결정 트리에 대한 자세한 소개

高洛峰
高洛峰원래의
2017-03-19 14:20:142069검색

의사결정 트리(DT)는 분류 및 회귀에 사용되는 비지도 학습 방법입니다.

장점: 계산 복잡도가 높지 않고, 출력 결과가 이해하기 쉽고, 누락된 중간 값에 둔감하며, 관련 없는 특성 데이터를 처리할 수 있습니다.
단점: 과일치 문제가 발생할 수 있습니다
적용 가능 데이터 유형: 숫자 및 명목 소스 코드 다운로드 https://www.manning.com/books/machine-learning-in-action

데모 실행

키 알고리즘

if so return 클래스 태그;

else

찾기 데이터 세트
함수
createBranch를 분할하고 반환 결과를 분기 노드에 추가하는 최고의 기능
반환 분기 노드해당 코드
def createTree(dataSet,labels):
class

List

= [example[-1] for example in dataSet]가 데이터세트[-1]이 아닙니다. 데이터 세트}}이며 이때 데이터 세트의 각 요소의 마지막 요소 중 첫 번째 요소는

if classList.
count(classList[0]) == len(classList): 반환된 분류된 경우 목록 개수 유형이 동일합니다. 이 유형을 반환하세요! 하위 노드를 분류할 수 있는지 여부, 그렇다면 하나의 유형을 반환합니다. 그렇지 않으면 recurse 하향 분류 == 1: #dataSet에 더 이상 기능이 없으면 분할을 중지합니다. 요소가 하나만 있는 경우
                                                                   대다수Cnt(classList) 반환                            ~         return majorCnt(classList) ]    이 라벨은 표면이 없는 것인가요?   myTree = {bestFeatLabel:{}}    그런 다음 가장 좋은 카테고리의 하위 트리를 만듭니다   del(labels[bestFeat]) 최고의 카테고리 삭제 featValues ​​​​= [example[bestFeat] for example in dataSet] UniqueVals = set(featValues) set은 분류입니다. UniqueVals의 값에
얼마나 많은 유형이 있는지 확인하세요.
subLabels = labels[:] # 모든 레이블을 복사하므로 tree는 기존 레이블을 엉망으로 만듭니다.
MyTree [BestFeatlabel] [value] = Createtree (SPLITDATASET (DataSET, Bestfeat, Value), Sublabels
Retu RN MyTree
데이터 분할 집합 전후의 정보 변화를 정보 이득이라고 합니다. 데이터 집합을 분할하는 가장 큰 원칙은 무질서한 데이터를 보다 질서있게 만드는 것입니다. 이는 파이 커팅 원리로 이해됩니다.




단위 엔트로피를 사용하여 정보의 복잡성과 양을 설명합니다. 케이크의 밀도에 맞춰, 같은 밀도로 세로로 자른 케이크라면

각 부분의 무게 g = 총 G * 대원 안의 비율! 유사하게, 분할 후 정보 엔트로피가 동일하면 데이터의 각 작은 부분의 작은 h = pro * total H, 합계 h[i] = H입니다.

그러나 우리에게 필요한 것은 정반대: 필요한 것 정보 엔트로피가 동일한 것은 아니지만 동일하지 않습니다. 예를 들어 녹색은 풀 충전물, 노란색은 사과 충전물, 파란색은 보라색 고구마일 수 있습니다. 밀도가 달라요!

분할을 제대로 해야해요! 그것을 분류하고 다양한 충전재에 근접한 선을 찾으십시오. 여기에서 작은 h는 최소화되고 결국 면적이 변경되지 않은 상태에서 전체 H는 최소값에 접근하게 되는데, 이는 해결해야 할 최적화 문제입니다.


디버그프로세스
calcShannonEnt : [[1, 'no'], [1, 'no']] = 0 log(1, 2) * 0.4 = 0 pro는 1이어야 하기 때문에 왜 0입니까?
log(prob,2) log(1,2) = 0;2^0=1, prob : [[1, 'yes'], [1, 'yes'], [0, 'no']] = 0.91 >> * 0.6 = 0.55
dataSet의 featVec에 대한 25줄: prop에 대한 빈도 계산
chooseBestFeatureToSplit() 
0.9709505944546686 = calcShannonEnt(dataSet) : [[1, 1, 'yes ' ], [1, 1, '예'], [1, 0, '아니요'], [0, 1, '아니요'], [0, 1, '아니요']]

# 탐지 데이터 세트의 각 하위 항목이 동일한 카테고리에 속하는지 여부: 값이 모두 a이고 결과가 모두 y 또는 n이면 카테고리입니다. 따라서 두 개의 매개변수 입력만
0.5509775004326937 = += prob * calcShannonEnt(subDataSet) 별도로 부분 집합화 후 확률 * Shannon 드롭, 얻은 합계, 원래 전체 Shannon 드롭 비율

# 数据越接近,香浓熵值越少,越接近0 ,越不同,越多分逻辑,香浓熵就越大
# 只计算 其dataSet的featVec[-1] 结果标签
def calcShannonEnt(dataSet):


0.4199730940219749 infoGain = baseEntropy - newEntropy

요약:  

처음에는 코드도 이해가 안 되고, 무슨 일을 하는지도 이해가 안 됐어요! 분류, 우리의 목표는 많은 데이터를 분류하고 레이블을 지정하는 것입니다.
k-nearby classify([0, 0], group, labels, 3)처럼 새로운 데이터 [0,0]이 k=3 이웃 알고리즘에 따라 그룹, 레이블 데이터에 분류된다는 의미입니다! 그룹은 라벨에 해당합니다!

나중에

을 봤는데 데이터 세트가 차원의 값을 의미하고 마지막이 물고기 여부, 결과 라벨 Python 기계 학습 의사 결정 트리에 대한 자세한 소개

따라서 각 차원 + 결과 레이블을 2차원 배열로 잘라서 비교하고 분류해야 합니다

테스트는 처음 n 차원으로 나누어야 합니다. 값, 벡터 입력, 출력이 yes 또는 아니요!

처음에는 어지러울 수도 있지만, 생각을 정리하고 코드를 보면 더 이해하기 쉽습니다!

대상과 초기 데이터를 이해하고 나면 classList가 결과 라벨이라는 것을 알게 될 것입니다! , 는 분류할 데이터 세트에 해당하는 해당 결과 라벨

이고, labels는 시작 데이터 세트의 차원에 해당하는 특성 이름, 특성 이름 strname

bestFeatLabel은 가장 좋은 차원 이름입니다. 분류 기능은 첫 번째 차원이든 두 번째 차원이든 관계없이 N
featValues는 bestFeatLabel 차원 아래의 값 배열입니다. 새로운 분류 비교를 수행하는 데 사용되는 것은 이 차원 아래의 그룹입니다.
uniqueVals는 set을 사용하여 동일한 카테고리인지 확인합니다.
예:
 dataSet = [[1, 1, 'yes'],[0, 1, 'yes'],[1, 0, 'no' ],[1, 0, 'no'],[0, 0, 'no']]
 labels = ['no surfacing','flippers',]
createTree는 다음과 같습니다. {'flippers': {0: 'no', 1: 'yes'}}는 표면 없음 차원을 직접 생략합니다





마지막으로 단락을 사용해 보겠습니다. 의사결정 트리에 대해 이야기하자면:

의사결정 트리의 핵심은 효율성을 높이는 것입니다! '최대 최적'을 사용하여 첫 번째 부정적인 라벨을 나누고, 긍정적인 라벨은 계속해서 나누어야 합니다! 그리고 음수이면 리프 노드 응답을 직접 반환합니다! 해당하는 다른 차원은 계속해서 심사되지 않습니다!

이론적으로는 의사결정나무 알고리즘을 사용하지 않더라도 모든 데이터를 맹목적으로 소진할 수 있습니다. 즉, 매번 데이터의 모든 차원을 통과하게 됩니다! 그리고 마지막 라벨 답변이 있습니다! 차원 수 * 데이터 수! 복잡성을 위해! 이것이 기억력에 대한 일치하는 답변입니다! 적합한 전문가 시스템! 일어나지 않는 상황을 예측하는 능력이 부족해요! 하지만 데이터 볼륨이 크고 속도가 빠르며 지능적인 느낌도 받을 수 있습니다! 과거 경험의 반복이니까! 그런데 죽었나요? 아니요, 죽지 않았습니다! 피로는 사라졌지만 의사결정 트리는 역동적입니다! 배우다! 나무를 바꿔라! 최소한 역동적으로 만들어졌습니다! 데이터가 불완전하면 불완전할 수도 있습니다! 판단이 해결되면 하나의 판단을 사용하고, 그렇지 않으면 또 다른 판단이 필요합니다! 크기가 증가했습니다!

위 내용은 Python 기계 학습 의사 결정 트리에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.