머신러닝 그리고 10가지 대표적인 알고리즘(1)

머신러닝은 인공지능의 한 분야로, 데이터를 분석하여 학습하고 예측하는 기술입니다. 머신러닝의 알고리즘에는 선형 회귀, 지도 학습, 비지도 학습, 강화 학습 등이 있으며, 딥러닝은 복잡한 데이터 구조를 처리하는 데 사용됩니다. 모델 성능 평가에는 Accuracy, Precision, Recall, F1 Score 등이 사용됩니다.

초보자를 위한 머신러닝

현대의 인공지능 기술은 다양한 분야에서 혁신을 이끌고 있으며, 그 중심에는 머신러닝이 자리하고 있습니다. 머신러닝은 인공지능의 한 분야로, 데이터를 분석하고 학습하여 미래를 예측하거나 패턴을 인식하는 데 중점을 둡니다. 특히, 머신러닝의 하위 분야인 딥러닝은 복잡한 데이터 구조를 처리하는 데 탁월한 성능을 발휘합니다. 그러나 많은 개발자들이 프로젝트를 수행할 때, 복잡하고 자원 소모가 큰 딥러닝으로 곧바로 접근하는 경향이 있습니다.

실제 현실 문제의 대부분은 효율적인 머신러닝 알고리즘을 통해 충분히 해결할 수 있습니다. 머신러닝은 딥러닝보다 구현이 간단하고, 자원 소모도 적기 때문에 효율성을 고려한 접근이 필수적입니다. 이에 따라, 개발자들은 항상 문제의 복잡성에 맞는 최적의 알고리즘을 선택하고, 불필요한 복잡성을 피하는 것이 중요합니다.

이 글에서는 머신러닝의 기본 개념을 다루고, 실제 문제 해결에 자주 사용되는 10가지 대표적인 알고리즘을 소개하고자 합니다. 이를 통해, 다양한 문제에 적합한 머신러닝 기법을 선택하고, 효율적으로 프로젝트를 수행할 수 있도록 도움이 되었으면 합니다.

출처 : https://synoptek.com/

1. 인공지능 (AI)

인공지능은 인간처럼 사고하고 학습하는 능력을 컴퓨터가 가지도록 만드는 기술입니다. 이 기술은 다양한 하위 분야를 포함하며, 인간의 지능적인 작업을 자동화하는 것을 목표로 합니다.

종류:

협의의 AI: 특정 작업에 특화된 AI로, 예를 들어 음성 인식, 이미지 인식, 챗봇 등이 있습니다.

일반 인공지능 (AGI): 인간처럼 모든 인지 능력을 갖춘 AI를 의미하며, 현재는 개발 초기 단계에 있고, AGI가 언제 실제로 구현될지는 여전히 불확실합니다. 그러나 많은 전문가들이 향후 10년 내에 AGI가 등장할 가능성을 보고 있으며, 일부는 2027년과 같은 이른 시기를 제시하기도 합니다. AGI가 실제로 구현되기 위해서는 기술적 발전 외에도 사회적, 윤리적 문제를 해결하는 것이 중요합니다.

2. 머신러닝 (ML)

머신러닝은 데이터를 분석하여 패턴을 학습하고, 이를 바탕으로 미래의 데이터를 예측하거나 분류하는 기술입니다. 이는 인공지능의 한 부분입니다.

핵심 개념:

지도 학습: 입력과 출력 데이터가 주어지며, 모델이 이를 학습합니다. 예를 들어, 고양이와 개 이미지를 분류하는 작업.

비지도 학습: 출력 데이터가 없이 입력 데이터의 구조를 학습합니다. 예를 들어, 데이터 클러스터링.

강화 학습: 에이전트가 환경과 상호작용하며 보상을 통해 학습합니다. 예를 들어, 게임 플레이어 AI.

3. 딥러닝 (DL)

딥러닝은 머신러닝의 하위 분야로, 인공 신경망을 사용하여 데이터를 학습하는 기술입니다. 특히, 복잡한 데이터 구조를 처리하는 데 유용합니다.

특징:

인공 신경망: 인간 뇌의 뉴런 구조를 모방한 신경망을 사용하여 학습합니다.

층(layer): 다수의 은닉층(hidden layers)을 가진 깊은 신경망 구조를 통해 복잡한 패턴을 학습할 수 있습니다.

출처 : https://synoptek.com/

머신러닝의 성능 평가 지표

머신러닝 모델의 성능을 평가할 때 자주 사용되는 지표들 중 Accuracy, Precision, Recall을 상세하게 설명하는 표를 아래에 제공합니다.

