머신러닝(Machine Learning) 후반전 - 모델 선택 및 학습 실습

728x90
반응형

 

머신러닝 후반전
데이터 스플릿(Data Split) → 모델 선택 및 학습 → 모델 검증 및 하이퍼파라미터 튜닝 → 성능 평가

 

 

머신러닝 모델 선택 및 학습

 

서론

 

머신러닝의 세계는 깊이 있고 복잡합니다. 이를 이해하는 데 필요한 핵심 요소 중 하나는 바로 '모델 선택 및 학습'입니다. 머신러닝의 학습 방법에 따라 지도학습, 비지도학습, 강화학습으로 분류되며, 이들 각각은 다양한 문제 해결에 적합한 도구입니다.

 

지도학습은 레이블이 붙은 데이터를 통해 모델을 학습시키는 방법으로, 분류와 회귀 문제를 주로 해결합니다. 분류는 레이블이 명확한 클래스로 나눠져 있는 경우에 사용되며, 회귀는 연속적인 수치를 예측하는 경우에 사용됩니다.

 

한편, 비지도학습은 레이블이 없는 데이터를 통해 숨겨진 패턴이나 구조를 찾아내는 학습 방법입니다. 클러스터링, 차원 축소, 생성 모델 등의 문제를 해결하는 데 주로 사용되며, 비슷한 특성을 가진 데이터들을 같은 그룹으로 묶는 클러스터링이 대표적인 예입니다.

 

강화학습은 환경과 상호작용하며, 보상을 최대화하는 방향으로 학습하는 방법입니다. 게임 이론, 로봇 학습, 자율주행 등 다양한 분야에서 활용되며, 이는 머신이 스스로 학습하고 성장하는 능력을 보여주는 좋은 예입니다.

 

이제 이 글에서는 이러한 학습 방법을 바탕으로 모델을 어떻게 선택하고 학습시키는지에 대해 실제적인 예시와 함께 설명하려 합니다. 이를 통해 머신러닝의 핵심 원리를 이해하고, 실제 문제에 어떻게 적용하는지에 대한 실질적인 지식을 얻을 수 있기를 바랍니다. 머신러닝(Machine Learning) 후반전 - 모델 선택 및 학습 실습 진행하겠습니다.

 

관련된 내용들은 아래의 글들을 참고하여주시길 바라겠습니다.

 

머신러닝(Machine Learning)은 무엇일까요? (tistory.com)

 

머신러닝(Machine Learning)은 무엇일까요?

서론 머신러닝(Machine Learning)은 무엇일까요? 머신러닝은 데이터를 다루는 방법 중 하나입니다. 데이터는 우리가 세상을 이해하고 예측하는 데 필요한 중요한 도구입니다. 이러한 데이터를 통해

10yp.tistory.com

회귀(Regression)은 무엇일까요? (tistory.com)

 

회귀(Regression)은 무엇일까요?

서론 회귀(Regression)은 무엇일까요? 회귀 분석은 통계학에서 가장 오래되고 널리 사용되는 예측 모델 중 하나입니다. 이는 두 변수 사이의 관계를 모델링하는 데 사용되며, 이 관계는 선형적이라

10yp.tistory.com

분류(Classification)은 무엇일까요? (tistory.com)

 

분류(Classification)은 무엇일까요?

서론 분류(Classification)은 무엇일까요? 분류와 회귀는 기계학습 알고리즘의 두 가지 주요한 유형으로, 서로 다른 문제를 해결하기 위해 개발되었습니다. 회귀 분석은 19세기에 Sir Francis Galton이 개

10yp.tistory.com

머신러닝(Machine Learning) 학습(Training) 기초 (tistory.com)

 

머신러닝(Machine Learning) 학습(Training) 기초

서론 머신러닝의 핵심적인 과정 중 하나는 바로 'Training'입니다. 이는 노래를 배우는 사람이 여러 번 연습을 통해 음정을 맞추고, 복잡한 곡을 연주하는 기술을 향상시키는 과정에 비유할 수 있

10yp.tistory.com

 

모델 선택

 

모델 선택은 머신러닝의 핵심 과정 중 하나로, 특정 문제에 가장 적합한 알고리즘을 찾아내는 단계입니다. 이는 문제의 유형, 데이터의 특성, 그리고 목표에 따라 결정됩니다. 이제 몇 가지 주요 문제 유형과 그에 따른 모델 선택에 대해 살펴보겠습니다.

 

