배운 꿀팁 정리
1.쥬피터에서 해당셀 글자 일괄변경 esc+f
2.캐글에서 좋은 솔루션 찾는 법
ㄱ) Top 키워드로 검색
ㄴ) 솔루션에 대한 투표수가 많은 것
ㄷ) 프로필 메달의 색상( 왼쪽일수록 높음 - 신뢰도높음)
3.캐클에 제출할 파일명을
valid_accuracy = (y_train == y_valid_pred).mean()
로서 정확도를 측정한후
file_name = f"data/submit_{valid_accuracy:.5f}.csv"
이런식으로 파일명에 정확도 점수를 넣어주면
캐글과 노트북을 왔다갔다하며 점수비교하는 과정의 번거로움을 줄일수 있고
모델을 변경해서 (피처, 하이퍼파라미터 튜닝 등)여러번 예측을 하면 valid점수가 달라지는데 다른 점수와 비교 가능
4.또한 submit 을 지정할떄 index_col로 지정해서 불러오면 index=False를 해주지 않아도 된다
한쪽에만 있는 호칭은 어떻게 처리하면 좋을것인가?
기타(etc)로 묶어준다 - 서울시 코로나 데이터 파일에서 해봤으니 모를떄 다시보자!
또한 데이터 전처리할떄에는 train을 기준으로
train 에만 등장하는 호칭은 학습해도 test에 없기떄문에 예측에 큰도움이 되지않고
rauin에만 등장하는 호칭을 피처로 만들어 주게 되면 피처의 개수가 늘어나는데
불필요한 피처가 생기기도 하고 데이터의 크기가 커지기 때문에 학습에도 시간이 더 걸리게된다
또한
rain과 test의 피처개수가 다르면 오류가 발생합니다.
그러므로 원핫인노딩을 할떄 train,test피처의 개수와 종류가 같은지 확인이 필요합니다
피처의 개수가 같더라도 다른 종류의 값이면 제대로 학습되지 않는다
피처를 컬럼명으로 만들떄도 제대로 만들어 지지 않는다
너무 적게 등장하는 값을 피처로 만들었을 때 해당 값에 대한 오버피팅 문제도 있을 수 있다
etc값을 만들떄 2개 이하값을 가져오는게 아닌 2개보다 큰값을 가져오게 전처리하는 이유
2개보다 작은 값에 대해서만 예외 처리를 하게되면 앞으로도 새로운 값이 추가된다면 매번 전처리를 해줘야 하기 떄문에!
One-Hot-Encoding
- pandas에서는 One-Hot-Encoding을 get_dummies 메서드로 지원하고 있습니다.
- sklearn에서는 One-Hot-Encoding을 OneHotEncoder 객체로 지원하고 있습니다.
- sklearn에서는 Ordinal-Encoding을 OrdinalEncoder 객체로 지원하고 있습니다.
모델은 학습 시 문자를 인식하지 못하므로 문자에서 숫자로 바꿔주는 인코딩 방식 중 하나
각각의 값에 해당될 때만 1, 나머지는 0
S, C, Q를 0, 1, 2로 만들 수 있음
순서가 잇는 데이터라면 Ordinal-Encoding을 사용하는데 순서가 없는 데이터인데 이방식을 사용하면 의도치 않은 연산이 될수 있다
순서가 없는 데이터라면 One-Hot-Encoding 사용
pandas를 사용하는 이유
수치데이터와 범주형 데이터를 함꼐 넣어줘도 수치형 데이터는 그대로두고 범주형 데이터에 대해서만 인코딩을 한다
결측치
결측치가 있으면 머신러닝 알고리즘 내부에서 연산을 할 수 없기 때문에 오류가 발생하기 때문에 결측치가 있는 피처를 사용하려면 사이킷런에서는 꼭 결측치를 대체해 주어야 합니다
하지만 현실세계에서 분석하는 데이터 함부로 결측치를 채우는 것은 꼭 주의해야 합니다.
머신러닝 알고리즘에서 오류가 발생하지 않게 하기 위해 결측치를 채운것이라 분석할 때도 채운다고 오해하면 안 됩니다!
train에는 결측치가 없지만 test에 결측치가 있다면 train에도 test와 같은 컬럼을 만들어 주어야 한다
채우는법
1. df.fillna(method=)
.fillna(method="ffill")
앞에 있는 값으로 결측치 채움
.fillna(method="bfill")
뒤에 있는 값으로 결측치 채움
2 . interpolate : 보간법
공식문서 https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.interpolate.html
이전 값과 다음 값을 이용하여 결측치를 채운다
대부분 시계열 데이터에서 데이터가 순서대로 있을 때 사용하고
데이터가 앞, 뒤 값에 영향을 받는 데이터일 경우 사용
.interpolate(method="linear", limit_direction="both")
limit_direction : {{'forward', 'backward', 'both'}} - both는 위아래 모두 채워주고 forward는 앞 backward는 뒤
Cross-validate 교차검증
- cross_validate : 학습결과에 대한 점수와 시간이 나옴 / 점수를 보고자 할 때는 편리 / 지정한 metric에 의해서만 점수가 계산
- cross_val_score : cv별 점수가 나옴
- cross_val_predict : 예측 값이 그대로 나와서 직접 계산 가능 / 직접 다양한 측정 공식으로 결과값을 비교 가능
학습과 예측과정 용어 복습정리
- feature_names : 학습(훈련), 예측에 사용할 컬럼을 리스트 형태로 만들어서 변수에 담아줍니다.
- label_name : 정답값
- X_train : feature_names 에 해당되는 컬럼만 train에서 가져옵니다.
- 학습(훈련)에 사용할 데이터셋 예) 시험의 기출문제
- X_test : feature_names 에 해당되는 컬럼만 test에서 가져옵니다.
- 예측에 사용할 데이터셋 예) 실전 시험문제
- y_train : label_name 에 해당 되는 컬럼만 train에서 가져옵니다.
- 학습(훈련)에 사용할 정답 값 예) 기출문제의 정답
- model : 학습, 예측에 사용할 머신러닝 알고리즘
- model.fit(X_train, y_train) : 학습(훈련), 기출문제와 정답을 가지고 학습(훈련)하는 과정과 유사합니다.
- model.predict(X_test) : 예측, 실제 시험을 보는 과정과 유사합니다. => 문제를 풀어서 정답을 구합니다.
- score
- 시험을 봤다면 몇 문제를 맞고 틀렸는지 채점해 봅니다.
- metric
- 점수를 채점하는 공식입니다. (예를 들어 학교에서 중간고사를 봤다면 전체 평균을 계산해 줍니다.)
주요 파라미터
n_estimators : 트리의 수
criterion: 가지의 분할의 품질을 측정하는 기능입니다.
max_depth: 트리의 최대 깊이입니다.
min_samples_split:내부 노드를 분할하는 데 필요한 최소 샘플 수입니다.
min_samples_leaf: 리프 노드에 있어야 하는 최소 샘플 수입니다.
max_leaf_nodes: 리프 노드 숫자의 제한치입니다.
random_state: 추정기의 무작위성을 제어합니다. 실행했을 때 같은 결과가 나오도록 합니다.
학습과 예측 데이터셋 만들기
- X_train : feature_names 에 해당되는 컬럼만 train에서 가져옵니다.
- 학습(훈련)에 사용할 데이터셋 예) 시험의 기출문제
X_train =pd.get_dummies(train[feature_names])
- X_test : feature_names 에 해당되는 컬럼만 test에서 가져옵니다.
- 예측에 사용할 데이터셋 예) 실전 시험문제
X_test=pd.get_dummies(test[feature_names])
- y_train : label_name 에 해당 되는 컬럼만 train에서 가져옵니다.
- 학습(훈련)에 사용할 정답 값 예) 기출문제의 정답\
y_train = train[label_name]
(데이터)스케일링
데이터 스케일링이란
데이터의 값의 범위를 조정하는 것을 말합니다.
데이터 스케일링(Data Scaling)은 각 변수들의 범위 혹은 분포를 같게 만드는 작업입니다. 이를 통해 각 변수들이 동일한 조건(혹은 범위)을 가지게 되어, 이 변수들에 대한 상대 비교가 가능하게 됩니다.
주로 사용되는 개념으로는 Normalization (정규화)와 Standardization (표준화)가 있으며 둘중의 어느것이 좋은지는 상황에 따라 다르므로 해보고 비교를 해야하는 케이스바이케이스 입니다
데이터 스케일링이 필요한 이유
- 머신러닝에서 scale이 큰 피처의 영향이 비대해지는 것을 방지합니다.
- 딥러닝에서 Local Minima에 빠질 위험을 감소시켜 학습 속도를 향상시킵니다.
Normalization (정규화)
특성들을 특정 범위(주로 [0,1]) 로 스케일링하는 것입니다.
즉 가장 작은 값은 0, 가장 큰 값은 1 로 변환되므로, 모든 특성들은 [0, 1] 범위를 갖게 됩니다.
최소-최대 정규화
- 최소-최대 스케일링 또는 최소-최대 정규화라고도 하는 스케일링은 가장 간단한 방법이며 모든 피처가 [0, 1] 또는 [-1, 1]의 범위를 갖도록 스케일링하기 위한 것입니다.
- [0, 1]의 최소-최대값에 대한 일반 공식은 다음과 같습니다.
- 임의의 값 세트 [a, b] 사이의 범위를 갖도록 스케일링하려면 공식은 다음과 같습니다.
평균 정규화
- 평균 정규화는 값들의 평균이 0이 되도록 스케일링하는 것입니다.
Standardization (표준화)
- 특성들의 평균을 0, 분산을 1 로 스케일링하는 것입니다.
- 즉, 특성들을 정규분포로 만드는 것입니다.
- 하한값과 상한값이 존재하지 않을 수 있기에, 어떤 알고리즘에서는 문제가 있을 수 있습니다.
- 회귀보다 분류에 유용합니다.
# 1. 수식으로 직접 구현방법 : (X - 평균) / 표준편차
import numpy as np
def standardization(s):
return (s-s.mean()) / s.std(ddof=0) #모집단이라고 가정
df1 = pd.DataFrame({
'A':standardization(df['A']),
'B':standardization(df['B'])
})
df1
표준화가 필요하지 않는 경우
- 로지스틱 회귀
- 트리 기반 모델
- 의사결정 트리
- 랜덤 포레스트
- 그래디언트 부스팅
로지스틱 회귀 및 트리 기반 알고리즘은 변수의 크기에 민감하지 않습니다.
따라서 이러한 종류의 모델을 맞추기 전에 표준화가 필요하지 않습니다.
sklearn를 이용한 스케일링 방법
sklearn.preprocessing 패키지에는, 정규화(MinMaxScaler), 표준화(StandardScaler), RobustScaler와 MaxAbsScaler가 있습니다.
- StandardScaler()
- 특성들의 평균을 0, 분산을 1 로 스케일링하는 것입니다.
- 즉, 특성들을 정규분포로 만드는 것입니다.
- 최솟값과 최댓값의 크기를 제한하지 않기 때문에, 어떤 알고리즘에서는 문제가 있을 수 있으며
- 이상치에 매우 민감합니다.
- 회귀보다 분류에 유용합니다.
- 특성들의 평균을 0, 분산을 1 로 스케일링하는 것입니다.
- MinMaxScaler()
- Min-Max Normalization 이라고도 불리며,
- 특성들을 특정 범위(주로 [0,1]) 로 스케일링 하는 것입니다.
- 가작 작은 값은 0, 가장 큰 값은 1 로 변환되므로, 모든 특성들은 [0, 1] 범위를 갖게됩니다.
- 이상치에 매우 민감합니다.
- 분류보다 회귀에 유용합니다.
- RobustScaler()
- 평균과 분산 대신에 중간 값과 사분위 값을 사용합니다.
- 중간 값은 정렬 시 중간에 있는 값을 의미하고
- 사분위 값은 1/4, 3/4에 위치한 값을 의미합니다.
- 이상치 영향을 최소화할 수 있습니다.
- 평균과 분산 대신에 중간 값과 사분위 값을 사용합니다.
- MaxAbsScaler()
- 각 특성의 절댓값이 0 과 1 사이가 되도록 스케일링합니다.
- 즉, 모든 값은 -1 과 1 사이로 표현되며, 데이터가 양수일 경우 MinMaxScaler 와 같습니다.
- 이상치에 매우 민감합니다.
- Normalizer()
- 앞의 4가지 스케일러는 각 특성(열)의 통계치를 이용하여 진행됩니다.
- 그러나 Normalizer 의 경우 각 샘플(행)마다 적용되는 방식입니다.
- 이는 한 행의 모든 특성들 사이의 유클리드 거리(L2 norm)가 1이 되도록 스케일링합니다.
- 일반적인 데이터 전처리의 상황에서 사용되는 것이 아니라
- 모델(특히나 딥러닝) 내 학습 벡터에 적용하며,
- 특히나 피처들이 다른 단위(키, 나이, 소득 등)라면 더더욱 사용하지 않습니다.
참고자료 :
멋쟁이 사자처럼 AI School 7기 수업내용
[ML] 데이터 스케일링 (Data Scaling) 이란? https://wooono.tistory.com/96
When and Why to Standardize Your Data https://builtin.com/data-science/when-and-why-standardize-your-data
Wikipedia - Feature_scaling https://en.wikipedia.org/wiki/Feature_scaling
데이터 사이언스 LV1입문 Stage4 - Feature Scaling과 성능 개선 https://book.coalastudy.com/data-science-lv1/week5/stage4
데이터 스케일링(Data Scaling) https://ctkim.tistory.com/126
정규화 또는 표준화는 왜 필요한가 https://bskyvision.com/849
공부/머신러닝, 딥러닝/ 정규화(normalization)와 표준화(standardization), 머신러닝 성능 향상을 위한 필수 단계
'TIL > 머신러닝' 카테고리의 다른 글
11/10 머신러닝 주택가격 피처엔지니어링 (0) | 2022.11.10 |
---|---|
11.09 머신러닝 회귀 스케일링 피처 엔지니어링 (1) | 2022.11.10 |
11.08 머신러닝 bike log 회귀 (0) | 2022.11.09 |
22.10.31 (0) | 2022.10.31 |
22/10/27 공부한 내용정리 (0) | 2022.10.27 |
댓글