지표설명계산 공식의미장단점
Accuracy전체 예측 중에서 맞게 예측한 비율을 의미합니다.(TP + TN) / (TP + TN + FP + FN)모델이 전체적으로 얼마나 잘 맞추는지를 나타냅니다.장점: 직관적이고 이해하기 쉽습니다.
단점: 데이터의 불균형 문제를 해결하지 못합니다.
Precision양성으로 예측한 것들 중에서 실제로 양성인 것들의 비율을 의미합니다.TP / (TP + FP)모델이 양성이라고 예측한 것들 중에서 실제로 양성인 경우의 비율을 나타냅니다.장점: FP(위양성, False Positive)를 줄이는데 유용합니다.
단점: FN(위음성, False Negative)을 고려하지 않습니다.
Recall실제 양성 중에서 모델이 양성으로 잘 맞춘 비율을 의미합니다.TP / (TP + FN)실제 양성 중에서 모델이 양성으로 잘 예측한 비율을 나타냅니다.장점: FN(위음성, False Negative)를 줄이는데 유용합니다.
단점: FP(위양성, False Positive)을 고려하지 않습니다.
F1 ScorePrecision과 Recall의 조화 평균으로, 두 지표의 균형을 평가합니다.2 * (Precision * Recall) / (Precision + Recall)Precision과 Recall의 균형을 고려하여 모델의 성능을 평가합니다.장점: Precision과 Recall의 균형을 맞출 수 있습니다.
단점: 직관적으로 이해하기 어렵고, 데이터 불균형 문제를 해결하지 못합니다.
  • TP (True Positive): 모델이 양성이라고 예측했는데 실제로도 양성인 경우
  • TN (True Negative): 모델이 음성이라고 예측했는데 실제로도 음성인 경우
  • FP (False Positive): 모델이 양성이라고 예측했는데 실제로는 음성인 경우 (위양성)
  • FN (False Negative): 모델이 음성이라고 예측했는데 실제로는 양성인 경우 (위음성)

이 표를 통해 각 성능 평가 지표의 개념과 장단점을 쉽게 이해할 수 있을 것입니다. 머신러닝 모델을 평가할 때, 상황과 목적에 맞는 지표를 선택하는 것이 중요합니다.

Issue: 언제 Accuracy보다 Precision과 Recall을 사용하는 것이 더 유리할까요?

Clue: Accuracy는 전체 예측 중에서 맞게 예측한 비율을 의미하지만, 데이터가 불균형할 때는 유용하지 않을 수 있습니다. Precision과 Recall을 사용하는 것이 더 유리한 상황은 다음과 같습니다:

  1. 불균형 데이터셋: 데이터셋에서 양성(Positive)과 음성(Negative) 클래스의 비율이 크게 다른 경우, Accuracy는 높은 값이 나올 수 있지만 이는 잘못된 인사이트를 줄 수 있습니다. 예를 들어, 전체 데이터의 95%가 음성이고 5%가 양성인 경우, 모든 데이터를 음성으로 예측해도 Accuracy는 95%가 됩니다. 하지만 이는 실제 모델 성능을 반영하지 않습니다.
  2. False Positive(FP)와 False Negative(FN)의 비용이 다를 때: 특정 도메인에서는 FP와 FN의 비용이 다릅니다. 예를 들어, 암 진단 시스템에서는 FN (암을 놓치는 경우)이 더 치명적입니다. 반면, 스팸 필터링 시스템에서는 FP (정상 메일을 스팸으로 분류하는 경우)가 더 문제가 될 수 있습니다. 이런 경우 Precision (FP를 줄이는 데 중점)이나 Recall (FN를 줄이는 데 중점)을 사용하는 것이 더 유리합니다.
  3. 의료 분야: 환자가 병을 가지고 있는지 예측하는 모델에서는 환자를 놓치는 것(FN)이 큰 문제가 됩니다. 이럴 때는 Recall이 중요합니다. 반면, 약물 추천 시스템에서는 잘못된 약을 추천하는 것(FP)을 피하는 것이 중요할 수 있으며, 이럴 때는 Precision이 중요합니다.

Issue: F1 Score를 사용할 때의 이점과 한계는 무엇인가요?

이점:

  1. 균형된 평가: Precision과 Recall 사이의 균형을 평가하는 지표로, 둘 중 하나에 치우치지 않고 전체적인 모델 성능을 평가할 수 있습니다. Precision과 Recall이 어느 하나 매우 낮은 경우 F1 Score도 낮게 나오기 때문에 두 지표를 동시에 고려하게 됩니다.
  2. 유연성: 특정 상황에서 Precision과 Recall 중 어느 하나에 더 중점을 두고 싶을 때 조정할 수 있는 가중 F1 Score (β-Score)도 있습니다. β는 Precision과 Recall의 중요도를 조정하는 파라미터입니다.

