[IMLP] Chapter 1. 소개
이 챕터는 단순히 머신러닝을 소개하는 챕터이기 때문에 요약을 간결하게 하였음!
[왜 머신러닝인가?]
- 직접 규칙을 만드는 것에는 점이 존재함
1) 작업이 변경되더라도 전체 시스템 다시 개발해야 할 수 있음
2) 규칙 설계 시 전문가들의 결정 방식에 대해 알아야 함
[지도 학습과 비지도 학습]
#. 지도 학습
- 이미 알려진 사례를 바탕으로 일반화된 모델
- 입력 데이터로부터 기대한 출력이 나오도록 알고리즘을 가르치는 것
#. 비지도 학습
- 알고리즘에 입력은 주어지지만 출력은 제공되지 않음
- 비지도 학습 성공 사례는 많지만 이해하거나 평가하는 일은 쉽지 않다!
#. 샘플 (sample) 혹은 데이터 포인트 (data point) : 하나의 개체 혹은 행
#. 특성 (feature): 샘플의 속성, 즉 열
[문제와 데이터 이해하기]
- 데이터를 이해하고 데이터가 해결해야 할 문제와 어떤 관려니 있는지 이해하는 것이 가장 중요
[scikit-learn]
- 자유롭게 사용, 배포 가능
- 매우 인기 높고 독보적인 파이썬 머신러닝 라이브러리
- 두 개의 다른 파이썬 패키지인 NumPy와 SciPy 사용함
- 그래프를 그리려면 matplotlib을, 대화식으로 개발하려면 Ipython과 주피터 노트북 설치해야 함
$ pip install numpy scipy matplotlib ipython scikit-learn pandas pillow
[matplotlib]
- 주피터 노트북에서는 %matplotlib notebook 이나 %matplotlib inline 명령을 사용하면 브라우저에서 바로 이미지를 볼 수 있음
[pandas]
- 데이터 처리와 분석을 위한 파이썬 라이브러리
[훈련 데이터와 테스트 데이터]
- 훈련 데이터/ 훈련 세트 (training set)
- 테스트 데이터/ 테스트 세트(test set) 혹은 홀드아웃 세트(hold-out set)
- 데이터를 섞어서 나눠주는 train_test_split 함수 사용 가능: 전체 행 중 75%를 레이블 데이터와 함께 훈련 세트로 뽑음
- 데이터는 대문자 X로, 레이블은 소문자 y로 표기
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)
- 유사 난수 생성기에 넣을 난수 초깃값을 random_state 매개변수로 전달하고 항상 같은 결과를 출력하게 함
[가장 먼저 할 일은 데이터 살펴보기]
- 일관성이 없거나 이상한 값이 들어가 있는 경우를 확인해야 함
- 시각화는 데이터 조사의 아주 좋은 방법: 산점도 (scatter plot) 혹은 산점도 행렬 (scatter matrix)
- 산점도 행렬 예제
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)
[k-최근접 이웃 (k-Nearest Neighbors, k-NN) 분류기]
- k는 가장 가까운 '하나' 가 아니라 훈련 데이터에서 새로운 데이터 포인트에 가장 가까운 'k개'을 찾음
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors = 1)
prediction = knn.predict(X_new)
format(iris_dataset['target_names'][prediction])
#. 테스트 세트 정확도 확인 1
y_pred = knn.predict(X_test)
print("테스트 세트의 정확도: {:.2f}".format(np.mean(y_pred == y_test)))
#. 테스트 세트 정확도 확인 2
print("테스트 세트의 정확도: {:.2f}".format(knn.score(X_test,y_test)))