1. 분류(Classification) 문제: 이는 레이블이 분명한 여러 클래스 중 하나를 예측하는 문제입니다. 예를 들어, 고객 이탈 예측, 스팸 메일 필터링, 질병 진단 등이 분류 문제에 해당합니다. 이러한 문제에는 로지스틱 회귀(Logistic Regression), 서포트 벡터 머신(SVM), 결정 트리(Decision Tree), 랜덤 포레스트(Random Forest), 그래디언트 부스팅(Gradient Boosting), 신경망(Neural Networks) 등의 모델이 사용될 수 있습니다.

2. 회귀(Regression) 문제: 이는 연속적인 값을 예측하는 문제입니다. 예를 들어, 주택 가격 예측, 매출 예측, 온도 예측 등이 회귀 문제에 해당합니다. 이러한 문제에는 선형 회귀(Linear Regression), 릿지(Ridge), 라쏘(Lasso), 엘라스틱넷(ElasticNet), 서포트 벡터 회귀(SVR), 신경망(Neural Networks) 등의 모델이 사용될 수 있습니다.

3. 클러스터링(Clustering) 문제: 이는 정답(타겟 벡터)가 없는 데이터를 비슷한 특성을 가진 데이터를 그룹으로 묶는 문제입니다. 예를 들어, 고객 세분화, 유전자 분류, 이미지 세분화 등이 클러스터링 문제에 해당합니다. 이러한 문제에는 K-평균(K-Means), 계층적 클러스터링(Hierarchical Clustering), DBSCAN, 스펙트럴 클러스터링(Spectral Clustering) 등의 모델이 사용될 수 있습니다.

 

각 문제 유형에 따라 적합한 모델이 다르며, 특정 모델이 항상 최상의 성능을 보장하는 것은 아닙니다. 따라서 여러 모델을 실험해 보고, 그 중 가장 좋은 성능을 보이는 모델을 선택하는 것이 중요합니다. 이는 머신러닝의 '모델 선택' 과정이며, 이 과정을 통해 우리는 특정 문제를 가장 잘 해결할 수 있는 알고리즘을 찾아낼 수 있습니다.

 

모델 학습

 

아래 글에서 X,y에 대해 정의하였습니다. 아래의 실습 전에 이 글을 참고하여주시길 바라겠습니다.

머신러닝(Machine Learning) 후반전 - 데이터 스플릿(Data Split) 실습 (tistory.com)

 

머신러닝(Machine Learning) 후반전 - 데이터 스플릿(Data Split) 실습

머신러닝 후반전 데이터 스플릿(Data Split) → 모델 선택 및 학습 → 모델 검증 및 하이퍼파라미터 튜닝 → 성능 평가 서론 머신러닝은 우리가 일상에서 마주하는 다양한 문제를 해결하는 강력한

10yp.tistory.com

from sklearn.linear_model import SGDClassifier      # 1. Linear Classifier
from sklearn.linear_model import LogisticRegression # 2. Logistic Regression
from sklearn.tree import DecisionTreeClassifier     # 3. Decision Tree
from sklearn.ensemble import RandomForestClassifier # 4. Random Forest

clf = SGDClassifier()
clf2 = LogisticRegression()
clf3 = DecisionTreeClassifier()
clf4 = RandomForestClassifier()

clf.fit(X, y)
clf2.fit(X, y)
clf3.fit(X, y)
clf4.fit(X, y)

pred = clf.predict(X)
pred2 = clf2.predict(X)
pred3 = clf3.predict(X)
pred4 = clf4.predict(X)

print("1. Linear Classifier, Accuracy for training : %.4f" % accuracy_score(y, pred))
print("2. Logistic Regression, Accuracy for training : %.4f" % accuracy_score(y, pred2))
print("3. Decision Tree, Accuracy for training : %.4f" % accuracy_score(y, pred3))
print("4. Random Forest, Accuracy for training : %.4f" % accuracy_score(y, pred4))

 

 먼저, 주어진 코드는 sklearn 라이브러리를 활용해 4가지 다른 알고리즘(선형 분류기, 로지스틱 회귀, 의사결정트리, 랜덤 포레스트)으로 모델을 학습하고 예측하는 과정을 보여주고 있습니다.

 

1.

from sklearn.linear_model import SGDClassifier      # 1. Linear Classifier

선형 분류기를 생성하기 위해 필요한 SGDClassifier 클래스를 가져옵니다. SGD는 확률적 경사 하강법(Stochastic Gradient Descent)을 의미하며, 대용량 데이터의 경우 이를 활용한 선형 분류기가 효율적입니다.

 

