1) 데이터 가져오기
2) 전처리
: 결측치 처리, 데이터 타입 변경 등
3) 문제(feature)와 답안(label) 나누기
4) train, test 데이터셋 나누기 (X_train, y_train, X_test, y_test)
5) encoding 하기
6) 머신러닝 알고리즘 가져오기
7) cross validation으로 현재 feature, parameter, model의 성능 검증하기
8) 정확도 및 평가지표로 모델 성능 평가하기
9) 머신러닝 모델로 학습(fit)과 예측(predict)하기
10) 피처 중요도 구하기
.
🔸 DecisionTree Model
🔸 RandomForest Model
🔸 ExtraTrees Model
🔸 GradientBoosting Model
.
1) 직접 슬라이싱해서 만들기
split_count = int(df.shape[0] * 0.8)
X_train = X.loc[:split_count]
X_test = X.loc[split_count:]
y_train = y[:split_count]
y_test = y[split_count:]
2) sklearn의 train_test_split()으로 만들기
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, test_size=0.2, random_state=42)
.
1) pd.get_dummies() 활용
pd.get_dummies(X_raw)
2) Binary encoding
# nunique값이 2인 컬럼만 가져오기
nuni = df.drop(columns=label_name).nunique()
bicols = nuni[nuni == 2].index
# bicols에 속한 컬럼 중 이미 숫자형으로 인코딩이 되어있는 SeniorCitizen을 제외하고
# 나머지 컬럼들을 T/F 값으로 만들기
df["gender_bi"] = df["gender"] == "Male"
for yes_col in ['Partner', 'Dependents', 'PhoneService', 'PaperlessBilling']:
df[f"{yes_col}_bi"] = (df[yes_col] == "Yes").copy()
3) One-hot-Encoding
# one-hot-encoding할 컬럼 추출
# binary encoding한 컬럼, 숫자형 컬럼을 제외한 모든 문자형 컬럼들
col_ohe = X_train.select_dtypes(include="object").drop(columns=['gender', 'Partner', 'Dependents', 'PhoneService',
'PaperlessBilling']).columns
# sklearn의 OneHotEncoder를 사용해 one-hot-encoding하기
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(handle_unknown='ignore')
X_train_ohe = ohe.fit_transform(X_train[col_ohe])
X_test_ohe = ohe.transform(X_test[col_ohe])
# X_train ohe를 데이터 프레임으로 만들기
df_train_ohe = pd.DataFrame(X_train_ohe.toarray(), columns=ohe.get_feature_names_out())
# X_train 과 index(CustomerID) 똑같이 만들기
df_train_ohe.index = X_train.index
# X_train에서 숫자형과 논리형 데이터만 가져오기 (Ohe 적용하지 않은 데이터들)
X_train_num = X_train.select_dtypes(exclude="object")
# Ohe을 적용 안 한 데이터와 적용한 데이터를 병합하기
X_train_enc = X_train_num.join(df_train_ohe)
# X_test도 같은 방식으로 진행
4) Ordinal Encoding
train["YME"] = train["YM"].astype("category").cat.codes
.
# 방법1
(y_test == y_predict).mean()
# 방법2
from sklearn.metrics import accuracy_score
accuracy_score(y_test, y_predict)
.
🔸 R-squared(결정계수)
from sklearn.metrics import r2_score
r2_score(y_train, y_valid_predict)
🔸 MAE(Mean Absolute Error)
from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_train, y_valid_predict)
🔸 MSE(Mean Squared Error)
from sklearn.metrics import mean_squared_error
mean_squared_error(y_train, y_valid_predict)
🔸 RMSE(Root Mean Squared Error)
mean_squared_error(y_train, y_valid_predict)**0.5
🔸 RMSLE(Root Mean Squared Logarithmic Error)
from sklearn.metrics import mean_squared_log_error
np.sqrt(mean_squared_log_error(y_train, y_valid_predict))
.
🔸 label smoothing
train["count_log1p"] = np.log1p(train["count"])
# 다시 되돌릴 땐
# train["count_expm1"] = np.expm1(train["count_log1p"]) - 1
.
🔸 GridSearchCV → 하이퍼 파라미터 튜닝 자동화
parameters = {"n_estimators": (200, 300, 400),
"learning_rate":(0.05, 0.1, 0.2)}
import sklearn
sklearn.metrics.SCORERS.keys()
from sklearn.model_selection import GridSearchCV
reg = GridSearchCV(model, parameters, n_jobs=-1, cv=3, verbose=2,
scoring="neg_root_mean_squared_error")
reg.fit(X_train, y_train)
.
험난한 일주일이었다.
현학적인 용어와 추상적인 개념 때문에
수업 내용을 이해하는데 상당히 힘들었다.
하지만!
나는 예전처럼 숨이 턱턱 막히거나
스트레스를 너무 받아 편두통을 느끼지 않았다.
그저 낯설어서 더 어렵게 느껴지는 것이고
반복해서 보다보면 익숙해지는 날이 올거라고 생각했다.
나는 꾸준한 노력을 꽤 잘하는 사람이니
분명 이 역경(?)을 잘 헤쳐나갈 것이다.
원래 모든 일은 유창해져야 즐겁고,
그전까지는 울면서 하는 구간이라고 한다.
(내가 존경하는 유튜버 이연님이 해주신 말씀이다.)
지금은 울더라도 언젠가
멋있게 머신러닝을 활용하는 내 모습을 상상하며
오늘도 부지런히 공부해야지!
..라는 생각을 매일 했다.
이렇게 긍정적으로 생각하는 나 자신을 칭찬하고 싶었다.
잘 하고 있어 세연아!!!
.
바쁘다는 핑계로 식사를 대충하고 하루를 급하게 마무리하는 날이 많았다.
내가 나에 대해 생각하고 고민하는 시간이 너무 줄었다.
아버지가 항상 말씀하셨듯
마음의 여유를 가지기 위해 일상의 틈을 만들자.
의식적으로 차분히 스스로를 돌아볼 수 있는 시간을 만들어야 한다.
나는 나를 너무 함부로 대하는 경향이 있다.
이 세상에서 나를 가장 잘 챙길 수 있는 사람은
나 자신이라는 것을 잊지 말자.
.
피드백은 말만 하는 게 아니라 지키라고 있는 것.
과거 조세연은 이런 목표를 세웠다. 👉 3월 첫째주 계획 바로가기
.
내 책상에서 가장 잘 보이는 곳에 메모 완료..!
이번주도 목표달성 해보자!
.
만나는 사람마다 네가 모르는 전투를 치르고 있다.
친절하라, 그 어느 때라도