분류-소개

분류 소개

분류는 관찰 된 값 또는 주어진 데이터 포인트에서 클래스 또는 범주를 예측하는 프로세스로 정의 될 수 있습니다. 분류 된 출력은 "검은 색"또는 "흰색"또는 "스팸"또는 "스팸 없음"과 같은 형식을 가질 수 있습니다.

수학적으로 분류는 입력 변수 (X)에서 출력 변수 (Y)로 매핑 함수 (f)를 근사하는 작업입니다. 기본적으로 입력 데이터 세트와 함께 대상도 제공되는 감독 형 기계 학습에 속합니다.

분류 문제의 예로는 이메일의 스팸 탐지가 있습니다. 출력에는 "스팸"과 "스팸 없음"의 두 가지 범주 만있을 수 있습니다. 따라서 이것은 이진 유형 분류입니다.

이 분류를 구현하려면 먼저 분류기를 훈련해야합니다. 이 예에서는 "스팸"및 "스팸 없음"이메일이 학습 데이터로 사용됩니다. 분류자를 성공적으로 훈련시킨 후 알 수없는 이메일을 감지하는 데 사용할 수 있습니다.

분류의 학습자 유형

우리는 분류 문제에 대해 두 가지 유형의 학습자가 있습니다.

게으른 학습자

이름에서 알 수 있듯이 이러한 종류의 학습자는 학습 데이터를 저장 한 후 테스트 데이터가 나타날 때까지 기다립니다. 분류는 테스트 데이터를 얻은 후에 만 ​​수행됩니다. 그들은 훈련에 더 적은 시간을 소비하지만 예측에 더 많은 시간을 보냅니다. 게으른 학습자의 예로는 K- 최근 접 이웃 및 사례 기반 추론이 있습니다.

열망하는 학습자

게으른 학습자와 반대로 열성 학습자는 학습 데이터를 저장 한 후 테스트 데이터가 나타날 때까지 기다리지 않고 분류 모델을 구성합니다. 그들은 훈련에 더 많은 시간을 할애하지만 예측에 더 적은 시간을 보냅니다. 열성적인 학습자의 예로는 의사 결정 트리, 나이브 베이 즈 및 인공 신경망 (ANN)이 있습니다.

파이썬으로 분류기 만들기

기계 학습을위한 Python 라이브러리 인 Scikit-learn을 사용하여 Python에서 분류자를 빌드 할 수 있습니다. 파이썬에서 분류자를 만드는 단계는 다음과 같습니다.

1 단계 : 필요한 파이썬 패키지 가져 오기

scikit-learn을 사용하여 분류기를 작성하려면 가져와야합니다. 다음 스크립트를 사용하여 가져올 수 있습니다.

import sklearn

2 단계 : 데이터 세트 가져 오기

필요한 패키지를 가져온 후 분류 예측 모델을 구축하기위한 데이터 세트가 필요합니다. sklearn 데이터 세트에서 가져 오거나 요구 사항에 따라 다른 데이터를 사용할 수 있습니다. 우리는 sklearn의 유방암 위스콘신 진단 데이터베이스를 사용할 것입니다. 다음 스크립트를 사용하여 가져올 수 있습니다.

from sklearn.datasets import load_breast_cancer

다음 스크립트는 데이터 세트를로드합니다.

data = load_breast_cancer()

또한 데이터를 정리해야하며 다음 스크립트의 도움으로 수행 할 수 있습니다.

label_names = data['target_names']
   labels = data['target']
   feature_names = data['feature_names']
   features = data['data']

다음 명령은 레이블 이름 'malignant'및'benign'우리 데이터베이스의 경우.

print(label_names)

위 명령의 출력은 라벨의 이름입니다-

['malignant' 'benign']

이러한 레이블은 이진 값 0과 1에 매핑됩니다. Malignant 암은 0으로 표시되고 Benign 암은 1로 표시됩니다.

이 라벨의 기능 이름과 기능 값은 다음 명령을 사용하여 볼 수 있습니다.

print(feature_names[0])

위 명령의 출력은 라벨 0의 기능 이름입니다. Malignant 암 −

mean radius

유사하게, 라벨의 특징 이름은 다음과 같이 생성 될 수 있습니다.