2.

from sklearn.linear_model import LogisticRegression # 2. Logistic Regression

로지스틱 회귀 모델을 생성하기 위해 필요한 LogisticRegression 클래스를 가져옵니다. 로지스틱 회귀는 이진 분류 문제에 주로 사용되며, 결과를 확률로 해석할 수 있습니다.

 

3.

from sklearn.tree import DecisionTreeClassifier     # 3. Decision Tree

의사결정트리 모델을 생성하기 위해 필요한 DecisionTreeClassifier 클래스를 가져옵니다. 의사결정트리는 트리 구조를 활용해 분류나 회귀 문제를 해결합니다.

 

4.

from sklearn.ensemble import RandomForestClassifier # 4. Random Forest

랜덤 포레스트 모델을 생성하기 위해 필요한 RandomForestClassifier 클래스를 가져옵니다. 랜덤 포레스트는 여러 개의 의사결정트리를 결합해 사용하는 앙상블 학습 방법입니다.

 

5.

clf = SGDClassifier()
clf2 = LogisticRegression()
clf3 = DecisionTreeClassifier()
clf4 = RandomForestClassifier()

각 클래스를 인스턴스화하여 모델을 생성합니다.

 

6.

clf.fit(X, y)
clf2.fit(X, y)
clf3.fit(X, y)
clf4.fit(X, y)

4가지 머신러닝 알고리즘을 이용하여 모델을 학습하는 과정 입니다. 이 라인들은 각각의 분류기를 학습 데이터인 X(특성 행렬)와 y(타겟 벡터)에 맞게 학습시킵니다. 'fit' 메서드는 모델을 학습시키는 역할을 합니다. 이 과정에서 각 모델은 주어진 데이터의 패턴을 학습하게 됩니다. 이렇게 생성된 각 모델은 서로 다른 방식으로 데이터를 학습하므로, 상황에 따라 적절한 모델을 선택하여 사용하는 것이 중요합니다. 이를 위해 모델의 성능을 평가하고 비교하는 과정이 필요하며, 이 과정에서 교차 검증 등의 기법이 사용됩니다.

 

`fit` 은 모델을 학습시키는 과정에서 사용되며, 이때 데이터의 특성(X)과 타겟 레이블(y)이 입력으로 주어집니다. `fit`의 작동 원리는 사용하는 알고리즘에 따라 다르지만, 기본적인 아이디어는 모델이 특성과 타겟 레이블 사이의 관계를 학습하게 하는 것입니다.

 

예를 들어, 선형 회귀 모델의 경우 `fit` 메서드는 특성과 타겟 레이블 사이의 선형 관계를 학습합니다. 이때, 모델은 타겟 레이블을 최대한 정확하게 예측하기 위해 가중치와 편향 값을 조절하게 됩니다. 이 과정에서 경사 하강법 등의 최적화 알고리즘이 사용될 수 있습니다. 또 다른 예로, 의사결정트리의 경우 `fit` 메서드는 트리 구조를 구성하기 위해 특성을 분할하는 결정 경계를 학습합니다. 이때, 모델은 정보 이득이나 지니 불순도 등의 기준을 사용하여 최적의 분할을 찾습니다. 이 과정을 통해, 모델은 각 노드에서 특성 값을 기준으로 타겟 레이블을 분류하는 방법을 학습하게 됩니다.

 

따라서, `fit` 메서드는 주어진 데이터를 바탕으로 모델의 파라미터를 학습하고, 이를 통해 특성과 타겟 레이블 사이의 관계를 파악하는 역할을 합니다. 이후 `predict` 메서드를 통해 새로운 데이터에 대한 예측을 수행하게 되는데, 이때 학습된 파라미터가 사용됩니다.

 

 

7.

pred = clf.predict(X)
pred2 = clf2.predict(X)
pred3 = clf3.predict(X)
pred4 = clf4.predict(X)

학습된 모델을 통해 예측을 수행합니다. 이 경우, 학습 데이터를 그대로 예측에 사용하고 있습니다. 각 알고리즘은 서로 다른 방식으로 데이터를 학습하며, 이에 따라 성능과 적합한 문제 유형이 달라집니다. 예를 들어, 선형 분류기는 특성 간의 선형 관계를 학습하지만, 의사결정트리나 랜덤 포레스트는 비선형 관계도 학습할 수 있습니다. 반면, 로지스틱 회귀는 출력을 확률로 제공하므로, 확률적인 해석이 필요한 경우 유용합니다. 이러한 특성 때문에, 특정 문제에 대해 가장 적합한 모델을 선택하는 것이 중요합니다. 이를 위해 교차 검증, 그리드 서치 등의 기법을 활용해 최적의 모델과 하이퍼파라미터를 찾을 수 있습니다.

 

