Skip to content

Commit 3ffb0c0

Browse files
committed
docs: 머신 러닝 5
- 머신러닝 프로젝트의 표준 처리 절차와 파이썬 라이브러리인 사이킷런(Scikit-learn)을 활용한 핵심 알고리즘 구현 방법을 종합적으로 학습
1 parent 667538c commit 3ffb0c0

File tree

1 file changed

+211
-0
lines changed

1 file changed

+211
-0
lines changed

docs/머신러닝/05.md

Lines changed: 211 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,211 @@
1+
---
2+
sidebar_position: 5
3+
title: 사이킷런을 통한 머신러닝 1
4+
description: 머신러닝 프로젝트의 표준 처리 절차와 파이썬 라이브러리인 사이킷런(Scikit-learn)을 활용한 핵심 알고리즘 구현 방법을 종합적으로 학습
5+
---
6+
7+
머신러닝 프로젝트의 표준 처리 절차와 파이썬 라이브러리인 사이킷런(Scikit-learn)을 활용한 핵심 알고리즘 구현 방법을 종합적으로 학습한다.<br/>
8+
머신러닝의 전체 파이프라인은 **데이터 수집, 데이터 전처리, 데이터 학습, 모델 평가**의 4단계로 구성되며,<br/>
9+
각 단계는 모델의 성능을 결정하는 데 중요한 역할을 한다.
10+
11+
데이터 수집 단계에서는 학습, 검증, 평가 데이터셋을 정의하고, 일반적으로 7:3 또는 8:2 비율로 데이터를 분할하여 모델의 신뢰도를 확보한다.
12+
13+
데이터 전처리 단계는 누락 데이터 처리, 텍스트 데이터의 수치화, 특성 스케일링(Feature Scaling) 등<br/>
14+
머신러닝 알고리즘이 효과적으로 학습할 수 있도록 데이터를 정제하고 변환하는 핵심 과정이다.
15+
16+
데이터 학습 단계에서는 **지도 학습, 비지도 학습, 강화 학습** 등 문제의 성격에 맞는 학습 방법과 알고리즘을 선택한다.<br/>
17+
사이킷런은 **선형 회귀, 로지스틱 회귀, 의사결정 트리, 서포트 벡터 머신(SVM), 랜덤 포레스트** 등 다양한 지도 및 비지도 학습 알고리즘을 표준화된 API로 제공하여 효율적인 모델 개발을 지원한다.
18+
19+
마지막으로, 모델 평가 단계에서는 **정확도(Accuracy), 정밀도(Precision), 재현율(Recall)** 과 같은 지표를 사용하여 학습된 모델의 성능을 객관적으로 측정하고 검증한다.<br/>
20+
이러한 전 과정에 대한 상세한 설명과 사이킷런을 통한 구체적인 구현 방법을 제시하여 머신러닝 프로젝트 수행에 대한 깊이 있는 이해를 제공한다.
21+
22+
---
23+
24+
## 1. 머신러닝의 표준 처리 절차
25+
26+
머신러닝 프로젝트는 일반적으로 데이터 수집부터 모델 평가에 이르는 체계적인 4단계 절차를 따른다.
27+
28+
### 1.1. 데이터 수집 (Data Collection)
29+
30+
데이터 수집은 머신러닝 모델의 기반을 마련하는 첫 단계로, 양질의 데이터를 확보하고 목적에 맞게 분할하는 과정이 포함된다.
31+
32+
- 데이터셋의 종류:
33+
- 학습 데이터셋 (Training Set): 머신러닝 알고리즘을 학습시키는 데 사용되는 데이터.
34+
- 검증 데이터셋 (Validation Set): 학습된 모델의 예측 정확도를 계산하고 하이퍼파라미터 튜닝에 사용되는 데이터.
35+
- 평가 데이터셋 (Test Set): 모델 구축 및 튜닝 과정에 사용되지 않은, 실제 데이터와 유사한 데이터로 최종 성능을 평가하는 데 사용.
36+
- 데이터셋 분할:
37+
- 학습 데이터가 너무 적으면 알고리즘이 효율적으로 학습하기 어렵다.
38+
- 검증 데이터가 너무 적으면 정확도, 정밀도, 재현율의 신뢰도가 낮아진다.
39+
- 효과적인 분할 비율은 **학습 데이터 : 검증 데이터 = 80%:20% 또는 70%:30%** 이다.
40+
- 대표적인 데이터셋 수집 사이트:
41+
| 사이트명 | URL | 주요 특징 |
42+
| -------------------- | ------------------------------------------ | ---------------------------------------------------- |
43+
| 네이버 데이터랩 | http://datalab.naver.com/ | 국내 검색 트렌드 및 쇼핑 데이터 제공 |
44+
| 공공데이터 포털 | https://www.data.go.kr/ | 대한민국 정부가 제공하는 공공 데이터 |
45+
| K-ICT 빅데이터 센터 | https://kbig.kr/#none | 빅데이터 분석 동향 및 실습 데이터 제공 |
46+
| 건강보험심사평가원 | https://www.hira.or.kr/ | 의료 관련 통계 데이터 |
47+
| Kaggle | https://www.kaggle.com/ | 전 세계 최대 데이터 과학 경진대회 및 데이터셋 플랫폼 |
48+
| Google Datasets | https://datasetsearch.research.google.com/ | 구글에서 제공하는 데이터셋 검색 엔진 |
49+
50+
### 1.2. 데이터 전처리 (Data Preprocessing)
51+
52+
데이터 전처리는 수집된 원시 데이터를 머신러닝 알고리즘에 적합한 형태로 변환하는 과정이다.
53+
54+
- 주요 전처리 기법:
55+
- Data Cleaning: 누락되거나 불필요한 데이터를 제거(drop(), dropna())하거나 특정 값으로 채운다(fillna()).
56+
- Handling Text and Categorical Attributes: 대부분의 알고리즘은 수치 데이터를 기반으로 하므로, 텍스트 데이터를 수치로 인코딩한다 (factorize(), OrdinalEncoder(), OneHotEncoder()).
57+
- Custom Transformers: 사이킷런의 데이터 변환기(fit(), transform(), fit_transform())를 활용하여 데이터를 변환한다.
58+
- Feature Scaling: 데이터의 범위를 조정하여 모델이 안정적으로 학습하도록 돕는다.
59+
- 정규화 (Normalization): 데이터 범위를 0과 1 사이로 조정 (Min-Max Scaling).
60+
- 표준화 (Standardization): 데이터의 평균을 0, 표준편차를 1로 조정.
61+
- Transformation Pipelines: 반복적인 전처리 과정을 파이프라인으로 구성하여 작업의 효율성을 높인다.
62+
- 결측치 처리:
63+
- 데이터가 충분할 경우: 결측치가 포함된 행 또는 열을 제거한다.
64+
- 데이터가 부족할 경우: 평균, 중앙값, 최빈값 등 통계적 방법으로 결측치를 채운다.
65+
66+
### 1.3. 데이터 학습 (Data Training)
67+
68+
전처리된 데이터를 사용하여 모델을 학습시키는 단계로, 문제의 종류에 따라 적절한 학습 방법과 알고리즘을 선택해야 한다.
69+
70+
- 학습 방법의 종류:
71+
72+
- 지도 학습 (Supervised Learning): 정답(레이블)이 있는 데이터를 사용하여 모델을 학습.
73+
- 분류 (Classification): 데이터를 정해진 카테고리로 구분 (예: SVM, 의사결정 트리, 나이브 베이즈).
74+
- 회귀 (Regression): 연속적인 값을 예측 (예: 선형 회귀).
75+
- 비지도 학습 (Unsupervised Learning): 정답 없이 데이터 자체의 패턴이나 구조를 학습.
76+
- 군집화 (Clustering): 유사한 데이터끼리 그룹화 (예: 가우시안 믹스쳐 모델).
77+
- 강화 학습 (Reinforcement Learning): 보상을 최대화하는 방향으로 행동을 학습.
78+
79+
### 1.4. 모델 평가 (Model Evaluation)
80+
81+
학습된 모델의 성능을 객관적인 지표로 측정하는 단계이다.
82+
83+
- 혼동 행렬 (Confusion Matrix): 모델의 예측 성능을 시각적으로 나타내는 표.
84+
85+
| | 예측: Positive | 예측: Negative |
86+
| -------------- | ------------------- | ------------------- |
87+
| 실제: Positive | TP (True Positive) | FN (False Negative) |
88+
| 실제: Negative | FP (False Positive) | TN (True Negative) |
89+
90+
- 주요 평가 지표:
91+
- 정확도 (Accuracy): 전체 예측 중 올바르게 예측한 비율.
92+
- (TP + TN) / (TP + TN + FP + FN)
93+
- 재현율 (Recall): 실제 Positive인 것들 중 모델이 Positive라고 올바르게 예측한 비율.
94+
- TP / (FN + TP)
95+
- 정밀도 (Precision): 모델이 Positive라고 예측한 것들 중 실제로 Positive인 것의 비율.
96+
- TP / (TP + FP)
97+
98+
## 2. 사이킷런(Scikit-learn)을 활용한 머신러닝 구현
99+
100+
사이킷런은 파이썬에서 가장 널리 사용되는 머신러닝 라이브러리로, 다양한 알고리즘과 데이터 처리 도구를 제공한다.
101+
102+
### 2.1. 사이킷런 개요 및 핵심 프로세스
103+
104+
- 개요: 지도/비지도 학습 알고리즘을 포함한 다양한 머신러닝 기능을 제공하는 파이썬 라이브러리.
105+
- 설치: pip install scikit-learn (구글 코랩에서는 기본 제공)
106+
- 처리 과정:
107+
108+
1. 라이브러리 Import
109+
2. 데이터 로드 (Load)
110+
3. 학습/테스트 데이터 분할 (Split)
111+
4. 알고리즘에 따른 모델 생성
112+
5. 모델 학습 (fit)
113+
6. 예측 (predict)
114+
7. 성능 평가 (score)
115+
116+
### 2.2. 주요 라이브러리 및 내장 데이터
117+
118+
- 대표적인 라이브러리 Import:
119+
- 내장 데이터셋: from sklearn.datasets import load_iris
120+
- 데이터 분할: from sklearn.model_selection import train_test_split
121+
- 알고리즘: from sklearn.tree import DecisionTreeClassifier
122+
- 성능 평가: from sklearn.metrics import accuracy_score
123+
- 내장 데이터셋:
124+
- 사이킷런은 sklearn.utils.Bunch라는 Key-Value 형태의 자료구조로 데이터를 제공한다.
125+
- 주요 Key: data(샘플 데이터), target(레이블), feature_names, target_names, DESCR(설명).
126+
127+
| 함수명 | 용도 | 설명 |
128+
| -------------------- | ---- | ----------------------- |
129+
| load_boston() | 회귀 | 보스턴 집값 데이터 |
130+
| load_iris() | 분류 | 붓꽃 품종 데이터 |
131+
| load_diabetes() | 회귀 | 당뇨병 데이터 |
132+
| load_digits() | 분류 | 숫자 이미지 픽셀 데이터 |
133+
| load_wine() | 분류 | 와인 등급 데이터 |
134+
| load_breast_cancer() | 분류 | 위스콘신 유방암 데이터 |
135+
136+
### 2.3. 가상 데이터 생성 도구
137+
138+
사이킷런은 알고리즘 테스트를 위해 다양한 가상 분류용 데이터를 생성하는 함수를 제공한다.
139+
140+
| 함수명 | 라이브러리 | 주요 역할 |
141+
| ----------------------- | ---------------- | ----------------------------------------------- |
142+
| make_classification | sklearn.datasets | 일반적인 가상 분류 모형 데이터 생성 |
143+
| make_blobs | sklearn.datasets | 등방성 가우시안 정규분포를 이용한 클러스터 생성 |
144+
| make_moons | sklearn.datasets | 초승달 모양의 비선형 클러스터 2개 생성 |
145+
| make_gaussian_quantiles | sklearn.datasets | 다차원 가우시안 분포를 이용해 클래스 분류 |
146+
147+
### 2.4. 데이터 분할 (train_test_split)
148+
149+
`from sklearn.model_selection import train_test_split`를 사용하여 데이터를 학습용과 테스트용으로 분할한다.
150+
151+
- 주요 파라미터:
152+
- test_size: 테스트 데이터셋의 비율 (예: 0.2)
153+
- train_size: 학습 데이터셋의 비율 (지정하지 않으면 1 - test_size)
154+
- random_state: 재현 가능한 결과를 위해 사용하는 난수 시드
155+
156+
## 3. 주요 머신러닝 알고리즘 상세 분석
157+
158+
사이킷런으로 구현 가능한 주요 지도 학습 알고리즘은 다음과 같다.
159+
160+
### 3.1. 선형 회귀 (Linear Regression)
161+
162+
- 목적: 종속 변수(y)와 하나 이상의 독립 변수(x) 간의 선형 상관 관계를 모델링하여 값을 예측.
163+
- 라이브러리: `from sklearn.linear_model import LinearRegression`
164+
165+
### 3.2. 로지스틱 회귀 (Logistic Regression)
166+
167+
- 목적: 특정 사건이 발생할 확률을 예측하는 모델로, 데이터가 어떤 범주에 속할 확률을 0과 1 사이의 값으로 예측.
168+
- 라이브러리: `from sklearn.linear_model import LogisticRegression`
169+
170+
### 3.3. K-최근접 이웃 (KNN)
171+
172+
- 목적: 새로운 데이터 포인트에 대해 기존 훈련 데이터셋에서 가장 가까운 K개의 이웃을 찾아 분류 또는 회귀를 수행하는 간단한 알고리즘.
173+
- 라이브러리: `from sklearn.neighbors import KNeighborsClassifier`
174+
175+
### 3.4. 나이브 베이즈 (Naive Bayes)
176+
177+
- 목적: 각 특성이 독립적이라고 가정하고 베이즈 정리를 적용하여 데이터를 간단하게 분류.
178+
- 종류 및 라이브러리:
179+
- 가우시안 (GaussianNB): 연속적인 데이터에 사용 (`from sklearn.naive_bayes import GaussianNB`).
180+
- 다항분포 (MultinomialNB): 카운트 기반 데이터에 사용 (`from sklearn.naive_bayes import MultinomialNB`).
181+
- 베르누이 (BernoulliNB): 이진 데이터에 사용 (`from sklearn.naive_bayes import BernoulliNB`).
182+
183+
### 3.5. 의사결정 트리 (Decision Tree)
184+
185+
- 목적: 데이터의 속성을 분석하여 패턴을 찾고, 이를 기반으로 분류나 회귀를 수행하는 트리 구조의 알고리즘.
186+
- 특징:
187+
- Greedy 방식: 각 분기점에서 최적의 선택만을 고려하므로 전역 최적해를 보장하지 못할 수 있음.
188+
- 오버피팅(과적합) 경향이 있어 가지치기(Pruning)가 필요함.
189+
- 핵심 개념:
190+
- 지니 불순도 (Gini Impurity): 한 노드에 여러 클래스의 데이터가 얼마나 섞여 있는지를 나타내는 지표. 낮을수록 순수함.
191+
- 정보 획득량 (Information Gain): 특정 질문(분기)을 통해 불순도가 얼마나 감소했는지를 측정. 정보 획득량이 큰 순서대로 트리를 구성.
192+
- 라이브러리:
193+
- 분류: `from sklearn.tree import DecisionTreeClassifier`
194+
- 회귀: `from sklearn.tree import DecisionTreeRegressor`
195+
196+
### 3.6. 서포트 벡터 머신 (SVM)
197+
198+
- 목적: 데이터를 분류하기 위한 강력한 지도 학습 모델로, 클래스 간의 경계(Decision Boundary)를 정의.
199+
- 핵심 개념:
200+
- 서포트 벡터 (Support Vector): 결정 경계와 가장 가까운 데이터 포인트.
201+
- 마진 (Margin): 결정 경계와 서포트 벡터 사이의 거리. SVM은 이 마진을 최대화하는 것을 목표로 함.
202+
- 하드 마진 vs. 소프트 마진: 이상치(Outlier)를 허용하지 않는 하드 마진은 오버피팅을, 어느 정도 허용하는 소프트 마진은 언더피팅의 위험이 있음.
203+
- 라이브러리: `from sklearn import svm` (예: `svm.SVC()`)
204+
205+
### 3.7. 랜덤 포레스트 (Random Forest)
206+
207+
- 목적: 여러 개의 의사결정 트리를 생성하고 그 결과를 종합(앙상블)하여 단일 트리의 오버피팅 문제를 해결하는 모델.
208+
- 핵심 개념:
209+
- 배깅 (Bagging): 원본 훈련 데이터에서 중복을 허용하여 여러 개의 서브 데이터셋을 만들고, 각 서브셋으로 개별 트리를 학습시키는 기법.
210+
- 속성 제한: 각 트리를 만들 때 전체 특성 중 일부만 무작위로 선택하여 사용함으로써 트리의 다양성을 확보.
211+
- 라이브러리: `from sklearn.ensemble import RandomForestClassifier`

0 commit comments

Comments
 (0)