print(feature_names[1])

위 명령의 출력은 레이블 1의 기능 이름입니다. Benign 암 −

mean texture

다음 명령을 사용하여 이러한 레이블의 기능을 인쇄 할 수 있습니다.

print(features[0])

이것은 다음과 같은 출력을 제공합니다-

[
   1.799e+01 1.038e+01 1.228e+02 1.001e+03 1.184e-01 2.776e-01 3.001e-01
   1.471e-01 2.419e-01 7.871e-02 1.095e+00 9.053e-01 8.589e+00 1.534e+02
   6.399e-03 4.904e-02 5.373e-02 1.587e-02 3.003e-02 6.193e-03 2.538e+01
   1.733e+01 1.846e+02 2.019e+03 1.622e-01 6.656e-01 7.119e-01 2.654e-01
   4.601e-01 1.189e-01
]

다음 명령을 사용하여 이러한 레이블의 기능을 인쇄 할 수 있습니다.

print(features[1])

이것은 다음과 같은 출력을 제공합니다-

[
   2.057e+01 1.777e+01 1.329e+02 1.326e+03 8.474e-02 7.864e-02 8.690e-02
   7.017e-02 1.812e-01 5.667e-02 5.435e-01 7.339e-01 3.398e+00 7.408e+01
   5.225e-03 1.308e-02 1.860e-02 1.340e-02 1.389e-02 3.532e-03 2.499e+01
   2.341e+01 1.588e+02 1.956e+03 1.238e-01 1.866e-01 2.416e-01 1.860e-01
   2.750e-01 8.902e-02
]

3 단계 : 데이터를 학습 및 테스트 세트로 구성

보이지 않는 데이터에서 모델을 테스트해야하므로 데이터 세트를 학습 세트와 테스트 세트의 두 부분으로 나눌 것입니다. sklearn python 패키지의 train_test_split () 함수를 사용하여 데이터를 집합으로 분할 할 수 있습니다. 다음 명령은 함수를 가져옵니다-

from sklearn.model_selection import train_test_split

이제 다음 명령은 데이터를 훈련 및 테스트 데이터로 분할합니다. 이 예에서는 데이터의 40 %를 테스트 목적으로 사용하고 데이터의 60 %를 훈련 목적으로 사용합니다.

train, test, train_labels, test_labels = train_test_split(
   features,labels,test_size = 0.40, random_state = 42
)

4 단계 : 모델 평가

데이터를 훈련과 테스트로 나눈 후 모델을 구축해야합니다. 이를 위해 Naïve Bayes 알고리즘을 사용할 것입니다. 다음 명령은 GaussianNB 모듈을 가져옵니다.

from sklearn.naive_bayes import GaussianNB

이제 다음과 같이 모델을 초기화하십시오.

gnb = GaussianNB()

다음으로 다음 명령을 사용하여 모델을 훈련시킬 수 있습니다.

model = gnb.fit(train, train_labels)

이제 평가를 위해 예측을해야합니다. 다음과 같이 predict () 함수를 사용하여 수행 할 수 있습니다.

preds = gnb.predict(test)
print(preds)

이것은 다음과 같은 출력을 제공합니다-

[
   1 0 0 1 1 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1
   0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 1 1
   1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0 1 1 0
   0 0 1 1 1 0 0 1 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 1 1
   1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 0 0 1 1 0 
   1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 0 
   1

]

출력에서 위의 일련의 0과 1은 다음에 대한 예측 값입니다. MalignantBenign 종양 클래스.

Step5 : 정확도 찾기

test_labels와 preds라는 두 배열을 비교하여 이전 단계에서 모델 빌드의 정확성을 찾을 수 있습니다. 정확도를 결정하기 위해 precision_score () 함수를 사용할 것입니다.

from sklearn.metrics import accuracy_score
   print(accuracy_score(test_labels,preds))
   0.951754385965

위의 출력은 NaïveBayes 분류 기가 95.17 % 정확함을 보여줍니다.

분류 평가 지표

기계 학습 애플리케이션 또는 모델의 구현을 완료 한 경우에도 작업이 완료되지 않습니다. 우리 모델이 얼마나 효과적인지 알아 내야합니까? 다양한 평가 메트릭이있을 수 있지만 메트릭 선택이 기계 학습 알고리즘의 성능을 측정하고 비교하는 방법에 영향을 미치므로 신중하게 선택해야합니다.

