>  기사  >  기술 주변기기  >  기계 학습 결정 트리 실습

기계 학습 결정 트리 실습

WBOY
WBOY앞으로
2023-04-11 19:16:011048검색

번역가 | Zhu Xianzhong

리뷰어 | Sun Shujuan

머신러닝의 결정 트리

현대 머신러닝 알고리즘이 우리의 일상을 바꾸고 있습니다. 예를 들어 BERT와 같은 대규모 언어 모델은 Google 검색을 지원하고 GPT-3는 많은 고급 언어 애플리케이션을 지원합니다.

반면에 복잡한 기계 학습 알고리즘을 구축하는 것은 그 어느 때보다 훨씬 쉬워졌습니다. 그러나 기계 학습 알고리즘이 아무리 복잡하더라도 모두 다음 학습 범주 중 하나에 속합니다.

  • 지도 학습
  • 비지도 학습
  • 준지도 학습
  • 강화 학습

사실 의사결정 트리는 가장 오래된 지도 머신러닝 알고리즘 중 하나이며 광범위한 실제 문제를 해결할 수 있습니다. 연구에 따르면 의사결정 트리 알고리즘의 최초 발명은 1963년으로 거슬러 올라갑니다.

다음으로, 이 알고리즘의 세부 사항을 자세히 살펴보고 이러한 유형의 알고리즘이 오늘날에도 여전히 인기가 있는 이유를 살펴보겠습니다.

의사결정 트리란 무엇인가요?

의사결정 트리 알고리즘은 복잡한 데이터 세트를 처리하는 상대적으로 간단한 방법 때문에 널리 사용되는 지도 기계 학습 알고리즘입니다. 의사결정 트리는 트리 구조와 유사하기 때문에 이름이 붙여졌습니다. 트리 구조는 노드와 가장자리 형태의 뿌리, 가지, 잎과 같은 여러 구성 요소로 구성됩니다. 이는 결정이 원하는 예측을 생성하는 if-else 기반 결정 흐름 차트와 유사한 결정 분석에 사용됩니다. 의사결정 트리는 if-else 의사결정 규칙을 학습하여 데이터 세트를 분할하고 최종적으로 트리와 같은 데이터 모델을 생성할 수 있습니다.

분류 문제에 대한 이산 결과 예측과 회귀 문제에 대한 연속 수치 결과 예측에 결정 트리가 적용되었습니다. 수년에 걸쳐 과학자들은 CART, C4.5와 같은 다양한 알고리즘과 랜덤 포레스트 및 그래디언트 부스트 트리와 같은 앙상블 알고리즘을 개발했습니다.

기계 학습 결정 트리 실습

의사결정 트리의 다양한 구성요소 분석

의사결정 트리 알고리즘의 목표는 입력 데이터 세트의 결과를 예측하는 것입니다. 트리 데이터 세트는 속성, 속성값, 예측 유형의 세 가지 형태로 구분됩니다. 지도 학습 알고리즘과 마찬가지로 데이터 세트는 훈련 세트와 테스트 세트의 두 가지 유형으로 나뉩니다. 그 중 훈련 세트는 알고리즘이 학습하여 테스트 세트에 적용하는 결정 규칙을 정의합니다.

의사결정 트리 알고리즘의 단계를 모으기 전에 먼저 의사결정 트리의 구성요소를 이해하겠습니다.

  • 루트 노드: 의사결정 트리 상단에 있는 시작 노드이며 모든 속성을 포함합니다. 가치. 루트 노드는 알고리즘이 학습한 결정 규칙을 기반으로 결정 노드로 나뉩니다.
  • 분기: 분기는 속성 값에 해당하는 노드 사이의 커넥터입니다. 이진 분할에서 분기는 참 경로와 거짓 경로를 나타냅니다.
  • 결정 노드/내부 노드: 내부 노드는 결정 규칙 및 해당 응답 경로에 해당하는 루트 노드와 리프 노드 사이의 결정 노드입니다. 노드는 질문을 나타내고 분기는 해당 질문을 기반으로 관련 답변에 대한 경로를 표시합니다.
  • 리프 노드: 리프 노드는 목표 예측을 나타내는 터미널 노드입니다. 이러한 노드는 더 이상 분할되지 않습니다.

다음은 의사 결정 트리와 위 구성 요소를 시각적으로 표현한 것입니다. 의사 결정 트리 알고리즘은 다음 단계를 거쳐 원하는 예측에 도달합니다.

  • 알고리즘은 모든 루트 노드에서 시작됩니다. 속성 값.
  • 루트 노드는 훈련 세트에서 알고리즘이 학습한 결정 규칙을 기반으로 결정 노드로 나뉩니다.
  • 질문과 답변 경로를 기반으로 분기/에지를 통해 내부 결정 노드를 전달합니다.
  • 리프 노드에 도달하거나 모든 속성이 사용될 때까지 이전 단계를 계속합니다.

각 노드에서 가장 좋은 속성을 선택하기 위해 분할은 다음 두 가지 속성 선택 측정 방법 중 하나를 기반으로 합니다.

  • Gini index (Gini index) 는 Gini Impurity(Gini Impurity)를 측정하여 알고리즘이 무작위 클래스 레이블을 잘못 분류할 가능성을 나타냅니다.
  • 정보 이득은 예측 클래스의 50/50 분할을 피하기 위해 분할 후 엔트로피 개선을 측정합니다. 엔트로피는 주어진 데이터 샘플의 불순도를 수학적으로 측정한 것입니다. 의사결정 트리의 혼돈 상태 50/50에 가까운 파티션 으로 표시됩니다.
  • 결정 트리 알고리즘을 이용한 꽃 분류 사례

