파이썬 튜토리얼

파이썬 홈 파이썬 소개 파이썬 시작하기 파이썬 구문 파이썬 주석 파이썬 변수 파이썬 데이터 유형 파이썬 숫자 파이썬 캐스팅 파이썬 문자열 파이썬 부울 파이썬 연산자 파이썬 목록 파이썬 튜플 파이썬 세트 파이썬 사전 파이썬 If...Else 파이썬 while 루프 Python For 루프 파이썬 함수 파이썬 람다 파이썬 배열 파이썬 클래스/객체 파이썬 상속 파이썬 반복자 파이썬 범위 파이썬 모듈 파이썬 날짜 파이썬 수학 파이썬 JSON 파이썬 정규식 파이썬 PIP 파이썬 시도...제외 파이썬 사용자 입력 파이썬 문자열 포맷

파일 처리

파이썬 파일 처리 파이썬 읽기 파일 Python 파일 작성/작성 파이썬 파일 삭제

파이썬 모듈

넘파이 튜토리얼 팬더 연습 사이피 튜토리얼

파이썬 Matplotlib

Matplotlib 소개 Matplotlib 시작하기 Matplotlib 파이플로트 Matplotlib 플로팅 Matplotlib 마커 Matplotlib 라인 Matplotlib 레이블 Matplotlib 그리드 Matplotlib 서브플롯 Matplotlib 분산 Matplotlib 바 Matplotlib 히스토그램 Matplotlib 파이 차트

기계 학습

시작하기 평균 중앙값 모드 표준 편차 백분위수 데이터 배포 정규 데이터 분포 산포도 선형 회귀 다항식 회귀 다중 회귀 규모 훈련/시험 의사결정나무

파이썬 MySQL

MySQL 시작하기 MySQL 데이터베이스 생성 MySQL 테이블 생성 MySQL 삽입 MySQL 선택 MySQL 어디 MySQL 주문 기준 MySQL 삭제 MySQL 삭제 테이블 MySQL 업데이트 MySQL 제한 MySQL 조인

파이썬 몽고DB

몽고DB 시작하기 MongoDB 데이터베이스 생성 MongoDB 컬렉션 생성 몽고DB 삽입 몽고DB 찾기 몽고DB 쿼리 몽고DB 정렬 몽고DB 삭제 MongoDB 드롭 컬렉션 몽고DB 업데이트 몽고DB 제한

파이썬 참조

파이썬 개요 파이썬 내장 함수 파이썬 문자열 메서드 파이썬 목록 메서드 파이썬 사전 메서드 파이썬 튜플 메서드 파이썬 세트 메소드 파이썬 파일 메서드 파이썬 키워드 파이썬 예외 파이썬 용어집

모듈 참조

랜덤 모듈 요청 모듈 통계 모듈 수학 모듈 cMath 모듈

파이썬 사용법

목록 중복 제거 문자열 반전 두 개의 숫자 더하기

파이썬 예제

파이썬 예제 파이썬 컴파일러 파이썬 연습 파이썬 퀴즈 파이썬 인증서

기계 학습 - 의사 결정 트리



의사결정나무

이 장에서는 "의사결정 트리"를 만드는 방법을 보여줍니다. 의사 결정 트리는 순서도이며 이전 경험을 기반으로 의사 결정을 내리는 데 도움이 될 수 있습니다.

예에서 사람은 코미디 쇼에 가야 할지 말아야 할지 결정하려고 할 것입니다.

운 좋게도 우리 예시 사람은 마을에서 코미디 쇼가 있을 때마다 등록하고 코미디언에 대한 정보를 등록했으며 그가 갔는지 여부도 등록했습니다.

나이 경험 계급 국적 가다
36 10 9 영국 아니요
42 12 4 미국 아니요
23 4 6 N 아니요
52 4 4 미국 아니요
43 21 8 미국
44 14 5 영국 아니요
66 7 N
35 14 9 영국
52 13 7 N
35 5 9 N
24 5 미국 아니요
18 7 영국
45 9 9 영국

이제 이 데이터 세트를 기반으로 Python은 새로운 쇼에 참석할 가치가 있는지 결정하는 데 사용할 수 있는 의사 결정 트리를 만들 수 있습니다.



