가천대 최성철 교수님의 '밑바닥부터 시작하는 머신러닝 입문'을 수강하며 노트 필기를 목적으로 포스팅합니다.
예전에 심심해서 유투브에서 우연히 파이썬을 가르치시는 동영상을 봤는데 핵심적인 꼭 필요한 내용들을 쉽게 전달하는 것을 보고 관심을 갖고 있다가 또 우연히(!) 와디즈에서 크라우드 펀딩으로 강좌를 여는 것을 보고 바로 지르게 되었습니다... 복습할 목적으로 강의를 들으면서 다시 보고 싶은 내용을 정리하려고 합니다.
아직까지는 크게 배우는 내용이없어서 조금씩 정리하고 싶은 내용만 정리할 것 같습니다.
Chapter 2. An Understanding of Data
데이터의 타입에 따라서 문제가 생길 수 있는데...
데이터의 최대/최수가 달라 scale에 따라서 y 값에 영향을 주는 정도가 달라질 수 있습니다. 이말은 데이터의 scale을 맞춰줄 필요가 있다는 이야기입니다. 서로 다른 데이터 scale을 사용하면 그만큼 y 값이 영향을 받는 정도가 달라지기 때문입니다. 이는 인공신경망에서 상당히 중요하게 다루는 내용입니다. 파이썬에서는 standardization, min_max scaling 등으로 sikit-learn에서 이를 쉽게 해주는 것들이
ordinary 및 nominal 값의 표현은 어떻게 해야할까... categorical 변수인데 이를 숫자로 표현된다고 해서 그게 어떤 numerical 타입은 아니며 따라서 get_dummy() 등을 사용하여 더미변수 형식으로 범주형을 표현할 수 있도록 해야할 것입니다.
또는 잘못 기입된 값들을 어떻게 처리할 것이고 값이 없는 결측치에 대해서는 어떻게 처리해야할지 단순히 그냥 제거하는게 맞는건지 다른 값으로 대체한다면 어떻게 대체해야 할 것인지 그런 고민들이 모여야 합니다.
또한 이상치라고 불리는 극단적으로 큰 값이나 작은 값들은 어떻게 처리해야할지... 회귀분석 같은 이상치에 민감한 알고리즘을 사용하게 되면 모델의 정확도가 많이 떨어질 수 있는데 이럴 때는 이상치들을 제거하고 모델을 학습할 수도 있습니다.
데이터 타입에 따른 데이터 전처리 문제는 너무나 중요하며 전통적인 머신러닝 영역에서는 변수(feature)의 선정 및 구성 등이 매우 중요한 이슈입니다. 딥러닝에서는 이러한 feature에 대한 작업이 덜 필요해지는데 데이터 자체로부터 feature를 학습시켜 패턴을 만들게 하기 때문에 조금 덜 중요해집니다.
데이터베이스에 대해서 알면 feature 별 데이터 유형에 대해서 아는 것처럼 말씀하시는데 이는 데이터 모델링을 하고 데이터베이스를 구축하거나 retrieval 하기 위해서는 데이터 자체에 대한 공부를 많이 하게 됩니다. 기본적인 자료구조를 익히게 되고 데이터의 타입등을 공부하며 데이터의 크기 등에 대한 고민을 하기도 합니다.
데이터 분석의 기본적인 재료가 되는 데이터 자체에 대한 충분한 고민이 많이 되어야 좋은 분석이 많이 되는 것 같습니다. 그만큼 데이터 타입에 대한 이해와 데이터 수집의 이해, 자료 구조에 대한 이해가 높다면 그만큼 풍부한 데이터 분석이 될 수 있고 아는 만큼 설명하기가 용이해집니다. Kaggle의 우승자들의 코드를 보면 데이터를 충분히 이해하고 데이터를 변형하고 만져보며 모델의 성능을 높이기도 합니다.
또 한 례로, MNIST 데이터의 숫자 인식을 높이기 위해 이미지의 각도를 조금씩 조절해서 학습 데이터로 사용하는 것만으로도 성능 상승의 효과를 보이는 사례를 봤을 때 이러한 발상을 하는 중에는 데이터에 대한 이해가 많은 영향을 미치는 것 같습니다.
Pandas로 데이터 불러오기
import pandas as pd
data_url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data' #Data URL
df_data = pd.read_csv(data_url, sep='\s+', header=None)
df_data.head()
df_data.columns = ['CRIM','ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO' ,'B', 'LSTAT', 'MEDV']
# Column Header 이름 지정
df_data.head()
NumPy로 모델 표현하기
import numpy as np
weight_vector = np.array([[1], [1], [1]])
x_vector = np.array([[3], [4], [5]])
dot product가 numpy의 연산 메소드로 아주 쉽게 계산된다. 행렬의 내적이라고 부른다.
weight_vector.T.dot(x_vector)
T는 Transpose의 약자 형태로 column 벡터를 row 벡터로, row 벡터를 column 벡터로 변경해준다.
df_matrix = df_data.as_matrix()
weight_vector = np.random.random_sample((14,1))
print(df_matrix.shape)
print(weight_vector.shape)
print(df_matrix.dot(weight_vector).shape)
행렬의 내적은 (a,b) * (c,d) = (a,d) 로 결과가 나오며, 이 때 b = c 이어야 한다.
보충자료: Linear Algebra 선형대수
Vector
Matrix
'Data Science > 머신러닝 기초' 카테고리의 다른 글
머신러닝 기초 (5) - Data Preprocessing 핵심 전략 (0) | 2018.04.03 |
---|---|
머신러닝 기초 (4) - 데이터 전처리 with Pandas (0) | 2018.01.27 |
머신러닝 기초 (3) - Pandas 복습 (1) | 2018.01.22 |
머신러닝 기초 (2) - NumPy 복습 (2) | 2018.01.22 |
댓글