위의 기본 지식을 이해한 후 응용 사례 구현을 시작하겠습니다. 이 기사에서는 Scikit Learning 라이브러리를 사용하여 Python으로 의사결정 트리 분류 모델을 구현합니다.

데이터 세트에 대한 간략한 설명

이 튜토리얼의 데이터 세트는 붓꽃 데이터 세트입니다. 이 데이터 세트는 이미 Scikit 오픈 소스 라이브러리에 내장되어 있으므로 개발자는 이를 외부에서 로드할 필요가 없습니다. 이 데이터 세트에는 총 4개의 붓꽃 속성과 해당 속성 값이 포함되어 있으며, 이는 세 가지 유형의 붓꽃 중 하나를 예측하기 위해 모델에 입력됩니다.

    데이터세트의 속성/특징: 꽃받침 길이, 꽃받침 너비, 꽃잎 길이, 꽃잎 너비.
  • 데이터세트의 예측 라벨/꽃 유형: Setosis, Versicolor, Virginica.
다음으로 Python 언어 기반의 의사결정나무 분류기의 단계별 코드 설명을 제공합니다.

라이브러리 가져오기

먼저 다음 코드를 통해 의사결정 트리 구현을 실행하는 데 필요한 라이브러리를 가져옵니다.

import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
Iris 데이터세트 로드

다음 코드는 load_iris 함수를 사용하여 data_set 변수에 저장된 sklearn.dataset 라이브러리의 Iris 데이터세트를 로드하는 방법을 보여줍니다. 다음 두 줄의 코드는 붓꽃 유형과 특성 정보를 인쇄합니다.

data_set = load_iris()
print('Iris plant classes to predict: ', data_set.target_names)
print('Four features of iris plant: ', data_set.feature_names)

기계 학습 결정 트리 실습별도의 속성과 태그

다음 코드 줄은 꽃의 특성과 종류 정보를 구분하여 해당 변수에 저장합니다. 그 중, Shape[0] 함수는 X_att 변수에 저장되는 속성의 개수를 결정하는 역할을 하며, 데이터 세트에 포함된 속성 값의 총 개수는 150개입니다.

#提取花的特性和类型信息
X_att = data_set.data
y_label = data_set.target
print('数据集中总的样本数:', X_att.shape[0])

실제로 X_att 변수의 값을 panda 라이브러리의 DataFrame 함수에 추가하여 데이터 세트의 속성 값 중 일부를 표시하는 시각적 테이블을 만들 수도 있습니다.

data_view=pd.DataFrame({
'sepal length':X_att[:,0],
'sepal width':X_att[:,1],
'petal length':X_att[:,2],
'petal width':X_att[:,3],
'species':y_label
})
data_view.head()
데이터 세트 분할

다음 코드는 train_test_split 함수를 사용하여 데이터 세트를 훈련 세트와 테스트 세트로 분할하는 방법을 보여줍니다. 그 중, 이 함수의 random_state 매개변수는 함수가 실행될 때마다 주어진 데이터 세트에 대해 동일한 결과를 제공하기 위해 임의의 시드를 제공하는 데 사용됩니다. test_size는 테스트 세트의 크기를 나타냅니다. 분할 후 25%를 차지합니다. 훈련 데이터는 75%를 차지합니다.

#数据集拆分为训练集和测试集两部分
X_att_train, X_att_test, y_label_train, y_label_test = train_test_split(X_att, y_label, random_state = 42, test_size = 0.25)
결정 트리 분류 기능 적용

아래 코드는

DecisionTreeClassifier 함수를 사용하여 분류 모델​을 생성하여 결정 트리를 구현합니다. 표준 "엔트로피" way로 설정합니다. 표준 을 사용하면 이 속성 선택 측정항목을 정보 이득(정보 이득)으로 설정할 수 있습니다. 그런 다음 코드는 모델을 속성 및 레이블의 훈련 세트와 일치시킵니다.

#应用决策树分类器
clf_dt = DecisionTreeClassifier(criterion = 'entropy')
clf_dt.fit(X_att_train, y_label_train)

计算模型精度

下面的代码负责计算并打印决策树分类模型在训练集和测试集上的准确性。为了计算准确度分数,我们使用了predict函数。测试结果是:训练集和测试集的准确率分别为100%和94.7%。

print('Training data accuracy: ', accuracy_score(y_true=y_label_train, y_pred=clf_dt.predict(X_att_train)))
print('Test data accuracy: ', accuracy_score(y_true=y_label_test, y_pred=clf_dt.predict(X_att_test)))

真实世界中的决策树应用程序

当今社会,机器学习决策树在许多行业的决策过程中都得到广泛应用。其中,决策树的最常见应用首先是在金融和营销部门,例如可用于如下一些子领域:

  • 贷款批准
  • 支出管理
  • 客户流失预测
  • 新产品的可行性分析,等等。

如何改进决策树?

作为本文决策树主题讨论的总结,我们有充分的理由安全地假设:决策树的可解释性仍然很受欢迎。决策树之所以容易理解,是因为它们可以被人类以可视化方式展现并便于解释。因此,它们是解决机器学习问题的直观方法,同时也能够确保结果是可解释的。机器学习中的可解释性是我们过去讨论过的一个小话题,它也与即将到来的人工智能伦理主题存在密切联系。

与任何其他机器学习算法一样,决策树自然也可以加以改进,以避免过度拟合和出现过于偏向于优势预测类别。剪枝和ensembling技术是克服决策树算法缺点方案最常采用的方法。决策树尽管存在这些缺点,但仍然是决策分析算法的基础,并将在机器学习领域始终保持重要位置。

译者介绍

朱先忠,51CTO社区编辑,51CTO专家博客、讲师,潍坊一所高校计算机教师,自由编程界老兵一枚。

原文标题:An Introduction to Decision Trees for Machine Learning,作者:Stylianos Kampakis

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

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제