어떻게 작동합니까?

먼저 필요한 모듈을 가져오고 pandas로 데이터 세트를 읽습니다.

예시

데이터 세트를 읽고 인쇄합니다.

import pandas
from sklearn import tree
import pydotplus
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
import matplotlib.image as pltimg

df = pandas.read_csv("shows.csv")

print(df)

의사 결정 트리를 만들려면 모든 데이터가 숫자여야 합니다.

숫자가 아닌 열 'Nationality'와 'Go'를 숫자 값으로 변환해야 합니다.

Pandas에는 map()값을 변환하는 방법에 대한 정보가 포함된 사전을 사용하는 방법이 있습니다.

{'UK': 0, 'USA': 1, 'N': 2}

값 'UK'를 0으로, 'USA'를 1로, 'N'을 2로 변환하는 것을 의미합니다.

예시

문자열 값을 숫자 값으로 변경:

d = {'UK': 0, 'USA': 1, 'N': 2}
df['Nationality'] = df['Nationality'].map(d)
d = {'YES': 1, 'NO': 0}
df['Go'] = df['Go'].map(d)

print(df)

그런 다음 대상 열에서 기능 열 을 분리해야 합니다 .

특성 열은 예측하려는 열이고 대상 열은 예측하려는 값이 있는 열입니다 .

예시

X은 기능 열이고 y는 대상 열입니다.

features = ['Age', 'Experience', 'Rank', 'Nationality']

X = df[features]
y = df['Go']

print(X)
print(y)

이제 실제 의사 결정 트리를 만들고 세부 정보에 맞추고 컴퓨터에 .png 파일을 저장할 수 있습니다.

예시

의사 결정 트리를 만들고 이미지로 저장하고 이미지를 표시합니다.

dtree = DecisionTreeClassifier()
dtree = dtree.fit(X, y)
data = tree.export_graphviz(dtree, out_file=None, feature_names=features)
graph = pydotplus.graph_from_dot_data(data)
graph.write_png('mydecisiontree.png')

img=pltimg.imread('mydecisiontree.png')
imgplot = plt.imshow(img)
plt.show()


결과 설명

의사 결정 트리는 이전 결정을 사용하여 코미디언을 보고 싶은지 여부에 대한 확률을 계산합니다.

의사 결정 트리의 다양한 측면을 살펴보겠습니다.

계급

Rank <= 6.5즉, 순위가 6.5 이하인 모든 코미디언은 True화살표(왼쪽)를 따르고 나머지는 False화살표(오른쪽)를 따릅니다.

gini = 0.497 는 분할의 품질을 나타내며 항상 0.0에서 0.5 사이의 숫자입니다. 여기서 0.0은 모든 샘플이 동일한 결과를 얻었음을 의미하고 0.5는 분할이 정확히 중간에서 수행되었음을 의미합니다.

samples = 13 이것은 결정의 이 시점에서 13명의 코미디언이 남았다는 것을 의미하며 이것이 첫 번째 단계이기 때문에 모두입니다.

value = [6, 7] 13명의 코미디언 중 6명은 "NO", 7명은 "GO"를 받습니다.

지니

샘플을 분할하는 방법에는 여러 가지가 있으며 이 자습서에서는 GINI 방법을 사용합니다.

Gini 방법은 다음 공식을 사용합니다.

Gini = 1 - (x/n)2 - (y/n)2

여기서 x는 긍정적인 답변의 수("GO"), n는 샘플의 수, y는 부정적인 답변의 수("NO")로 다음 계산을 제공합니다.

1 - (7 / 13)2 - (6 / 13)2 = 0.497

다음 단계에는 '순위'가 6.5 이하인 코미디언을 위한 상자와 나머지 상자가 하나씩 두 개의 상자가 있습니다.

True - 5명의 코미디언이 여기서 끝납니다.

gini = 0.0 모든 샘플이 동일한 결과를 얻었음을 의미합니다.

samples = 5 는 이 분기에 5명의 코미디언이 남아 있음을 의미합니다(랭크 6.5 이하의 코미디언 5명).

value = [5, 0] 5는 "NO"를, 0은 "GO"를 얻음을 의미합니다.

거짓 - 8명의 코미디언 계속:

국적

