데이터 분석 및 머신러닝 적용을 위한 파이썬 기반 라이브러리
NumPy: 행렬이나 대규모 다차원 데이터 분석을 위한 라이브러리
Pandas: 행과 열을 가지는 2차원 데이터 분석을 위한 라이브러리
Matplotlib, Seaborn: 데이터 분석을 위한 시각화 라이브러리
SciPy: 기술 통계를 위한 파이썬 라이브러리
Statsmodels: 파이썬 기반의 대표적인 통계 분석 라이브러리
Scikit-learn: 파이썬 기반의 대표적인 머신러닝 라이브러리
Scikit-learn
사이킷런을 활용하여 머신러닝의 기초 실습을 진행합니다.
필요한 라이브러리 로딩 부터 데이터 다운로드, 학습, 검증까지 머신러닝의 주요 프로세스를 실습을 통해 알아보겠습니다.
[실습 프로세스]
STEP.1 데이터 준비
STEP.2 학습 알고리즘 선택
STEP.3 학습 데이터를 통한 모델 학습
STEP.4 테스트 데이터를 통한 모델 검증
Scikit-learn API Reference
보스턴 주택 가격 데이터셋 다운로드를 위한 load_boston()
.DESCR : 데이터셋의 description
.feature_names : feature 인덱스명
.data : feature 데이터
.target_names : class(target) 인덱스명
.target : class(target) 데이터
데이터 셋 분할을 위한 train_test_split
test_size : 테스트 데이터 셋의 비율
train_size : 학습 데이터 셋의 비율
shuffle : 데이터 셋 분리 전 미리 섞을지 여부
random_state : 실행 시 마다 동일한 난수를 생성하기 위한 값
K 최근접 이웃 알고리즘 적용을 위한 KNeighborsClassifier
(새로운 데이터가 주어졌을 때, 가장 가까운 K개의 이웃 데이터를 찾는 알고리즘)
<알고리즘 적용 프로세스>
1. 적용할 클래스 객체 생성
2. fit(X, y) 훈련 데이터 기반으로 모델 학습
3. predict(X) 테스트 데이터셋에 대해 학습된 모델로 예측
4. score(X, y) 테스트 데이터셋에 대해 모델의 성능 평가
<실습코드>
'''
-------- [최종 출력 결과] --------
Prediction:
Accuracy:
----------------------------------
'''
# 필요한 라이브러리 로딩
import sklearn
# load_iris 를 import 시키기
from sklearn.datasets import load_iris
# train_test_split 를 import 시키기
from sklearn.model_selection import train_test_split
# KNeighborsClassifier 를 import 시키기
from sklearn.neighbors import KNeighborsClassifier
# 데이터셋 로딩
iris = load_iris()
# 속성 이용하여 데이터셋의 전체적인 정보 확인(코드 제출시 주석 처리)
#print(iris.DESCR)
# 속성 이용하여 feature 확인(코드 제출시 주석 처리)
#print('Iris data shape:', iris.data.shape)
#print('Iris feature name\n:', iris.feature_names)
#print('Iris data\n:', iris.data)
#print('Iris data type\n:', type(iris.data))
# 속성 이용하여 class 확인 (코드 제출시 주석 처리)
#print('iris target name:\n',iris.target_names)
#print('iris target value:\n',iris.target)
# 데이터셋을 train, test 로 분할
# random_state 값은 강의와 동일하게 지정하세요.
x_train, x_test, y_train, y_test = train_test_split(
iris.data, iris.target, test_size=0.3, random_state=11)
# 분할된 데이터의 shape 확인 (코드 제출시 주석 처리)
#print('x_train.shape = ', x_train.shape)
#print('y_train.shape = ', y_train.shape)
#print('x_test.shape = ', x_test.shape)
#print('y_test.shape = ', y_test.shape)
# KNeighborsClassifier 의 객체 생성
knn = KNeighborsClassifier(n_neighbors=8)
#print(type(knn))
# 훈련 데이터를 이용하여 분류 모델 학습
knn.fit(x_train,y_train)
# 학습된 knn 모델 기반 예측
y_pred = knn.predict(x_test)
print('Prediction:\n',y_pred)
# 모델 평가
score = knn.score(x_test, y_test)
print('Accuracy : {0:.5f}'.format(score))
<실행결과>
Prediction:
[2 2 2 1 2 0 1 0 0 1 2 1 1 2 2 0 2 1 2 2 1 0 0 1 0 0 2 1 0 1 0 2 2 0 0 2 2
1 0 2 1 2 0 1 2]
Accuracy : 0.97778
분류와 회귀 문제를 모두 다룰 수 있는 알고리즘
- 분류: 다수결로 예측(KNeighborsClassifier)
- 회귀: 평균 값으로 결과 예측(KNeighborsRegressor)
KNN 모델 성능의 주요 이슈
하이퍼 파라미터(Hyper parameter)
- 학습 시작 전에 모델러에 의해 결정되는 값
- 모델의 성능에 영향을 주기에 최적의 값을 찾아 설정해야 함
ex. 거리계산방식, k값
KNN 정리
머신러닝의 목표: 표본 데이터를 기반으로 일반화된 모델을 만드는 것
최적화(Optimization): 훈련 데이터에서 최고의 성능을 내는 모델을 조정하는 과정
일반화(Generalization): 모델이 이전에 학습한 적 없는 데이터에서 얼마나 잘 수행되는지를 의미
<Overfitting 피하기>
<Underfitting 피하기>
머신러닝의 목표
과대적합과 과소적합 사이의 격차 최소화
최적화와 일반화라는 가치에서 적절한 균형을 찾도록 학습되어야 함