joo_ 2022. 5. 18. 14:37

이 챕터는 단순히 머신러닝을 소개하는 챕터이기 때문에 요약을 간결하게 하였음!

 

[왜 머신러닝인가?]

- 직접 규칙을 만드는 것에는 점이 존재함

 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)))