비전공자를 위한 개쉬운 인공지능 코딩- 딥러닝용 데이터 가져오고 분석하기 (2-2부)
지난 2-1차시까지 Colab 환경설정, 딥러닝을 위한 부품세팅과 주요 라이브러리 소개를 했다.
이번 2-2 포스팅에서는 '어떤'데이터를 '어디서' 가져와서 '어떻게' 사용하는지 설명한다.
딥러닝을 포함한 모든 인공지능은 학습이 가장 중요한데, 인공지능을 처음 구현을 했을땐 아주 똑똑하고 능력있고 빠른 아이와도 같기 때문이다. 애들이 얼마나 좋은 능력을 가지고 태어났는지도 중요하지만 얼마나 좋은 정보를 어느 정도로 배워야 하는지에도 굉장히 중요한 것과 같다.
이처럼 어떤 데이터를 적절히 학습시키느냐가 인공지능 프로그램의 성능을 좌지우지한다.
데이터를 취득하는 방법에는 'Kaggle' 이나 'github'와 같이 오픈소스 형태로 편하게 다운받아서 쓰는 경우가 많지만, private하거나 취득에 한계가 있을때는 '생성적 적대 신경망' , 'Autoecoder'등과 같은 생성모델을 이용해 기존의 적은 데이터를 증강시켜 학습에 이용하기도 한다.
1.데이터 가져오기
인공지능 기반의 증강 모델은 본 딥러닝 기초 코스보다 많이 심화된 method이므로 차후에 설명하기로 하고, 이번엔 open source 형태로 colab에 기본으로 달려있는 'california housing dataset' 을 사용한다
지난 시간까지 알려준 Colab 세팅에서 맨 왼쪽의 파일그림을 누르고 'sample data' 디렉토리 하위에 기본으로 설치되어 있다.지난 시간까지의 환경설정을 잘 따라왔다면, pandas라는 레고를 설치하고, 줄임말로 pd로 만든 후, pandas가 어떤 역할을 하는지 알고 있을 것이다.
pandas는 간단하게 설명을 한번 더 하자면, 데이터 조작 및 분석을 위한 python 용 라이브러리(레고)인데, 이 pd(pandas)를 사용해 캘리포니아 데이터를 우리 프로그램에 받아와 분석해보자
pd 레고봉투에는 'read_csv'라는 레고가 있는데, 이 레고는 우리가 사용할 csv양식의 데이터의 경로를 () 안에 적어와 사용할 수 있게 해준다.
본 강의에 사용된 캘리포니아 도시주택 관련 데이터 말고도 과거의 데이터가 주루룩 있는, 주식, 부동산이나, 코로나 등등 데이터를 이용한 'regression' , 즉 예측 모델을 활용할 때 자주 이용하니 자주 나오는 레고들의 패턴은 암기하면 굉장히 편하다.
저 코드를 해석하자면, 'pd'의 'read_csv'를 이용해 캘리포니아 데이터 세트를 잘 가져와 앞으로는 'dataset'으로 간편히 줄여서 사용하기로 선언한 것이다.
이제 dataset의 성분을 들여다보기 위해서는 dataset만 입력하면 된다. (dataset.shape로 차원을 확인할 수 있고, dataset.head 로 앞쪽 데이터 5개만 추출해 사용할 수 있고 등의 pandas를 활용한 분석 방법은 무궁무진하다)
17000의 rows와 9columns (앞으로는 차원이라고 하겠다) 로 이루어진것과 , columns의 성분, 각 값( 앞으로는 value라고 하겠다) 등을 모두 확인할 수 있다.
이를 통해 1990년 캘리포니아의 인구조사 정보, 경도, 위도, 주택 중위 연령등을 파악할 수 있는 데이터 과학자의 아주 기초 스킬도 얻은 것이다.
2.데이터 전처리
데이터를 학습시키기 위해 가져왔다면, 백지상태의 인공지능 아이에게 '잘' 소화시키기 위해 다듬어서 주면 더 잘 소화해서 더 좋은 인공지능으로 발전할 수 있다.
그러기 위해 가져온 그대로의 데이터 (앞으로는 raw data, 로우 데이터 라고 하겠다)를 추출하거나 수학적인 기법을 이용해 변환하는 과정을 데이터 전처리라고 한다.
이번에는 데이터 전처리의 가장 기본적인 방법들을 알려줄것이며, 앞으로 다른 심화적인 딥러닝 내용을 할 때마다 새로운 전 처리 방법을 사용한다면 추후로 짧게 설명할 예정이다.
파이썬에는 데이터 슬라이싱이라고 하는, 사용자가 raw data에서 실제로 필요로 하는 데이터만 추출하는 기법이 있다.
기본적인 문법은 pandas.DataFrame.loc[행 정보, 열 정보] 로 이루어져 있고 이러한 정보를
pandas.DataFrame.loc['index 값1'] 의 방식으로 'index 값1'을 뽑아낸다.
그림으로 보면 한번에 이해가 편하다
dataset['longitude'] 로 아까 가져온 csv 파일의 logitude 열 부분만 싹 뽑아서 dataset1으로 다시 만들어내는 과정이다. 이렇게 열만 뽑아서 가져올 수 있고, dataset[:2]의 방법으로 2행 밑쪽을 다 잘라서 X로 저장한다던가, dataset [2:]의 방법으로 2행의 위쪽을 다 잘라서 X_2로 저장이 가능하다.
이러한 데이터 슬라이싱 기법은 베리에이션이 굉장히 많으니 몇번 따라해보며 자기가 필요한 것들만 추출하다보면 금방 감이 잡힌다.
이렇게 슬라이싱을 통해 뽑은 데이터를 그대로 인공지능의 학습에 사용해도 되지만, raw data의 'population' 열을 보면 각 value끼리의 차이가 많이 나기도 하고, 다른 'median_house_value' index의 전체적인 값의 크기가 차이가 많이 나서 다차원의 값이 비교가 어렵기도 하고, 'overflow' 라던지 'underflow' 와 같이 불안정 및 학습의 수렴 속도를 저하시키는 요인이 일어 날 수 있다.( 초보자는 그런게 있구나~라고만 알면 된다)
이번에는 'StandardScaler'를 사용하여 평균과 표준편차로 raw data를 다시 표현해보도록 한다. (수리적인 전처리 방법에는 StandardScaler이외에도 MinMaxScaler나 MaxAbs 등 여러가지가 많다, 필요할때마다 사용해보자)
첫날에 알려준 from과 import를 이용해 sklearn회사의 'StandardScaler' 레고를 가져와서 StandardScaler를 scaler라고 말하기로 선언한다.
raw data인 dataset을 scaler를 이용해 전처리한 데이터를 dataset2로 선언한다.
dataset2를 위 사진의 아래 셀과 같이 확인해보면 크기가 다 비슷비슷한 숫자로 변환됨을 알 수 있다
더 명확한 느낌을 느낄 수 있도록 StandardScaler의 원리를 나타내는 사진을 첨부한다
----
숙제: 숙제는 github에 공개되어 있는 '인디언의 발병 데이터세트' 를 학습용 데이터로 사용할 예정이다.
데이터 세트는 아래의 링크에서 다운받아 'indian.csv' 의 이름으로 저장하자, (자기가 편한 파일명으로 저장하면 된다)
https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv
or
https://www.kaggle.com/datasets/kumargh/pimaindiansdiabetescsv
데이터의 세부 설명은 아래와 같다. 데이터와 결과에 대한 이해를 도울 수 있다.
https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.names
위 링크의 자료를 '어떻게든' 'indian.csv' 파일로 만들어 오늘 강의에 그대로 접목시키며 연습해보자
아래 두개는 '어떻게든'의 힌트이다.
다음 차시에는 숙제의 인디언 데이터세트를 이용해 당뇨병 발병률을 예측하는 딥 러닝 모델을 만들 예정이니 꼭 위의 숙제를 해보고 다음 단계로 넘어오는 것을 추천한다.
댓글
댓글 쓰기