한계:

  1. 직관성 부족: Accuracy처럼 직관적으로 이해하기 어려울 수 있습니다. 특히 비전문가나 비기술적 이해관계자에게 설명할 때는 어려움이 있습니다.
  2. 데이터 불균형 문제 해결 미흡: F1 Score도 데이터 불균형 문제를 완전히 해결하지 못합니다. 데이터가 매우 불균형한 경우, 여전히 모델의 성능을 과대평가할 가능성이 있습니다.

Issue: 데이터 불균형 문제를 해결하기 위해 사용할 수 있는 다른 평가 지표는 무엇이 있나요?

Clue: 데이터 불균형 문제를 해결하기 위해 사용할 수 있는 평가 지표에는 다음과 같은 것들이 있습니다:

  1. ROC-AUC (Receiver Operating Characteristic – Area Under Curve): 모델의 분류 성능을 평가하는 지표로, 모든 가능한 Threshold에 대해 TPR(True Positive Rate)과 FPR(False Positive Rate)의 변화를 시각화한 곡선입니다. AUC는 이 곡선 아래 면적을 의미하며, 1에 가까울수록 좋은 성능을 의미합니다. 데이터 불균형 문제에도 상대적으로 강합니다.
  2. Precision-Recall Curve: Precision과 Recall의 관계를 시각화한 곡선입니다. 특히 데이터가 불균형할 때 유용하며, 높은 Precision과 Recall을 동시에 유지하는지 평가할 수 있습니다.
  3. Balanced Accuracy: 데이터가 불균형할 때 Accuracy를 보완하기 위한 지표로, 양성 클래스와 음성 클래스에서 각각의 Accuracy를 평균한 값입니다. (Sensitivity + Specificity) / 2로 계산됩니다.
  4. Cohen’s Kappa: 분류기의 예측이 무작위로 이루어진 경우와 비교하여 모델의 성능을 평가하는 지표입니다. -1에서 1까지의 값을 가지며, 1에 가까울수록 좋은 성능을 의미합니다.
  5. F2 Score: F1 Score의 변형으로, Recall에 더 많은 가중치를 부여한 지표입니다. Recall이 Precision보다 더 중요한 경우에 사용합니다.

Issue: Precision과 Recall의 중요도를 상황에 맞게 조절할 수 있는 방법에는 어떤 것들이 있을까요?

Clue: Precision과 Recall의 중요도를 상황에 맞게 조절하는 방법에는 다음과 같은 것들이 있습니다:

  1. Threshold 조정: 분류 모델의 결정 임계값을 조정하여 Precision과 Recall을 조절할 수 있습니다. 예를 들어, 임계값을 높이면 Precision이 증가하고 Recall이 감소할 수 있으며, 반대로 임계값을 낮추면 Recall이 증가하고 Precision이 감소할 수 있습니다. 이를 통해 특정 상황에 맞춰 두 지표의 균형을 맞출 수 있습니다.
  2. 가중 F1 Score (β-Score): β-Score는 Precision과 Recall의 중요도를 조정할 수 있는 방법입니다. F1 Score는 Precision과 Recall을 동일하게 취급하지만, β-Score는 β 값을 조정하여 한쪽에 더 많은 가중치를 줄 수 있습니다. 예를 들어, β가 2이면 Recall이 Precision보다 두 배 더 중요하게 고려됩니다.
    • 공식: Fβ = (1+β2)⋅( Precision⋅Recall​ ) / ( β2⋅Precision+Recall )
  3. 비용 민감 학습 (Cost-sensitive Learning): 모델 학습 시 비용 행렬을 사용하여 FP와 FN에 서로 다른 비용을 부여할 수 있습니다. 이를 통해 특정 유형의 오류를 줄이도록 모델을 학습시킬 수 있습니다. 예를 들어, FP의 비용이 높다면 Precision을 높이는 방향으로 학습할 수 있습니다.
  4. 클래스 가중치 조정: 학습 알고리즘에 클래스 가중치를 적용하여 모델이 양성 클래스와 음성 클래스를 다르게 다루도록 할 수 있습니다. 데이터 불균형 문제를 해결하고 특정 클래스의 성능을 향상시키는 데 유용합니다.
  5. 앙상블 방법: 여러 모델을 결합하여 Precision과 Recall의 균형을 맞출 수 있습니다. 예를 들어, 특정 모델은 Precision을, 다른 모델은 Recall을 최적화하도록 학습시키고 이를 앙상블하여 최종 예측을 생성할 수 있습니다.

