머신 러닝(Machine Learning)
지난 포스팅에서는 데이터 시각화와 기초 통계에 대해 알아보았다. 이번에는 좀 더 심층적인 데이터 분석 기법인 머신 러닝(Machine Learning)에 대해 알아보겠다. 머신 러닝은 경험을 통해 자동으로 학습하고 개선하는 컴퓨터 알고리즘을 연구하는 분야로, 데이터 분석, 예측, 의사 결정 등 다양한 분야에서 활용되고 있다.
1. 머신 러닝의 종류
머신 러닝은 크게 지도 학습(Supervised Learning), 비지도 학습(Unsupervised Learning), 강화 학습(Reinforcement Learning)으로 나눌 수 있다.
- 지도 학습(Supervised Learning): 레이블(label)이 있는 데이터를 사용하여 모델을 학습한다. 예를 들어, 이미지 분류(image classification)나 주가 예측(stock value prediction) 등이 지도 학습에 해당한다.
- 비지도 학습(Unsupervised Learning): 레이블이 없는 데이터를 사용하여 데이터의 패턴이나 구조를 파악한다. 예를 들어, 이상 탐지(anomaly detection)나 군집화(clustering) 등이 비지도 학습에 해당한다.
- 강화 학습(Reinforcement Learning): 행동(action)에 대한 보상(reward)을 통해 학습하는 방법이다. 예를 들어, 로봇 팔이 물체를 옮기는 방법을 스스로 학습하는 것이 강화 학습에 해당한다.
- 분류(Classification): 데이터를 미리 정의된 여러 범주(category) 중 하나로 할당하는 문제이다. 예를 들어, 스팸 메일 필터링이나 이미지 분류 등이 분류 문제에 해당한다.
- 회귀(Regression): 연속적인 값을 예측하는 문제이다. 예를 들어, 주가 예측이나 기온 예측 등이 회귀 문제에 해당한다.
2. Scikit-learn: 파이썬 머신 러닝 라이브러리
Scikit-learn은 파이썬 기반의 머신 러닝 라이브러리로, 다양한 머신 러닝 알고리즘을 쉽게 사용할 수 있도록 지원한다. Scikit-learn은 NumPy, SciPy(기반으로 만들어짐), matplotlib 등 다른 파이썬 라이브러리와 함께 사용할 수 있으며, 분류, 회귀, 군집화, 차원 축소, 모델 선택, 전처리 등 다양한 기능을 제공한다.
2.1. Scikit-learn 코딩 프로세스
Scikit-learn을 사용하여 머신 러닝 모델을 구현하는 일반적인 과정은 다음과 같다.
- 알고리즘 선택: Scikit-learn API 레퍼런스에서 원하는 알고리즘을 찾는다.
ex) LinearRegression - 모델 정의: 선택한 알고리즘을 import하고, 모델 객체를 생성한다.
ex) from sklearn.linear_model import LinearRegression
reg = LinearRegression() - 학습(fit):
fit()
함수를 호출하여 모델을 학습시킨다.
ex) reg.fit(X, y) - 예측(predict):
predict()
함수를 호출하여 새로운 데이터에 대한 예측값을 얻는다.
ex) pred = reg.predict(x) - 모델 해석 및 평가:
score()
함수를 사용하여 모델의 성능을 평가하거나,coef_
,intercept_
등의 속성을 이용하여 모델을 해석한다.
ex) print(reg.coef_, reg.intercept_)
2.2. 회귀 예제
import numpy as np
from sklearn.linear_model import LinearRegression
# 데이터 생성
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
y = np.dot(X, np.array([1, 2])) + 3 # y = 1 * x_0 + 2 * x_1 + 3
# 모델 학습
reg = LinearRegression()
reg.fit(X, y)
# 모델 예측
pred = reg.predict(np.array([[3, 5]]))
print('예측값:', pred) # 출력: 예측값: [16.]
2.3. 분류 예제
from sklearn.neighbors import KNeighborsClassifier
# 데이터 생성
X = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]
# 모델 학습
neigh = KNeighborsClassifier(n_neighbors=3)
neigh.fit(X, y)
# 모델 예측
pred = neigh.predict([[1.1]])
pred_prob = neigh.predict_prob([[1.1]])
print('예측값:', pred) # 출력: 예측값: [0]
print('확률값:', pred_prob) # 출력: 확률값:[[0.66666667 0.33333333]]
* 확률값은 label된 값의 수 / 이웃 수
-> 1.1의 이웃은 0, 1, 2이고 2/3 확률로 0으로 labeling됨
2.4. 군집화 예제
import numpy as np
from sklearn.cluster import KMeans
# 데이터 생성
X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]])
# 모델 학습
kmeans = KMeans(n_clusters=2)
kmeans.fit(X)
# 예측 (클러스터 레이블 할당)
pred = kmeans.predict([[0, 0], [12, 3]])
print('예측 레이블:', pred) # 출력: 예측 레이블: [1 0]
n_clusters : 군집 수를 의미, label의 종류를 나타냄
3. K-최근접 이웃 (K-Nearest Neighbors, KNN) 알고리즘
K-최근접 이웃(KNN) 알고리즘은 가장 간단하고 직관적인 머신 러닝 알고리즘 중 하나다. KNN은 새로운 데이터 포인트의 레이블을 예측하기 위해 주변의 K개의 가장 가까운 이웃(nearest neighbors)을 찾아 투표(voting)하는 방식으로 작동한다. KNN은 분류(classification)와 회귀(regression) 문제 모두에 사용될 수 있다.
- 분류: 새로운 데이터 포인트의 K개의 최근접 이웃 중 다수 클래스(majority class)로 분류
마무리
이번 포스팅에서는 머신 러닝의 종류, Scikit-learn 라이브러리, KNN 알고리즘에 대해 알아보았다. 머신 러닝은 복잡한 데이터 분석 문제를 해결하는 강력한 도구이고, Scikit-learn은 파이썬 환경에서 머신 러닝을 쉽게 시작할 수 있도록 돕는 라이브러리다. 다음 포스팅에서는 model selection과 data preprocessing에 대해 알아보겠다.
추천글 :
[데이터사이언스기초] Data Visualization
(https://hyeonb.blogspot.com/2024/06/data-visualization.html)
[데이터사이언스기초] Data Visualization - 분포 & 비율 & 관계 & 추세 시각화
(https://hyeonb.blogspot.com/2024/06/data-visualization_2.html)
[데이터사이언스기초] Data Visualization - 불확실성의 시각화와 회귀/상관 분석
(https://hyeonb.blogspot.com/2024/06/data-visualization_3.html)