오늘의 목표 : 기계학습 공부하기
기계학습은 주어진 데이터를 보고 컴퓨터가 판단 방법을 학습하도록 만드는 기술이다.
기계학습은 일반적으로 가르쳐주는 "교사(또는 정답, 레이블)"의 존재 여부에 따라 크게 지도 학습과 비지도 학습으로 나누어진다. 그리고 상태와 액션을 압력으로 받아 에이전트가 환경과 상호작용하며 평가와 보상에 따른 학습을 하는 강화학습으로 분류할 수 있다.
컴퓨터는 "교사"에 의해 주어진 예제와 정답(혹은 레이블)을 제공받는다. 지도학습의 목표는 입력을 출력에 매핑시키는 일반적인 규칙을 학습하는 것이다.
외부에서 정답(레이블)이 주어지지 않고 학습 알고리즘이 스스로 입력에서 어떤 구조를 발견하는 학습이다. 흔히 자율 학습이라고도 부르는 이 학습을 사용하면 데이터에서 숨겨진 패턴을 발견할 수 있다. 자율 학습은 대표적인 것이 클러스트링이다. 클러스트링이란 자동으로 그룹핑하는 것이다.
평가와 보상을 통해서 학습을 수행하는 방법이다.
Handwritten Digits (MNIST) 데이터셋을 이용해 기계학습을 구현한다.
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn import svm, metrics
import matplotlib.pyplot as plt
import numpy as np
digits = load_digits()
images = digits.images
labels = digits.target
n_samples = len(images)
flat_images = images.reshape((n_samples, -1))
X_train, X_test, y_train, y_test = train_test_split(flat_images, labels, test_size=0.5, random_state=42)
from sklearn.neighbors import KNeighborsClassifier
knn_model = KNeighborsClassifier()
knn_model.fit(X_train, y_train)
knn_predictions = knn_model.predict(X_test)
from sklearn.metrics import mean_squared_error, r2_score
accuracy = knn_model.score(X_test, y_test)
print('accuracy_',accuracy)
출력 :
accuracy_ 0.9755283648498332
print("KNN 모델 성능 평가:")
print(metrics.classification_report(y_test, knn_predictions))
print("정확도:", metrics.accuracy_score(y_test, knn_predictions))
출력
KNN 모델 성능 평가:
precision recall f1-score support
0 0.99 1.00 0.99 82
1 0.97 1.00 0.98 89
2 1.00 1.00 1.00 83
3 0.99 0.95 0.97 93
4 0.99 1.00 0.99 93
5 0.98 0.96 0.97 99
6 0.99 0.98 0.98 98
7 0.95 1.00 0.97 87
8 0.95 0.94 0.95 83
9 0.96 0.93 0.95 92
accuracy 0.98 899
macro avg 0.98 0.98 0.98 899
weighted avg 0.98 0.98 0.98 899
정확도: 0.9755283648498332
import sklearn.svm as svm
svm_model = svm.SVC()
svm_model.fit(X_train, y_train)
svm_predictions = svm_model.predict(X_test)
from sklearn.metrics import mean_squared_error, r2_score
accuracy = svm_model.score(X_test, y_test)
print('accuracy_',accuracy)
출력 :
accuracy_ 0.9721913236929922
print("SVM 모델 성능 평가:")
print(metrics.classification_report(y_test, svm_predictions))
print("정확도:", metrics.accuracy_score(y_test, svm_predictions))
출력 :
SVM 모델 성능 평가:
precision recall f1-score support
0 0.99 1.00 0.99 82
1 0.98 1.00 0.99 89
2 1.00 1.00 1.00 83
3 0.99 0.91 0.95 93
4 1.00 1.00 1.00 93
5 0.99 0.97 0.98 99
6 0.99 0.98 0.98 98
7 0.93 0.99 0.96 87
8 0.90 0.96 0.93 83
9 0.95 0.91 0.93 92
accuracy 0.97 899
macro avg 0.97 0.97 0.97 899
weighted avg 0.97 0.97 0.97 899
정확도: 0.9721913236929922