Issue: ROC-AUC와 Precision-Recall Curve를 실제 프로젝트에서 어떻게 활용할 수 있나요?

Clue: ROC-AUC와 Precision-Recall Curve는 모델의 성능을 시각화하고 평가하는 데 매우 유용합니다. 이를 실제 프로젝트에서 활용하는 방법은 다음과 같습니다:

  1. 모델 비교: 여러 모델을 비교할 때 ROC-AUC와 Precision-Recall Curve를 사용하여 각 모델의 성능을 평가할 수 있습니다. AUC 값이 높을수록, Precision-Recall Curve의 면적이 넓을수록 더 나은 모델임을 나타냅니다. 특히 데이터 불균형 문제를 다룰 때 Precision-Recall Curve가 더 유용할 수 있습니다.
  2. 임계값 선택: ROC Curve와 Precision-Recall Curve를 사용하여 최적의 결정 임계값을 선택할 수 있습니다. 예를 들어, 특정 TPR과 FPR, 또는 Precision과 Recall의 균형을 맞추는 임계값을 시각적으로 선택할 수 있습니다.
  3. 모델 튜닝: 모델의 하이퍼파라미터를 튜닝할 때, ROC-AUC와 Precision-Recall Curve를 사용하여 최적의 파라미터를 찾을 수 있습니다. 다양한 파라미터 설정에 대한 곡선을 그려보고 가장 좋은 성능을 보이는 파라미터를 선택합니다.
  4. 불균형 데이터 처리: 불균형 데이터셋에서 ROC Curve와 Precision-Recall Curve는 성능 평가에 특히 유용합니다. 데이터가 불균형할 때는 Precision-Recall Curve가 더 나은 지표로 사용될 수 있습니다. 이러한 곡선을 통해 모델이 불균형 데이터를 얼마나 잘 처리하는지 평가할 수 있습니다.
  5. 커뮤니케이션: 모델 성능을 이해관계자에게 설명할 때, ROC Curve와 Precision-Recall Curve는 시각적으로 이해하기 쉬운 도구입니다. 모델의 성능을 시각화하여 설명하면, 비전문가도 성능 차이를 쉽게 이해할 수 있습니다.

Issue: Cohen’s Kappa가 무엇이며, 이를 사용하여 모델의 성능을 평가할 때 어떤 이점이 있나요?

Clue: Cohen’s Kappa는 관찰자 간의 일치도를 측정하는 통계 지표로, 분류 모델의 성능을 평가할 때도 사용됩니다. 모델의 예측이 무작위로 이루어진 경우와 비교하여 모델의 성능을 평가합니다.

  • 공식: 𝜅=(𝑃𝑜−𝑃𝑒) / (1−𝑃𝑒)​​
    • 𝑃𝑜​: 관찰된 일치도 (모델의 정확도)
    • 𝑃𝑒​: 기대 일치도 (무작위로 예측했을 때의 정확도)

이점:

  1. 무작위 예측 대비 성능 평가: Cohen’s Kappa는 모델의 예측이 무작위로 이루어진 경우와 비교하여 성능을 평가하므로, 단순한 Accuracy보다 더 신뢰할 수 있는 평가 지표가 됩니다. 무작위 예측의 기대치를 고려하므로 더 정확한 평가가 가능합니다.
  2. 클래스 불균형 고려: 데이터셋이 불균형한 경우에도 적절하게 모델 성능을 평가할 수 있습니다. P_e 값이 클래스 비율에 기반하므로, 불균형 데이터에서도 높은 신뢰성을 유지합니다.
  3. 종합적 평가: Accuracy가 높은 모델이 실제로는 좋은 모델이 아닐 수 있는 상황에서, Cohen’s Kappa는 무작위 예측을 고려하여 더 종합적인 평가를 제공합니다. 특히 다수 클래스 문제에서 유용합니다.
  4. 범용성: 다양한 도메인에서 사용될 수 있으며, 의료, 심리학, 교육 등 여러 분야에서 관찰자 간 일치도를 평가하는 데 널리 사용됩니다.
  5. 해석 용이성: Kappa 값은 -1에서 1 사이의 값을 가지며, 1에 가까울수록 높은 일치도를 의미합니다. 일반적으로 0.6 이상이면 좋은 일치도로 간주됩니다.
  • Interpretation:
    • 𝜅<0: 일치도가 없음 (무작위 예측보다 나쁨)
    • 0≤𝜅<0.2: 매우 낮은 일치도
    • 0.2≤𝜅<0.4: 낮은 일치도
    • 0.4≤𝜅<0.6: 보통의 일치도
    • 0.6≤𝜅<0.8: 높은 일치도
    • 0.8≤𝜅≤1.0: 매우 높은 일치도

