[Python.NumPy] Y값 모델링 및 모델 평가 방법론
2020. 11. 30. 18:00ㆍPython과 머신러닝/NumPy 데이터 분석
0. 요약
- Boston Housing Data를 가지고 Y값을 예측해보는 실습을 해보자.
- Data를 웹으로부터 읽어 들이고, 벡터 곱을 하기 전 전처리를 수행하고,
- 벡터 곱을 통해 예측 Y값을 계산한 뒤에
- 실제 Y값과 비교하는 실습을 해보려고 한다.
- 총코드는 다음과 같다.
import pandas as pd
# 데이터 불러오기 & Column header 추가
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) # csv 타입 데이터 로드
print(df_data.values.shape) # 현재 데이터의 row x column의 개수를 알려주는 함수
df_data.columns = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM',
'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
# 데이터의 컬럼(HEADER)를 직접 추가해줄 수 있음
# 원하는 값을 y변수로 이동하고, numpy 데이터 타입으로 변환하기
y = df_data.pop('MEDV')
df_matrix = df_data.values # numpy 데이터 타입으로 변환
print(df_matrix.shape) # 데이터 확인
# Random한 weight vector 생성 및 벡터곱 연산 수행하기
weight_vector = np.random.random_sample(size=(14, 1)) # 14x1의 random vector 생성하여 weight_vector에 담기
df_matrix.dot(weight_vector)[:5] # 첫 5행에 대해, random weight로 계산했을 때 나오는 예상 y값
# 실측치와 비교하여 모델 평가하기
y[:5] # 실제 5행에 대한 y 값. 당연히 random으로 생성한 weight이기 때문에 택도 없음
1. 데이터 불러오기 및 Column Header 추가하기
# 데이터 불러오기 & Column header 추가
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) # csv 타입 데이터 로드
print(df_data.values.shape) # 현재 데이터의 row x column의 개수를 알려주는 함수
df_data.columns = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM',
'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
# 데이터의 컬럼(HEADER)를 직접 추가해줄 수 있음
- 지난 시간에 배웠던 것과 동일하게 원하는 URL로부터 CSV 형태의 데이터를 읽어 들일 수 있다
- df_data.values는 data의 전체 데이터 값을 읽어들이는 함수이고,
- .shape는 해 데이터의 row x column의 크기를 알려주는 함수이다. 이 함수를 통해 내 데이터가 어떻게 생겼는지 간단하게 확인이 가능하다.
- df_data.columns = 연산을 통해서 각 Attribute에 이름을 추가할 수 있다. Excel에서 헤더를 추가하는 동작과 동일하다.
2. 원하는 값을 y변수로 이동하고, numpy 데이터 타입으로 변환하기
# 원하는 값을 y변수로 이동하고, numpy 데이터 타입으로 변환하기
y = df_data.pop('MEDV')
df_matrix = df_data.values # numpy 데이터 타입으로 변환
print(df_matrix.shape) # 데이터 확인
- 우리의 궁극적인 목표는 데이터의 독립변수 X들을 weight vector와 곱하여서, 원하는 y값이 나오는지를 확인하는 것이다.
- 그렇기 때문에 df_data에서 y값은 따로 빼주고, df_data의 x값들을 weight vector와 곱해줘야 한다.
- df_data.pop 함수는 기존 데이터에서 주어진 column을 잘라내어 반환하는 함수이다.
- 그렇게 남은 x변수의 값들을 .values 연산을 통해 df_matrix에 numpy 형태로 옮겨 담는다.
- 다시 한번 .shape연산을 통해 column은 한 개 줄고, row들은 동일한지 확인할 수 있다.
3. Random 한 weight vector 생성 및 벡터 곱 연산 수행하기
# Random한 weight vector 생성 및 벡터곱 연산 수행하기
weight_vector = np.random.random_sample(size=(14, 1)) # 14x1의 random vector 생성하여 weight_vector에 담기
df_matrix.dot(weight_vector)[:5] # 첫 5행에 대해, random weight로 계산했을 때 나오는 예상 y값
- np.random.random_sample 함수를 통해 원하는 size로 random 값을 생성할 수 있다.
- 위의 코드는 14x1 size의 random 한 값들을 생성하여 weight_vector로 정의하였다.
- .dot 함수를 통해 벡터 곱을 수행하면, 각 instance에 random vector를 곱한 y 값의 예측치가 나온다.
- 여기에 [:5]를 하면 상위 5개 row만 slicing 한다 (첫 5행만 눈으로 보고 확인하기 위한 코드이다).
4. 실측치와 비교하여 모델 평가하기
y[:5] # 실제 5행에 대한 y 값. 당연히 random으로 생성한 weight이기 때문에 택도 없음
- 마지막으로 아까 .pop 함수를 통해 뽑아놓았던 y값 실측치 중 상위 5개 행을 출력하여 비교한다.
- 우리의 weight_vector는 random 하게 생성된 값들이기 때문에 터무니없고 아무런 관계없는 값 들일 것이다.
- Machine Learning이란 기계를 학습시켜 이 weight_vector에 적합한 값들을 구하는 것이고, Test Data를 가지고 실측치와 비교하여 모델을 평가하는 과정으로 진행된다.
5. 마무리
- 이번 시간에는 Data 전처리의 가장 기초 단계 실습을 했다.
- 데이터 읽어오기 -> y값 분리하기 -> NumPy 형태로 변환하기
- 그런 후 weight_vector를 (random 하게나마) 생성했고,
- 벡터 곱을 통해 예상 y값들을 처음으로 계산해보았다.
- Machine Learning이란 실제 Y값과 유사한 예측 Y값을 잘 계산하는 weight_vector를 Train Data를 통해서 추출하는 것이다.
'Python과 머신러닝 > NumPy 데이터 분석' 카테고리의 다른 글
[Python.NumPy] arange/zeros/empty 함수의 차이 - Creation Function I (0) | 2020.12.04 |
---|---|
[Python.NumPy] ndarray indexing과 slicing (0) | 2020.11.30 |
[Python.NumPy] ndarray.reshape - 크기 변환하기 (0) | 2020.11.30 |
[Python.NumPy] ndarray 이해하기 (0) | 2020.11.30 |
[Python.NumPy] 벡터/행렬 선언하기 및 벡터곱 연산하기 (0) | 2020.11.30 |