다음은 데이터 세트와 문제의 종류에 따라 선택할 수있는 중요한 분류 평가 지표입니다.

혼동 매트릭스

출력이 둘 이상의 클래스 유형일 수있는 분류 문제의 성능을 측정하는 가장 쉬운 방법입니다. 혼동 행렬은 2 차원 즉, 표일뿐입니다. "실제"및 "예측"및 더 나아가 두 차원 모두 "참 양성 (TP)", "참 음성 (TN)", "거짓 양성 (FP)", "거짓 음성 (FN)"이 있습니다.

혼동 행렬과 관련된 용어에 대한 설명은 다음과 같습니다.

  • True Positives (TP) − 데이터 포인트의 실제 클래스와 예측 클래스가 모두 1 인 경우입니다.

  • True Negatives (TN) − 데이터 포인트의 실제 클래스와 예측 클래스가 모두 0 인 경우입니다.

  • False Positives (FP) − 실제 데이터 포인트 클래스가 0이고 예측 데이터 포인트 클래스가 1 인 경우입니다.

  • False Negatives (FN) − 데이터 포인트의 실제 클래스가 1이고 데이터 포인트의 예측 클래스가 0 인 경우입니다.

sklearn의 confusion_matrix () 함수를 사용하여 혼동 행렬을 찾을 수 있습니다. 다음 스크립트의 도움으로 우리는 위의 이진 분류기의 혼동 행렬을 찾을 수 있습니다.

from sklearn.metrics import confusion_matrix

산출

[
   [ 73   7]
   [  4 144]
]

정확성

ML 모델이 만든 정확한 예측 수로 정의 할 수 있습니다. 다음 공식을 사용하여 혼동 행렬로 쉽게 계산할 수 있습니다.

$$ = \ frac {+} {+++} $$

위에서 빌드 된 이진 분류기의 경우 TP + TN = 73 + 144 = 217 및 TP + FP + FN + TN = 73 + 7 + 4 + 144 = 228입니다.

따라서 정확도 = 217/228 = 0.951754385965는 이진 분류기를 만든 후 계산 한 것과 같습니다.

정도

문서 검색에 사용되는 정밀도는 ML 모델에서 반환 한 올바른 문서 수로 정의 될 수 있습니다. 다음 공식을 사용하여 혼동 행렬로 쉽게 계산할 수 있습니다.

$$ = \ frac {} {+ FP} $$

위에서 빌드 한 이진 분류기의 경우 TP = 73 및 TP + FP = 73 + 7 = 80입니다.

따라서 정밀도 = 73/80 = 0.915

회상 또는 감도

재현율은 ML 모델이 반환하는 긍정 수로 정의 할 수 있습니다. 다음 공식을 사용하여 혼동 행렬로 쉽게 계산할 수 있습니다.

$$ = \ frac {} {+ FN} $$

위에서 빌드 된 이진 분류기의 경우 TP = 73 및 TP + FN = 73 + 4 = 77입니다.

따라서 정밀도 = 73/77 = 0.94805

특성

리콜과 달리 특이성은 ML 모델에서 반환 된 부정적 수로 정의 될 수 있습니다. 다음 공식을 사용하여 혼동 행렬로 쉽게 계산할 수 있습니다.

$$ = \ frac {N} {N + FP} $$

위에서 빌드 된 이진 분류기의 경우 TN = 144 및 TN + FP = 144 + 7 = 151입니다.

따라서 정밀도 = 144/151 = 0.95364

다양한 ML 분류 알고리즘

다음은 몇 가지 중요한 ML 분류 알고리즘입니다.

  • 로지스틱 회귀

  • SVM (Support Vector Machine)

  • 의사 결정 트리

  • 나이브 베이 즈

  • 랜덤 포레스트

이 모든 분류 알고리즘에 대해서는 다음 장에서 자세히 설명합니다.

응용

분류 알고리즘의 가장 중요한 응용 프로그램 중 일부는 다음과 같습니다.

  • 음성 인식

  • 필기 인식

  • 생체 인식

  • 문서 분류