이러한 지표들은 데이터의 특성과 목적에 따라 선택하여 사용하면 데이터 불균형 문제를 보다 효과적으로 해결할 수 있습니다.

머신러닝 대표적인 알고리즘 10가지

1. Linear Regression(선형 회귀)

선형 회귀는 특정 데이터를 기반으로 다양한 예측을 할 수 있는 감독학습의 한 형태입니다. 예를 들어, 집 가격, 사람의 키와 몸무게, 국가의 출생률과 같은 수치를 예측할 때 주로 사용됩니다.

선형 회귀의 기본 원리

선형 회귀는 입력 변수(독립 변수라고도 함)와 예측하고자 하는 변수(종속 변수 또는 목표 변수라고도 함) 사이의 선형 관계를 포착합니다. 즉, 한 변수의 변화가 다른 변수에 어떻게 영향을 미치는지를 수학적으로 모델링한 것입니다.

예제를 통한 설명

1. 택시 요금 예측: 집에서 공항까지 택시를 탔을 때, 요금은 주로 거리에 따라 결정됩니다. 거리가 멀어질수록 요금이 올라가고, 거리가 가까우면 요금이 낮아집니다. 이 경우 거리는 택시 요금과 선형적으로 연관되어 있습니다.

2. 집 가격 예측: 구매하려는 집의 크기가 클수록 가격도 높아집니다. 집의 크기는 집 가격과 선형적으로 비례 관계에 있습니다.

선형 회귀의 수학적 모델

선형 회귀를 수학적으로 표현하면 다음과 같은 간단한 방정식으로 나타낼 수 있습니다:

[latex]\hat{y} = \theta_0 + \theta_1x_1[/latex]

• [latex]\hat{y}[/latex] : 예측값 (택시 요금)
• [latex]\theta_0[/latex] : 절편 (기본 요금 등)
• [latex]\theta_1[/latex] : 첫 번째 예측 변수의 가중치
• [latex]x_1[/latex] : 첫 번째 예측 변수의 값 (예: 거리)

이 방정식을 사용하여 예를 들어 택시 요금을 예측할 수 있습니다. 택시 요금은 거리에 따라 달라지며, 절편은 택시에 탑승하는 순간부터 부과되는 기본 요금일 수 있습니다.

실제 데이터로 모델링

실제 데이터를 사용하여 선형 회귀 모델을 만들 때는 과거 데이터에 기반한 최적의 선(회귀선)을 찾습니다. 이 회귀선은 데이터 포인트와 선 사이의 차이(오차)를 최소화하여, 미래의 값을 가장 잘 예측할 수 있도록 합니다.

선형 회귀는 다양한 변수를 포함한 복잡한 현실 세계 문제에 적용되기도 합니다. 예를 들어, 택시 요금을 예측할 때는 거리뿐만 아니라 시간대, 위치 등 다양한 변수가 고려될 수 있습니다.

선형 회귀 모델의 실용적 예시

다음은 선형 회귀가 실생활에서 어떻게 활용될 수 있는지를 보여주는 추가 예시입니다:

1. 건강 예측: 의료 데이터를 이용하여 환자의 체중과 키를 바탕으로 그들의 건강 상태를 예측할 수 있습니다. 예를 들어, 심장 질환의 위험성을 평가할 때 체중과 키 외에도 혈압, 콜레스테롤 수치 등 여러 변수를 사용할 수 있습니다.

2. 경제 분석: 경제 데이터를 분석하여 국가의 출생률과 같은 인구 통계적 지표를 예측할 수 있습니다. 이러한 분석은 정부가 정책을 결정하는 데 중요한 정보를 제공할 수 있습니다.

Sci-kit Learn으로 실행해보기

선형 회귀에 대해 먼저 논의할 것이므로 회귀 작업에 이상적인 scikit-learn에 사전 로드된 데이터 세트인 당뇨병 데이터 세트를 사용하겠습니다.

아래 코드 블록에서 수행할 단계는 다음과 같습니다.

  1. 당뇨병 데이터 세트 로드 : 연령, 성별, BMI, 평균 혈압, 당뇨병 환자에 대한 6가지 혈청 측정값을 포함한 10개의 기본 변수가 이 데이터 세트에 포함되어 있습니다.
  2. 데이터 세트 분할 : 학습 세트와 테스트 세트로 나눕니다.
  3. 선형 회귀 모델 생성 및 훈련 : 훈련 세트를 사용하여 모델을 구축합니다.
  4. 예측 및 평가 : 테스트 세트를 사용하여 예측한 다음 MSE 및 R-제곱을 사용하여 모델을 평가합니다.
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt

