Kaggle Tutorial 1 - Introduce to ML

황동준·2021년 3월 7일
0

Kaggle Tutorial

목록 보기
1/2

kaggle
python random_state에 관련된 얘기

1. csv 파일 열기

csv 파일은 ,로 데이터를 구분하는 텍스트형 파일이다. 엑셀로도 열 수 있으며 엑셀 파일에서 csv 파일로 바꿀 수도 있다.

import pandas as pd
path = '...'
csv_data = pd.read_csv(path)
csv_data.describe()

위와 같은 방법으로 읽을 수 있다.

y = csv_data.Price
feature = [...,...]
X = csv_data[feature]

이런 식으로 target과 feature을 분리하여 저장 할 수 있다.

2. decision tree

decision tree는 각각의 질문으로 데이터 셋을 나누는 것을 의미한다. depth가 깊어 질수록 데이터가 세세하게 나뉜다.

from sklearn.tree import DecisionTreeRegressor
tree_model = DecisionTreeRegressor(random_state=1)
tree_model.fit(X, y)

이런 식으로 model을 선언하고 fit(훈련)시킬 수 있다.

앞에 feature을 넣고, 뒤에 target을 넣어야 한다. (target은 예측해야 하는 값)

3. MAE로 예측값과 실제 값의 차이 구하기

MAE는 Mean Average Error의 줄임말로, 실제값과 예측값의 평균값 차이를 알려준다.
이는 modelvalidation을 체크해주고, decision tree로 따졌을 때, leafdepth를 얼마나 크게하냐에 따라서 MAE가 달라지므로, 이를 이용하여 최적의 depth를 찾을 수 있다.

from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_average_error as mae
train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=0)
model = DecisionTreeRegressor()
model.fit(train_X, train_y)
predictions = model.predict(test_X)
print(mae(test_y, predictions))

위는 train데이터로 학습시킨 모델에 test데이터를 넣어서 얼마나 예측한 값이 들어 맞는지를 평가하는 코드이다.

4. Overfitting, Underfitting

Overfittingtrain data에 너무 딱 맞게 훈련이 되어있어서 test data(new data)에 대한 예측값이 많이 틀리는 것이고, Underfittingtrain data에 맞지 않고 너무 유동적이게 훈련을 해놔서 train data와 test data 둘 다 정확도가 낮아져 버리는 것이다.

따라서 decision tree에서는 depth를 높일 수록 Overfitting이 일어날 것이고, 낮출 수록 Underfitting이 일어날 것이다.

다음 코드에서는 depth를 여러개로 나눈 후 최적의 depth를 찾을 것이다.

이는 DecisionTreeRegressormax_leaf_nodes라는 parameter을 통해 depth를 조절할 것이다.

def get_mae(i, train_X, test_X, train_y, test_y):
    model = DecisionRegressor(max_leaf_nodes=i, random_state=1)
    model.fit(train_X, train_y)
    predictions = model.predict(test_X)
    mae_value = mae(test_y, predictions)
    return max_value

depth = [1, 5, 50, 500]
key_mae = {i: get_mae(i, train_X, test_X, train_y, test_y) for i in depth}
best_depth = min(key_mae, key=key_mae.get)

이런 방법으로 best_depth를 구하여 최적의 model을 훈련시킬 수 있다.

5. Random Forest 이용하기

random forest 설명 사이트
이 또한 다음과 같이 이용한다.

from sklearn.ensemble import RandomForestRegressor

나머지는 다 똑같지만, RandomForest에는 max_leaf_nodes parameter가 없다. 이 점 유의하길 바란다.

profile
부담없이 기록하기

0개의 댓글