kaggle
python random_state
에 관련된 얘기
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을 분리하여 저장 할 수 있다.
decision tree는 각각의 질문으로 데이터 셋을 나누는 것을 의미한다. depth가 깊어 질수록 데이터가 세세하게 나뉜다.
from sklearn.tree import DecisionTreeRegressor
tree_model = DecisionTreeRegressor(random_state=1)
tree_model.fit(X, y)
이런 식으로 model을 선언하고 fit(훈련)시킬 수 있다.
앞에 feature을 넣고, 뒤에 target을 넣어야 한다. (target은 예측해야 하는 값)
MAE는 Mean Average Error
의 줄임말로, 실제값과 예측값의 평균값 차이를 알려준다.
이는 model
의 validation
을 체크해주고, decision tree
로 따졌을 때, leaf
의 depth
를 얼마나 크게하냐에 따라서 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데이터를 넣어서 얼마나 예측한 값이 들어 맞는지를 평가하는 코드이다.
Overfitting, Underfitting
Overfitting
은 train data
에 너무 딱 맞게 훈련이 되어있어서 test data(new data)
에 대한 예측값이 많이 틀리는 것이고, Underfitting
은 train data
에 맞지 않고 너무 유동적이게 훈련을 해놔서 train data
와 test data 둘 다 정확도가 낮아져 버리는 것이다.
따라서 decision tree
에서는 depth
를 높일 수록 Overfitting
이 일어날 것이고, 낮출 수록 Underfitting
이 일어날 것이다.
다음 코드에서는 depth
를 여러개로 나눈 후 최적의 depth
를 찾을 것이다.
이는 DecisionTreeRegressor
의 max_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
을 훈련시킬 수 있다.
Random Forest
이용하기random forest 설명 사이트
이 또한 다음과 같이 이용한다.
from sklearn.ensemble import RandomForestRegressor
나머지는 다 똑같지만, RandomForest
에는 max_leaf_nodes parameter
가 없다. 이 점 유의하길 바란다.