# Load the Diabetes dataset
diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target

# Splitting the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Creating and training the Linear Regression model
model = LinearRegression()
model.fit(X_train, y_train)

# Predicting the test set results
y_pred = model.predict(X_test)

# Evaluating the model
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

# Scatter plot of actual vs. predicted values
fig, ax = plt.subplots(1, 2, figsize=(12, 5))


ax[0].scatter(y_test, y_pred, color='blue', alpha=0.5)
ax[0].plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'k--', lw=2)
ax[0].set_xlabel('Actual')
ax[0].set_ylabel('Predicted')
ax[0].set_title('Actual vs. Predicted Values')

# Line plot of the predicted values vs. actual values
ax[1].plot(y_test, label='Actual Values', color='red', marker='o')
ax[1].plot(y_pred, label='Predicted Values', color='blue', marker='x')
ax[1].set_title('Comparison of Actual and Predicted Values')
ax[1].legend()

plt.tight_layout()
plt.show()

print("MSE is:", mse)
print("R2 score is:", r2)

MSE is: 2900.193628493482

R2 score is: 0.4526027629719195

이 결과는 우리의 선형 회귀 모델이 당뇨병 데이터셋의 분산 중 약 45%를 설명한다는 것을 보여줍니다. 평균 제곱 오차(MSE)는 우리의 예측이 실제 값에서 평균적으로 약 2900 단위 정도 떨어져 있다는 것을 알려줍니다.

선형 회귀의 한계

선형 회귀 모델은 매우 유용하지만 모든 유형의 데이터에 적합한 것은 아닙니다. 예를 들어, 변수 간의 관계가 비선형적일 때는 선형 회귀 모델로는 정확한 예측을 할 수 없습니다. 이러한 경우, 다항 회귀나 다른 비선형 회귀 기법이 더 적합할 수 있습니다.

학습결과

선형 회귀는 데이터 과학과 통계학의 기초를 이해하는 데 매우 중요합니다. 초보자들이 이 모델을 학습함으로써, 더 복잡한 기계 학습 알고리즘과 인공지능 시스템의 작동 원리에 대한 이해를 높일 수 있습니다. 데이터를 통해 세상을 해석하는 방법과 의사결정 과정에서 이러한 모델이 어떻게 활용될 수 있는지를 배우게 됩니다.

2. Logistic Regression(로지스틱 회귀)

로지스틱 회귀는 선형 회귀와 비슷한 개념을 사용합니다. 선형 회귀가 연속 데이터를 위한 머신러닝 접근 방식으로 잘 알려져 있듯이, 로지스틱 회귀도 특징의 선형 결합을 사용하여 비용 함수를 계산하고 가중치를 최적화합니다. 그러나 ‘회귀’라는 용어는 로지스틱 회귀 과정 자체를 의미하지는 않습니다. 대부분의 사람들이 회귀를 생각할 때 선형 회귀를 떠올리기 때문에 ‘로지스틱 회귀’라는 용어는 오해의 소지가 있습니다. 로지스틱 회귀는 상수 변수를 예측하는 기술이 아닌 분류 기법입니다.

가장 잘 알려진 방법은 아마도 선형 회귀일 것입니다. 선형 회귀는 연속적인 종속 변수와 연속적이거나 이산적인 독립 변수 사이에 선형 관계가 있을 때 사용됩니다.

종속 변수 Y의 값이 범주형일 때, 예를 들어 예/아니오, 참/거짓, 피험자가 행동을 했거나 하지 않았을 때는 로지스틱 회귀를 사용해야 합니다. 종속 변수가 범주형이고 독립 변수에 따라 달라지는 경우 로지스틱 회귀를 사용합니다. 선형 회귀는 보통 “얼마나 많은가?“라는 질문에 답합니다. 예를 들어, 이전 예에서처럼 택시 요금이 얼마인지 예측합니다. 그러나 택시 기사가 시간대나 위치를 기반으로 예약을 수락할지 예측하려면 예/아니오로 예측이 이루어지며, 이는 택시 기사가 예약을 수락할지 여부를 예측하려고 합니다. 종속 변수가 범주형인 이러한 질문에 대해 로지스틱 회귀를 사용할 수 있습니다. 따라서 로지스틱 회귀는 두 가지 결과만을 가진 이진 분류기입니다.

