머신러닝을 마무리하고 이제 딥러닝을 공부해보자. 패션 MNIST MNIST는 머신러닝과 딥러닝을 배울 때 자주 사용하는 데이터셋이다. 딥러닝에서는 손으로 쓴 0~9까지의 숫자로 이루어진 데이터를 사용한다. 패션 MNIST는 크기와 개수가 동일하지만 숫자 대신 패션 아이템으로 이루어진 데이터이다. 패션 MNIST 데이터는 워낙 유명해서 많은 딥러닝 라이브러리에서 가져올 수 있는 도구를 제공한다. 이 책에서는 텐서 플로(Tensor Flow)를 사용해서 데이터를 불러온다. 패션 MNIST가 어떤 데이터인지 확인해 보자. 텐서 플로도 코랩에서 사용할 수 있다. 텐서 플로의 케라스(Keras) 패키지를 임포트해서 패션 MNIST 데이터를 다운로드하자. keras.datasets.fashion_mnist 모듈 아..
이전 글에서 KMeans 클래스를 이용하여 각 과일들을 클러스터링 했다. 또한 최적의 K를 찾는 법을 클러스터 중심과 클러스터에 속한 샘플 사이의 거리인 이너셔의 변화를 통해 찾아냈다. 그렇게 업로드된 사진을 클러스터로 분류하여 폴더별로 저장했지만, 너무 많은 사진이 등록되어 저장 공간이 부족하다. 사진의 용량을 줄이는 법은 없을까? 차원과 차원 축소 지금까지 데이터가 가진 속성을 특성이라고 했다. 과일 사진에는 가로 100, 세로 100으로 총 10,000개의 픽셀이 있기 때문에 10,000개의 특성이 있다고 할 수 있다. 머신러닝에서는 이런 특성을 차원(dimenstion)이라고도 부른다. 그렇다면 10,000개의 특성은 10,000개의 차원이라고 할 수 있다. 이 차원을 줄일 수 있다면 저장 공간을..
지금까지 꽤 많은 모델들을 설계해봤고 저번 글에서는 테스트 세트를 사용하지 않고 모델의 성능을 평가하고 하이퍼 파라미터 튜닝까지 해봤다. 이들 중에서 어떤 알고리즘이 가장 좋은 알고리즘인지 평가할 수 있을까? 문제마다 성능이 다르다 하더라도 대체로 성능이 좋은 알고리즘이 무엇일지 생각해보자. 정형 데이터와 비정형 데이터 앞에서 생선의 길이, 높이, 무게 등을 데이터로 사용하였다. 또한 이 데이터들은 CSV파일에 정리되어있었다. 쉽게 말해 어떤 구조로 되어있다는 뜻이다. 이를 정형 데이터(Structured Data)라고 한다. 이런 데이터들은 CSV나 데이터베이스, 엑셀에 저장하기 쉽다. 정형 데이터의 반대가 비정형 데이터(Unstructured Data)이다. 비정형 데이터는 데이터베이스나 엑셀로 표현..
이전 글에서 결정 트리를 이용하여 와인을 분류해보았다. 결정 트리는 어떤 식으로 분류가 진행되었는지 쉽게 알 수 있었다. 지금까지는 훈련 세트를 이용하여 테스트 세트의 점수를 확인했다. 하지만 테스트 세트를 사용하여 성능을 확인하다 보면 모델을 테스트 세트에 맞추게 되는 셈이다. 가능한 한 테스트 세트를 사용하지 말고 모델을 설계한 뒤에 한 번만 사용하는 것이 좋다. 이번 글에서는 결정 트리의 매개 변수들을 테스트해보자. 검증 세트(Validation Set) 테스트 세트를 사용하지 않고 과소/과대 적합을 판단하는 방법이 무엇일까? 훈련 세트를 조금 떼서 사용해보면 되지않을까? 너무 단순하지만 실제로 많이 사용하는 방법이라고 한다. 그리고 이렇게 훈련 세트에서 20~30% 정도 떼어 놓은 세트를 검증 세..
이전까지는 생선들의 종류를 분류하는 모델, 길이를 이용해 무게를 예측하는 모델, 특정 생선일 확률을 예측하는 모델 등을 설계했었다. 이번엔 캔 와인을 예시로 들어 캔에 인쇄되어있는 도수, 당도, pH 값으로 화이트 와인인지 레드 와인인지를 분류해보자. 분류를 시작하기 전에 생각해보면 길이와 무게 등의 데이터로 빙어인지 도미인지 구분하는 모델을 설계했었기 때문에 와인을 분류하는 것 또한 쉽게 해결할 수 있을 것 같다. 로지스틱 회귀를 이용한 와인 분류 일단 데이터셋을 불러와서 head() 메서드로 처음 5개의 샘플을 확인해보자. import pandas as pd wine = pd.read_csv('https://bit.ly/wine_csv_data') wine.head() 데이터셋에는 알코올 도수, 당도..
이전 글에서 어떤 생선이 7개의 생선들 중에서 어떤 생선 일지에 대한 확률을 구하는 방식으로 로지스틱 회귀를 이용하여 모델을 설계해봤다. 이번에는 데이터가 한 번에 준비되는 것이 아닌 점진적으로 준비되는 데이터로 모델을 훈련하는 법을 공부해보자. 점진적인 학습 7개의 생선에 대해 데이터가 한번에 주어지는 것이 아니라 조금씩 전달된다면 어떤 방식으로 훈련을 해야 할까? 기존의 훈련 데이터에 새로운 데이터를 추가하여 모델을 매일 훈련시키는 방법을 떠올릴 수 있을 것이다. 하지만 이 방법은 시간이 지날수록 데이터가 늘어난다는 것이다. 미래를 생각하면 좋지 않은 방법이다. 그렇다면 새로운 데이터를 추가할 때 이전 데이터를 버리면서 훈련 데이터 크기를 일정하게 유지하는 방법은 어떨까? 이 방법에도 문제가 있다. ..
이전 글에서 다중 회귀 모델을 설계하고 특성을 조합하여 새로운 특성을 만들고 alpha 값을 이용한 규제까지 해보았다. 이번 글에서는 어떤 생선에 대해서 이 생선이 얼마의 확률로 7개의 생선들 중 어떤 종류의 생선 일지 추측하는 모델을 설계해보자. K - 최근접 이웃 알고리즘 이전부터 매번 등장해주시는 알고리즘이다. 확률을 구한다는 것은 분류 문제일까 회귀 문제일까? 7개의 생선들 중에서 종류를 추측하는 것이니까 분류 문제일까 아니면 확률이라는 수치를 구하는 것이니까 회귀 문제일까? k-최근접 이웃 알고리즘은 가장 가까운 이웃 샘플로 추측을 해주니까 10개의 샘플을 조사해서 개수에 따라 확률을 매기면 될 것 같다. 판다스의 read_csv() 함수로 CSV 파일을 데이터 프레임(Dataframe)으로 변..
이전 챕터의 데이터 전처리를 통해 길이와 무게 데이터로 도미인지 빙어인지 구분하는 머신러닝 모델을 개발했다. 이번 에는 K-최근접 이웃 회귀 모델로 농어의 길이와 무게 데이터로 어떤 농어의 길이만 주어졌을 때 무게를 예측해보자. 분류와 회귀 K-최근접 이웃 회귀에 대해 공부하기 전에, 회귀가 무엇인지 알아보자. 지도 학습 알고리즘은 크게 분류와 회귀로 나뉜다. 분류는 이전 챕터에서 다뤘던 것처럼 말 그대로 샘플을 몇 개의 클래스 중 하나로 분류하는 문제이고, 회귀는 임의의 어떤 숫자를 예측하는 문제이다. 내년도 경제 성장률을 예측하거나 배달이 도착할 시간을 예측하는 것도 회귀라고 할 수 있다. K-최근접 이웃 회귀라는 이름에서 알 수 있는 것처럼 앞서 공부했던 K-최근접 이웃 알고리즘이 회귀에도 작동한다..