더보기
머신러닝의 필수 구성요소
- 데이터(DATA)
- 훈련데이터와, 테스트 데이터로 구분 됩니다.
- 특성(Features)
- 모델이 학습하는 데 사용되는 입력값입니다. (ex: 집값 예측 문제에서는 집의 면적,위치, 방 개수)
- 레이블(Labels)
- 특성에 대한 정답입니다. 즉, 모델이 예측하려는 목표 값입니다. (ex: 집값)
- 모델(Model)
- 주어진 데이터를 통해 패턴을 학습하고 예측을 수행하는 알고리즘입니다. (ex: 회귀 모델, 분류모델)
- 학습(Learning)
- 모델이 주어진 데이터셋을 통해 특성과 레이블 간의 관계를 학습하고, 이를 통해 예측할 수 있는 능력을 갖는 것입니다.
1. 지도학습(Supervised Learning)이란 무엇인가?
- 정답(레이블)이 있는 데이터를 활용해 데이터를 모델에게 학습시키는 것
- 모델에 제공하는 데이터에 특성(입력값)과 그에 해당하는 정답(레이블)이 포함되어 있다.
2. 주요 알고리즘
1) 회귀 (Regression) : 예측하려가는 값이 연속적인 숫자일 때 사용합니다.
- 목표: 숫자처럼 연속적인 값을 출력하는 모델을 만드는 것
- 특징: 출력값은 실수 범위로 나타납니다.
회귀 대표 알고리즘:
- 선형 회귀 (Linear Regression) :
- 두 변수 간의 관계를 직선으로 모델링
- ex) 집의 크기와 가격을 바탕으로, 크기에 따른 가격을 예측)\
2. 다항 회귀 (Polynomial Regression)
- 선형 회귀와 비슷하지만, 직선 대신 곡선을 사용하여 더 복잡한 관계를 모델링
- ex) 학생의 공부 시간과 성적
3. 의사결정 회귀 트리 (Decision Tree for Regression)
- 데이터를 여러 구간으로 나누어 예측하는 방식
- ex) 고객의 나이를 기준으로 여러 그룹을 나누어, 각 그룹에 따른 구매력 예측
4. 랜덤 포레스트 회귀 (Random Forest Regression)
- 여러 개의 결정 트리를 만들어 예측값을 종합하여 더 정확한 예측
[실습]
from sklearn.model_selection import train_test_split # 데이터를 훈련 세트와 테스트 세트로 분할하는 함수
from sklearn.linear_model import LinearRegression # 선형 회귀 모델
from sklearn.metrics import mean_squared_error # 평균 제곱 오차(MSE)를 계산하는 함수
# 데이터 예시 (평수와 가격)
X = [[50], [60], [70], [80], [90]] # 평수 (특성)
y = [150, 180, 210, 240, 270] # 가격 (레이블)
# 데이터 분할 (훈련 데이터와 테스트 데이터)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 선형 회귀 모델 생성 및 학습
model = LinearRegression() # 선형 회귀 모델 객체 생성
model.fit(X_train, y_train) # 훈련 데이터를 사용해 모델 학습
# 예측 및 평가
y_pred = model.predict(X_test) # 테스트 데이터에 대해 예측 수행
print("X_test 값:", X_test, "예측 값:", y_pred) # 테스트 데이터와 예측 값을 출력
print("MSE:", mean_squared_error(y_test, y_pred)) # MSE 계산 (오차의 제곱 평균, 값이 작을수록 좋음)
X_test 값: [[60]] 예측 값: [180.]
MSE: 0.0
2) 분류 (Classification) : 예측하려는 값이 특정 클래스나 범주에 속하는 경우 사용합니다.
- 목표: 입력 데이터를 특정 카테고리로 분류하는 것
- 특징:
- 출력값은 정수형 라벨 또는 범주형 값으로 나타남.
- 이진 분류(Binary Classification): 클래스가 두 개(예: Yes/No).
- 다중 클래스 분류(Multi-Class Classification): 클래스가 세 개 이상(예: 개, 고양이, 새).
분류 대표 알로리즘:
- 로지스틱 회귀 (Logistic Regression)
- 0 또는 1처럼 두 가지 결과를 예측할 때 사용
- ex) 이메일이 스팸인지 아닌 구분하는 문제. 스팸이면 0 아니면 1
- 서포트 벡터 머신 (SVM)
- 두 클래스를 구분할 수 있는 가장 좋은 경계를 찾는 방법
- ex) 사과 오렌지의 크기와 색깔 특성으로 두 과일 구분하기
- k-최근접 이웃 (k-NN)
- 주어진 데이터와 가장 가까운 데이터를 찾아 예측
- ex) 꽃잎 길이과 꽃잎 너비를 가지고 꽃의 종류를 예측
- 의사결정 트리 (Decision Tree for Classification)
- 여러 조건을 바탕으로 트리 구조로 예측
- ex) 나의 게임 티어는 어디인가?
- 랜덤 포레스트 분류 (Random Forest Classification)
- 여러 개의 결정 트리를 결합하여 더 정확한 예측
- ex) 다양한 고객 데이터를 통해 고객이 제품을 구매할지 예측하는 문제
[분류 실습]
from sklearn.datasets import load_breast_cancer # 유방암 데이터셋 불러오기
from sklearn.model_selection import train_test_split # 데이터 분할을 위한 함수
from sklearn.preprocessing import StandardScaler # 데이터 표준화를 위한 스케일러
from sklearn.neighbors import KNeighborsClassifier # KNN 분류 모델
from sklearn.metrics import accuracy_score # 모델 정확도 평가를 위한 함수
# 데이터 로드
data = load_breast_cancer() # 유방암 데이터셋 로드
X = data.data # 특성 데이터 (X)
y = data.target # 레이블 데이터 (y)
# 데이터 분할 (훈련 세트 80%, 테스트 세트 20%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 데이터 스케일링 (특성 값의 범위를 조정)
scaler = StandardScaler() # 표준화 스케일러 생성
X_train = scaler.fit_transform(X_train) # 훈련 데이터 표준화
X_test = scaler.transform(X_test) # 테스트 데이터 표준화
# KNN 모델 학습 (이웃의 수를 5로 설정)
model = KNeighborsClassifier(n_neighbors=5) # KNN 분류기 생성
model.fit(X_train, y_train) # 훈련 데이터로 모델 학습
# 예측 및 평가
y_pred = model.predict(X_test) # 테스트 데이터에 대한 예측
print(f"정확도: {accuracy_score(y_test, y_pred)}") # 모델의 정확도 출력
정확도: 0.9473684210526315
3) 회귀와 분류의 차이
구분 | 회귀 | 분류 |
출력값 형태 | 연속적인 실수 값 | 정수형 또는 범주형 값 |
목표 | 숫자 값을 예측 | 특정 클래스에 속하는 지 예측 |
예시 | 주택 가격, 성적 | 이메일 스팸 여부, 꽃 분류 |
알고리즘 | 선형 회귀, 다항회귀, 의사결정 회귀 트리, 랜덤 포레스트 회귀 |
로지스틱 회귀, SVM, k-NN, 의사결정 트리, 랜덤포레스트 분류 |
'Machine learning' 카테고리의 다른 글
[머신러닝: 지도학습 실습 2] (6) | 2024.12.19 |
---|---|
[머신 러닝: 지도학습 실습 1] (4) | 2024.12.18 |
[머신러닝 데이터 전처리 실습 및 문제풀기] (5) | 2024.12.09 |
[머신러닝 데이터 불러오기, 전처리 개념] (5) | 2024.12.07 |
[머신러닝 개념, 구성요소] (4) | 2024.12.05 |