선형 회귀에서 추세선은 직선이기 때문에 선형 회귀라고 부릅니다. 그러나 선형 회귀를 사용하여 출력을 두 가지 구분된 범주(예/아니오)로 나눌 수는 없습니다. 결과를 두 범주로 나누려면 0과 1 사이에서 선을 자르는 시그모이드 함수를 사용해야 합니다.

로지스틱 회귀의 가장 간단한 형태의 방정식은 다음과 같습니다:

[latex]f(x) = \frac{1}{1 + e^{-x}}[/latex]

머신러닝, 시그모이드 함수

이 함수는 로지스틱 회귀에서 사용됩니다. 이 알고리즘은 보통 이진 분류 문제(두 가지 결과만 있는 문제)가 있을 때 사용됩니다. 따라서 위의 시그모이드 함수에서 나온 값에 따라 예측을 합니다. 즉, 값이 0.5보다 크면 데이터 포인트를 1로 분류하고, 0.5보다 작으면 0으로 분류합니다.

[latex]
y =
\begin{cases}
0, & \text{if } p < 0.5 \\ 1, & \text{if } p \geq 0.5 \end{cases} [/latex]

요약하자면, 출력 또는 종속 변수가 연속적이 아닌 이진형일 때 로지스틱 회귀 모델을 사용해야 합니다. 로지스틱 회귀 모델의 훈련 과정에 대한 자세한 정보는 머신러닝에서 분류에 관한 글을 참고하실 수 있습니다.

로지스틱 회귀는 기본적으로 선형 회귀와 유사한 방정식을 사용하지만, 출력을 확률 값으로 변환하여 특정 임계값(일반적으로 0.5)을 기준으로 데이터를 두 범주 중 하나로 분류합니다. 이러한 특성 덕분에 로지스틱 회귀는 의료, 금융, 마케팅 등 다양한 분야에서 의사결정 지원 도구로 활용될 수 있습니다. 예를 들어, 의료 분야에서는 환자가 특정 질병을 가지고 있는지 여부를 예측하는 데 로지스틱 회귀가 사용될 수 있습니다. 금융 분야에서는 고객이 대출을 상환할 수 있을지 여부를 예측하는 데 사용될 수 있습니다.

이러한 분류 방식은 실제 세계의 많은 문제들이 예/아니오, 참/거짓과 같이 이진적인 결정을 필요로 하는 경우가 많기 때문에 특히 유용합니다. 로지스틱 회귀는 입력 데이터의 선형 조합을 사용하여 예측을 수행하면서 동시에 출력을 이진 카테고리로 제한하는 강력한 메커니즘을 제공합니다.

평가 지표
  • 정확도 : 정확도는 전체 관측치에 대한 정확하게 예측된 관측치의 비율입니다.
  • 정밀도 및 재현율 : 정밀도는 예상되는 모든 긍정적 관측치에 대한 올바르게 예측된 긍정적 관측치의 비율입니다. 재현율은 실제 클래스에서 수행된 모든 관찰에 대해 정확하게 예측된 긍정적인 관찰의 비율입니다.
  • F1 점수 : 재현율과 정밀도 사이의 균형입니다.
Sci-kit Learn으로 실행해보기

scikit-learn에 미리 로드된 또 다른 데이터세트인 유방암 데이터세트입니다. 이진 분류에 사용되므로 로지스틱 회귀에 적합합니다.

로지스틱 회귀를 적용하기 위해 따라야 할 단계는 다음과 같습니다.

  1. 유방암 데이터 세트 로드 : 이 데이터 세트에는 유방 덩어리의 FNA(세침 흡인)의 디지털화된 이미지에서 계산된 기능이 포함되어 있으며, 이를 양성 또는 악성으로 분류하는 것이 목표입니다.
  2. 데이터 세트 분할: 훈련 세트와 테스트 세트로 나눕니다.
  3. 로지스틱 회귀 모델 생성 및 훈련 : 훈련 세트를 사용하여 모델을 구축합니다.
  4. 예측 및 평가: 테스트 세트를 사용하여 예측한 다음 정확도, 정밀도, 재현율 및 F1 점수를 사용하여 모델을 평가합니다.

from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score


# Load the Breast Cancer dataset
breast_cancer = load_breast_cancer()
X, y = breast_cancer.data, breast_cancer.target

# Splitting the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Creating and training the Logistic Regression model
model = LogisticRegression(max_iter=10000)
model.fit(X_train, y_train)

# Predicting the test set results
y_pred = model.predict(X_test)

# Evaluating the model
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)

# Print the results
print("Accuracy:", accuracy)
print("Precision:", precision)
print("Recall:", recall)
print("F1 Score:", f1)

