[데이터사이언스기초] Introduction to Machine learning

 

머신 러닝(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)을 통해 학습하는 방법이다. 예를 들어, 로봇 팔이 물체를 옮기는 방법을 스스로 학습하는 것이 강화 학습에 해당한다.

이번 시간에는 이 중에서 지도 학습과 비지도 학습에 해당하는 clustering에 대해 다뤄보겠다. 지도학습은 크게 분류(Classification)회귀(Regression) 문제로 나눌 수 있다.
  • 분류(Classification): 데이터를 미리 정의된 여러 범주(category) 중 하나로 할당하는 문제이다. 예를 들어, 스팸 메일 필터링이나 이미지 분류 등이 분류 문제에 해당한다.
  • 회귀(Regression): 연속적인 값을 예측하는 문제이다. 예를 들어, 주가 예측이나 기온 예측 등이 회귀 문제에 해당한다.

2. Scikit-learn: 파이썬 머신 러닝 라이브러리

Scikit-learn은 파이썬 기반의 머신 러닝 라이브러리로, 다양한 머신 러닝 알고리즘을 쉽게 사용할 수 있도록 지원한다. Scikit-learn은 NumPy, SciPy(기반으로 만들어짐), matplotlib 등 다른 파이썬 라이브러리와 함께 사용할 수 있으며, 분류, 회귀, 군집화, 차원 축소, 모델 선택, 전처리 등 다양한 기능을 제공한다.

2.1. Scikit-learn 코딩 프로세스

Scikit-learn을 사용하여 머신 러닝 모델을 구현하는 일반적인 과정은 다음과 같다.

  1. 알고리즘 선택: Scikit-learn API 레퍼런스에서 원하는 알고리즘을 찾는다.
    ex) LinearRegression
  2. 모델 정의: 선택한 알고리즘을 import하고, 모델 객체를 생성한다.
    ex) from sklearn.linear_model import LinearRegression
         reg = LinearRegression()
  3. 학습(fit): fit() 함수를 호출하여 모델을 학습시킨다.
    ex) reg.fit(X, y)
  4. 예측(predict): predict() 함수를 호출하여 새로운 데이터에 대한 예측값을 얻는다.
    ex) pred = reg.predict(x)
  5. 모델 해석 및 평가: score() 함수를 사용하여 모델의 성능을 평가하거나, coef_, intercept_ 등의 속성을 이용하여 모델을 해석한다.
    ex) print(reg.coef_, reg.intercept_)

2.2. 회귀 예제

Python
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. 분류 예제

Python
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]]
n_neighbors : 이웃 수를 의미, 이 값에 따라 예측되는 데이터가 달라짐
* 확률값은 label된 값의 수 / 이웃 수
-> 1.1의 이웃은 0, 1, 2이고 2/3 확률로 0으로 labeling됨 

2.4. 군집화 예제

Python
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)로 분류
classification


  • 회귀: 새로운 데이터 포인트의 K개의 최근접 이웃의 평균값(average) 또는 가중 평균값(weighted average)을 예측값으로 사용
    regression

이처럼 KNN은 간단하면서도 강력하다는 장점이 있다. parameter를 튜닝할 필요가 없고, train data 수정도 간편하다. 하지만 nearest neighbor를 찾기 위하여 모든 train dataset에서 거리를 구해야 하므로 연산량이 많고 느리다는 단점이 있다.

마무리

이번 포스팅에서는 머신 러닝의 종류, 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)

hyeon_B

안녕하세요! AI 기술을 이용해 더 나은 세상을 만들어 나가고 싶은 과기원생 Hyeon이라고 합니다. 저는 앞으로 인공지능 시대에는 지식을 '활용'하는 능력이 중요해질 것이라고 생각합니다. 대부분의 일들은 인공지능이 뛰어난 모습을 보이지만, 인공지능은 데이터로 부터 연관관계를 학습하기 때문에 지식들을 새로 통합해서 활용하는 능력이 부족합니다. 인공지능이 뉴턴 전에 만들어졌다면 사과가 떨어지는 이유에 대답하지 못했을 것이고, 아인슈타인 전에 만들어졌다면 중력이 어떻게 생기는지 설명하지 못했을 것입니다. 따라서 앞으로 우리는 '본질'을 탐구하고 그 본질로부터 다른 곳에 적용하며 인공지능을 현명하게 활용해야 할 것입니다. 함께 인공지능 시대를 준비합시다!

댓글 쓰기

다음 이전

POST ADS1

POST ADS 2