`clf.predict(X)`의 결과값은 X에 대한 예측값이며, Numpy 배열의 형태입니다. `predict` 메소드는 각 샘플에 대한 예측값을 포함하는 1차원 Numpy 배열을 반환합니다. 이 배열의 길이는 입력으로 주어진 `X`의 샘플 수와 동일합니다. 각 샘플에 대한 예측값은 해당 샘플이 어떤 클래스에 속하는지를 나타내며, 이는 분류 문제에 대한 예측 결과로 해석될 수 있습니다.

 

8.

print("1. Linear Classifier, Accuracy for training : %.4f" % accuracy_score(y, pred))
print("2. Logistic Regression, Accuracy for training : %.4f" % accuracy_score(y, pred2))
print("3. Decision Tree, Accuracy for training : %.4f" % accuracy_score(y, pred3))
print("4. Random Forest, Accuracy for training : %.4f" % accuracy_score(y, pred4))

각 모델이 학습 데이터에 대해 얼마나 정확하게 예측하는지를 측정하고 출력합니다. `accuracy_score` 함수는 첫 번째 인자로 실제 타겟 값인 `y`를, 두 번째 인자로 모델이 예측한 값인 `pred`, `pred2`, `pred3`, `pred4`를 받아서, 두 값이 얼마나 일치하는지를 계산합니다. 이 함수는 예측값과 실제값이 완벽하게 일치할 경우 1을, 전혀 일치하지 않을 경우 0을 반환합니다. 이 값은 모델의 성능을 나타내는 지표 중 하나로, 이를 '정확도'라고 합니다. 정확도는 모델이 올바르게 분류한 샘플의 비율을 나타내며, 이 값이 클수록 모델의 성능이 좋다고 할 수 있습니다.

 

따라서, 각 `print` 문은 특정 모델이 학습 데이터에 대해 얼마나 정확하게 예측하는지를 보여주는 정확도를 출력합니다. 이를 통해 여러 모델 중 어떤 모델이 학습 데이터에 대해 가장 좋은 성능을 보이는지를 비교할 수 있습니다. 그러나 이 코드는 학습 데이터에 대한 정확도만을 출력하고 있으므로, 과적합(overfitting) 문제를 확인하거나 새로운 데이터에 대한 모델의 성능을 평가하기 위해서는 별도의 검증 데이터셋이나 테스트 데이터셋을 사용하여 성능을 평가해야 합니다.

 

결론

 

머신러닝(Machine Learning) 후반전 - 모델 선택 및 학습 실습을 통해, 우리는 SGDClassifier, LogisticRegression, DecisionTreeClassifier, RandomForestClassifier와 같은 다양한 머신러닝 분류기를 활용하여 모델을 학습시키고, 이를 바탕으로 예측을 수행하는 방법을 살펴보았습니다. 각 모델은 `fit` 메소드를 이용하여 학습 데이터를 바탕으로 학습되었고, `predict` 메소드를 이용하여 새로운 데이터에 대한 예측을 수행하였습니다.

 

이후, `accuracy_score` 함수를 이용하여 각 모델의 성능을 평가하였습니다. 결과적으로, 이 실습을 통해 우리는 여러 머신러닝 모델을 활용하는 방법을 배웠고, 이를 바탕으로 어떤 모델이 주어진 문제에 가장 적합한지를 판단하고 선택하는 능력을 키웠습니다. 그러나, 본 실습에서는 학습 데이터에 대한 성능 평가만을 수행하였으므로, 실제 문제 해결에서는 학습 데이터와 별도의 검증 데이터셋이나 테스트 데이터셋을 사용하여 모델의 일반화 성능을 평가하는 것이 필요하다는 점을 명심해야 합니다.

 

마지막으로, 이러한 모델 학습과 성능 평가 과정은 머신러닝의 중요한 단계로, 이를 통해 우리는 데이터에 내재된 패턴을 학습하고, 이를 바탕으로 새로운 데이터에 대한 예측을 수행하는 능력을 갖추게 됩니다. 이는 실제 문제 해결에서 중요한 역할을 하므로, 다양한 모델과 방법을 활용하는 능력을 계속해서 키워나가는 것이 중요합니다.

반응형