Accuracy: 0.956140350877193

Precision: 0.9459459459459459

Recall: 0.9859154929577465

F1 Score: 0.9655172413793103

높은 재현율은 모델이 의료 진단에 중요한 악성 사례를 식별하는 데 특히 뛰어나다는 것을 나타냅니다.

무엇보다 로지스틱 회귀의 효과적인 사용을 위해서는 적절한 변수 선택, 데이터 전처리 및 매개변수 조정이 필수적입니다. 이 모델의 성능은 사용되는 데이터의 질과 함께 훈련 데이터에 잘 맞도록 모델을 조정하는 능력에 크게 의존합니다. 따라서, 모델을 훈련시키고 테스트하는 과정에서 데이터의 특성을 정확히 이해하고 이에 맞는 접근 방법을 선택하는 것이 중요합니다.

Decision Tree(결정트리)는 2번째 문서에서 이어가겠습니다. 그 전에 중요한 과대적합에 대해 알아보겠습니다.

Overfitting(과대적합)

과대적합(Overfitting)은 머신러닝 모델이 훈련 데이터에 과도하게 학습하여, 훈련 데이터에 대한 성능은 매우 뛰어나지만 새로운 데이터나 테스트 데이터에 대해 일반화하지 못하는 현상을 말합니다. 이는 모델이 훈련 데이터의 노이즈나 세부적인 패턴을 과하게 학습했기 때문에 발생합니다. 과대적합의 문제를 해결하는 방법에는 여러 가지가 있습니다.

현상:

• 모델이 훈련 데이터에 과하게 맞춰져서, 훈련 데이터에서는 매우 높은 성능을 보이지만 테스트 데이터에서는 성능이 떨어지는 현상입니다.

• 훈련 데이터에 있는 세부적인 패턴이나 노이즈를 과도하게 학습한 결과입니다.

해결 방안:
1. 정규화 기법 (Regularization):

• 모델의 복잡도를 줄여 과대적합을 방지하는 방법입니다.

L1 정규화 (Lasso): 모델의 일부 계수를 0으로 만들어 특성 선택을 자동으로 수행합니다.

L2 정규화 (Ridge): 모델의 계수를 작게 만들어 과대적합을 방지합니다.

Elastic Net: L1과 L2 정규화를 결합한 방법입니다.

from sklearn.linear_model import Ridge
model = Ridge(alpha=1.0)
model.fit(X_train, y_train)
2. 앙상블 기법 (Ensemble Methods):

• 여러 모델을 결합하여 예측 성능을 향상시키는 방법입니다.

배깅 (Bagging): 여러 개의 학습 데이터 샘플을 랜덤하게 생성하고 각각의 샘플로 학습한 여러 모델을 결합합니다.

• 대표적인 예: 랜덤 포레스트 (Random Forest)

from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)

부스팅 (Boosting): 모델을 순차적으로 학습시키면서 이전 모델이 잘못 예측한 데이터를 더 중점적으로 학습합니다.

• 대표적인 예: 그라디언트 부스팅 (Gradient Boosting), XGBoost

from sklearn.ensemble import GradientBoostingClassifier
model = GradientBoostingClassifier(n_estimators=100)
model.fit(X_train, y_train)
3. 프루닝 (Pruning):

• 결정 트리에서 가지치기를 통해 모델의 복잡도를 줄이는 방법입니다.

• 불필요한 가지를 제거하여 모델의 일반화 성능을 향상시킵니다.

• 사전 가지치기 (Pre-pruning): 트리 생성 중간에 더 이상 가지를 치지 않도록 하는 방법입니다.

• 사후 가지치기 (Post-pruning): 트리 생성 후 불필요한 가지를 제거하는 방법입니다.

from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(max_depth=3)  # 사전 가지치기 예시
model.fit(X_train, y_train)
4. 더 많은 데이터 수집 또는 데이터 증강 (Data Augmentation):

• 더 많은 데이터를 수집하여 모델이 더 다양한 패턴을 학습할 수 있게 합니다.

• 데이터 증강 기법을 사용하여 기존 데이터를 변형하거나 늘려 데이터 양을 증가시킵니다.

• 이미지 데이터의 경우 회전, 반전, 노이즈 추가 등의 방법을 사용할 수 있습니다.

from keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    horizontal_flip=True
)
datagen.fit(X_train)

다음편은 Decision Tree(결정트리)로 이어집니다.

참고) https://www.stratascratch.com/blog/machine-learning-algorithms-you-should-know-for-data-science/?utm_source=blog&utm_medium=click&utm_campaign=medium+ml+algorithms+for+beginners