Nationality <= 0.5 즉, 국적 값이 0.5 미만인 코미디언은 왼쪽 화살표를 따르고(영국에서 온 모든 사람을 의미) 나머지는 오른쪽 화살표를 따릅니다.

gini = 0.219 이는 샘플의 약 22%가 한 방향으로 간다는 것을 의미합니다.

samples = 8 는 이 분기에 8명의 코미디언이 남아 있음을 의미합니다(순위가 6.5 이상인 코미디언 8명).

value = [1, 7] 8명의 코미디언 중 1명은 "NO", 7명은 "GO"를 받습니다.




True - 4명의 코미디언 계속:

나이

Age <= 35.5는 35.5세 이하의 개그맨들은 왼쪽 화살표를 따르고 나머지는 오른쪽 화살표를 따라간다는 의미입니다.

gini = 0.375이는 샘플의 약 37.5%가 한 방향으로 간다는 것을 의미합니다.

samples = 4는 이 지점에 4명의 코미디언이 남아 있음을 의미합니다(영국에서 온 4명의 코미디언).

value = [1, 3]이 4명의 코미디언 중 1명은 "NO"를, 3명은 "GO"를 받습니다.

거짓 - 4명의 코미디언이 여기서 끝납니다.

gini = 0.0 모든 샘플이 동일한 결과를 얻었음을 의미합니다.

samples = 4는 이 지점에 4명의 코미디언이 남아 있음을 의미합니다(영국 출신이 아닌 4명의 코미디언).

value = [0, 4]4명의 코미디언 중 0명은 "NO", 4명은 "GO"를 받습니다.




True - 2명의 코미디언이 여기서 끝납니다.

gini = 0.0 모든 샘플이 동일한 결과를 얻었음을 의미합니다.

samples = 2는 이 지점에 2명의 코미디언이 남아 있음을 의미합니다(35.5세 이하의 코미디언 2명).

value = [0, 2] 이 2명의 코미디언 중 0은 "NO"를, 2는 "GO"를 얻는다는 것을 의미합니다.

False - 2명의 코미디언 계속:

경험

Experience <= 9.5 경력 9.5년 이하의 개그맨들은 왼쪽 화살표, 나머지는 오른쪽 화살표를 따라간다는 뜻이다.

gini = 0.5 샘플의 50%가 한 방향으로 간다는 것을 의미합니다.

samples = 2 이 분기에 2명의 코미디언이 남아 있음을 의미합니다(35.5세보다 오래된 코미디언 2명).

value = [1, 1] 즉, 이 2명의 코미디언 중 1명은 "NO"를, 1명은 "GO"를 받습니다.




True - 코미디언 1명이 여기서 끝납니다.

gini = 0.0 모든 샘플이 동일한 결과를 얻었음을 의미합니다.

samples = 1 이 지점에 개그맨 1명이 남았다는 뜻입니다(경력 9.5년 이하의 개그맨 1명).

value = [0, 1] 0은 "NO"를, 1은 "GO"를 얻음을 의미합니다.

거짓 - 코미디언 1명이 여기서 끝납니다.

gini = 0.0 모든 샘플이 동일한 결과를 얻었음을 의미합니다.

samples = 1 이 지점에 개그맨 1명(경력 9.5년 이상의 개그맨 1명)이 남았다는 의미입니다.

value = [1, 0] 1은 "NO"를, 0은 "GO"를 얻음을 의미합니다.


값 예측

의사 결정 트리를 사용하여 새 값을 예측할 수 있습니다.

예: 10년 경력의 40세 미국 코미디언이 출연하고 코미디 순위가 7인 쇼를 보러 가야 하나요?

예시

predict() 메서드를 사용하여 새 값을 예측합니다.

print(dtree.predict([[40, 10, 7, 1]]))

예시

코미디 순위가 6위라면 답은?

print(dtree.predict([[40, 10, 6, 1]]))


다른 결과

동일한 데이터를 제공하더라도 충분한 시간 실행하면 의사결정 트리가 다른 결과를 제공한다는 것을 알 수 있습니다.

의사결정나무가 100% 확실한 답을 주지 않기 때문입니다. 그것은 결과의 확률을 기반으로 하며 대답은 다양합니다.