[빅데이터 직무연구회] 1주차 모임 정리
작성자 : 블로거
모임 요일 : 4월 12일 목요일 저녁 6시
학교 커뮤니티에서 빅데이터쪽으로 관련해 스터디 및 공모전 준비하는 직무연구회를 모집한다는 글을 보고 신청했다. 직무연구회란 직무 중심의 채용이 일반화 된 상황에서 학생의 희망진로 및 관심이 유사한 학생들이 모여 '직무'별 자치 학습조직(동아리, 취업스터디 등)을 운영하여 취엽역량을 제고하는 목적으로 학교측에서 정식 지원해주는 모임이다.
1차적으로 모집된 사람들끼리 간단하게 모여, 운영 방향을 어떻게 잡으면 좋을지 의논했다. 도서는 '파이썬 라이브러리를 활용한 머신러닝, 안드레아스 뮐러, 세라 가이도 지음, 박해선 옮김, 한빛미디어', 으로 정했다. 다음 1주차 모임까지 챕터 1장까지 하는 것으로 끝이 났다.
< 앞 표지 >
< 뒷 표지 >
1주차 모임에서 앞으로의 스터디 방향을 정했다. 모두 사전에 정한 진도까지 공부한다. 매 번 발표자 2명을 두어, 그 진도를 간략하게 브리핑한다. 이후 발표자는 물론 다른 동아리원끼리 책에 쓰여져있는 설명 이외에 다른 레퍼런스 자료를 참고하여 얻은 지식들을 공유하고, 이해가 되지 않거나 궁금한 점을 다같이 토의한다.
발표자는 동아리 구성원 상 통계학 전공자도 있고, 아닌 비전공자도 있다. 발표자를 선정할 때 통계학 전공자 중 1명과 비전공자 중 1명을 짝짓는다.
발표자 이외에 전 시간에 했던 내용을 리뷰하는 복습자를 사전에 정한다. 복습자는 모임이 끝날 때 까지 몰랐던 점이나, 이후 복습을 통해 깨달은 사실들을 추가로 공유할 수 있다.
챕터 1장은 소개 챕터이다. 1.1 장은 머신러닝이 무엇인지, 어떤 문제를 해결하는지 알려준다. 1.2장부터 1.6장까지는 아나콘다를 통해 기본적인 파이썬3 설치와 scikit-learn 라이브러리 설치를 설명한다. scikit-learn 의 디펜던시 라이브러리는 NumPy와 SciPy, matplotlib, pandas, mglearn 이 있다. 실습 환경으로 주피터 노트북 설치법을 알려준다.
1.7장은 scikit-learn의 예제 데이터셋인, 붗꽃(iris)의 꽃받침 길이와 폭, 꽃잎의 길이와 폭으로 품종이 어떤 것인지 머신러닝 모델을 돌려본다.
1.1 왜 머신러닝인가?
1.1.1 머신러닝으로 풀 수 있는 문제
1.7 첫 번째 어플리케이션: 붓꽃의 품종 분류
from IPython.display import display
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import mglearn
from sklearn.datasets import load_iris
iris_dataset = load_iris()
print("iris_dataset의 키 : \n{}".format(iris_dataset.keys()))
print(iris_dataset['DESCR'] + "\n...")
print("타깃의 이름: {}".format(iris_dataset['target_names']))
print("특성의 이름: {}".format(iris_dataset['feature_names']))
print("data의 타입: {}".format(type(iris_dataset['data'])))
print("data의 크기: {}".format(iris_dataset['data'].shape))
print("data의 처음 다섯 행:\n{}".format(iris_dataset['data'][:5]))
print("target의 타입: {}".format(type(iris_dataset['target'])))
print("target의 크기: {}".format(iris_dataset['target'].shape))
print("타깃:\n{}".format(iris_dataset['target']))
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)
print("X_trian의 크기: {}".format(X_train.shape))
print("y_train의 크기: {}".format(y_train.shape))
print("X_test 크기: {}".format(X_test.shape))
print("Y_test 크기: {}".format(y_test.shape))
iris_dataframe = pd.DataFrame(X_train, columns=iris_dataset.feature_names)
pd.plotting.scatter_matrix(iris_dataframe, c=y_train, figsize=(15, 15), marker='o', hist_kwds={'bins': 20}, s=60, alpha=.8, cmap=mglearn.cm3)
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train, y_train)
X_new = np.array([[1, 1.9, 2, 5]])
print("X_new.shape: {}".format(X_new.shape))
prediction = knn.predict(X_new)
print("예측: {}".format(prediction))
print("예측한 타깃의 이름: {}".format(iris_dataset['target_names'][prediction]))
y_pred = knn.predict(X_test)
print("테스트 세트에 대한 예측값:\n {}".format(y_pred))
print("테스트 세트의 정확도: {:.5f}".format(np.mean(y_pred == y_test)))
iris_dataset 자료 안에는 data, target, target_names, DESCR, feature_names 등의 키로 분류되어 데이터를 저장하고 있다. data는 꽃받침과 꽃잎의 길이와 폭 숫자 데이터가 들어가있고, target은 품종 '숫자' 데이터가 들어가 있다. target_names 에는 각 숫자가 어떤 품종을 뜻하는지 문자열로 들어가 있다. DESCR은 데이터에 대한 간단한 통계치들을 설명한다. feature_names는 각 속성이 어떤 것을 뜻하는지 문자열로 들어가있다.
성과를 측정하기 위해 주어진 데이터셋에서 훈련 데이터와 테스트 데이터로 나눠야 한다.
레이블된 데이터(150개의 붓꽃 데이터)를 두 그룹으로 나눈다. 그 중 하나는 머신러닝 모델을 만들 때 사용하며, 훈련 데이터 혹은 훈련 세트(training set)라고 한다. 나머지는 모델이 얼마나 잘 작동하는지 측정하는 데 사용하며, 이를 테스트 데이터, 테스트 세트(test set) 혹은 홀드아웃 세트(hold-out set)라고 부른다.
scikit-learn 에서 데이터셋을 섞어 나눠주는 train_test_split 함수가 있다. 기본적으로 75%의 훈련 세트와 나머지 25% 테스트 세트를 나눠준다. 일반적으로 그렇게 하는 것이 좋은 선택이다. 바꾸기 위해서는 test_size 매개변수로 .5 또는 .65 같이 비율을 설정해줘 바꿔줄 수 있다.
가장 먼저 할 일은 데이터를 살펴보는 것이다. 그 중 산점도(scatter plot)를 사용할 것이다. 산점도는 데이터에서 한 특성을 x 축에 놓고 다른 하나는 y축에 놓아 각 데이터 포인트를 하나의 점으로 나타내는 그래프이다. 3개 이상의 특성을 표현하기 위해 산점도 행렬(scatter matrix)을 사용한다. 4개의 특성을 가진 붓꽃의 경우처럼 특성의 수가 적다면 괜찮은 방법이다. 산점도 행렬은 한 그래프에 모든 특성의 관계가 나타나는 것은 아니기 때문에 각각의 나누어진 산점도 그래프에는 드러나지 않는 중요한 성질이 있을 수 있다.
pd.plotting.scatter_matrix(iris_dataframe, c=y_train, figsize=(15, 15), marker='o', hist_kwds={'bins': 20}, s=60, alpha=.8, cmap=mglearn.cm3)
첫번 째 인수는 산점도 행렬을 만들, 팬더스를 통해 만든 데이터프레임이다. c는 색으로 구분할 데이터이다. figsize는 시각화한 그림의 크기이다. marker는 출력되는 특성이 어떤 글자로 나오게할 지 설정해준다. hist_kwds 매개변수는 딕셔너리로 넘겨준다. bins 는 히스토그램의 구간 수를 뜻한다. s 매개변수는 출력되는 특성의 크기, alpha 매개변수는 출력되는 특성의 투명도, cmap은 어떤 컬러맵을 사용할지 정한다.
머신러닝 모델로, k-최근접 이웃(k-Nearest Neighbors, k-NN) 분류기를 사용했다. 단순히 훈련 데이터를 저장하여 만들어진다. 새로운 데이터 포인트에 대한 예측이 필요하면 알고리즘은 새 데이터 포인트에서 가장 가까운 훈련 데이터 포인트를 찾는다. 그런 다음 찾은 훈련 데이터의 레이블을 새 데이터 포인트의 레이블로 지정한다.
k-최근접 이웃 알고리즘에서의 k는 가장 가까운 이웃 '하나'가 아니라 훈련 데이터에서 새로운 데이터 포인트에 가장 가까운 'k개' 이웃을 찾는다는 뜻이다. 그 다음 이웃들의 클래스 중 '빈도'가 가장 높은 클래스를 예측값으로 사용한다. 현재 예시에서는 1로 설정되어 있다.
훈련 데이터셋으로부터 모델을 만들기 위해 knn 객체의 fit 메서드를 사용한다.
예측을 할 떄는 knn 객체의 predict 메서드를 사용한다.
모델을 평가할 때는 테스트 세트를 predict 하여 나온 결과를, knn 객체의 score 메서드로 측정할 수 있다.
다음 진도는 Chapter 2 지도학습에서 2.1 분류와 회귀, 2.2 일반화, 과대적합, 과소적합, 3.3 지도 학습 알고리즘에서 k-최근접 이웃, 선형모델, 2.3.4 나이브 베이즈 분류기(~101P) 까지이다.
다음 발표자 : 블로거, 강OO
복습자 : 정OO
다음 모임은 4월 29일 일요일 저녁 6시이다.
'인공지능' 카테고리의 다른 글
[빅데이터 직무연구회] 5회차 모임 예제 소스 (1) (0) | 2018.05.19 |
---|---|
[빅데이터 직무연구회] 5회차 모임 정리 (0) | 2018.05.19 |
[빅데이터 직무연구회] 4회차 모임 정리 (0) | 2018.05.18 |
[빅데이터 직무연구회] 3주차 모임 정리 (0) | 2018.05.04 |
[빅데이터 직무연구회] 2주차 모임 정리 (0) | 2018.05.03 |
댓글