정규화 => 숫자 스케일의 차이가 클 때 값을 정규분포로 만들어 주거나 스케일 값을 변경해 주는 것
이상치 => 이상치를 제거하거나 대체
대체 => 결측치를 다른 값으로 대체
인코딩 => 호칭, 탑승지의 위치, 문자 데이터를 수치화, 너무 범위가 큰 수치 데이터를 구간화 해서 인코딩 할 수도 있다.
Accuracy : 올바르게 예측한 샘플 개수 / 전체 샘플 개수
(실제값 == 예측값) => 평균(올바르게 예측한 샘플 개수 / 전체 샘플 개수) => Accuracy
y_test가 없을때 accuracy score 구하기
cross_val_predict 사용
hold-out-validation 이라든지 cross_validation을 사용해서 구할 수 있다.
hold-out-validation (valid 가 한 조각) cross_validation(valid 가 여러 조각)
R2 Score : 회귀 모델이 얼마나 '설명력' 이 있느냐를 의미.
-'실제 값의 분산 대비 예측값의 분산 비율' 로 요약 될 수 있으며, 예측 모델과 실제 모델이 얼마나 강한 상관관계(Correlated)를 가지는가로 설명력을 요약할 수도 있다.
-회귀 모델을 평가할 때 사용하는 평가지표이다.
특징 : 다른 평가지표인 MAE MSE RMSE 모두 에러에 대한 값이기 때문에 작을수록 좋은 값이지만, R2 Score는 1에 가까울 수록 좋습니다
피처엔지니어링도 많이 할수록 꼭 점수가 오른다는 보장은 없다.
오히려 피처엔지니어링을 많이 했을 때 점수가 더 낮아질 수도 있다.
피처엔지니어링을 제대로 도메인지식, EDA를 통해서 생존여부에 중요한 역할을 하는 변수를 찾아서 전처리 해주면 성능이 더 나아질 수 있다.
엔트로피 공식 예제
지니불순도와 엔트로피를 사용하는 목적
분류를 했을 때 True, False 로 완전히 나뉘지 않는데 이 때 값이 얼마나 섞여있는지 수치로 확인하기 위해서이고, 0에 가까울 수록 다른 값이 섞여있지 않은 상태이다. 분류의 분할에 대한 품질을 평가하고 싶을 때 사용한다.
ex)콩과 팥을 분류하는데 콩 분류집단에 팥이 얼마나 들어가있는지, 팥 분류집단에 콩이 얼마나 들어가있는지 파악하기 위해서 수치화한게 지니계수, 앤트로피로 나타낸다 라고 이해.
데이터 전처리를 할 때는 train 을 기준으로 한다.
현실 세계에서 test 는 아직 모르는(미래의) 데이터이기 때문에 train을 기준으로 전처리
train 에만 등장하는 호칭은 학습을 해도 test 에 없기 때문에 예측에 큰 도움 안됨.
train 에만 등장하는 호칭을 피처로 만들어 주게 되면 피처의 개수가 늘어나는데
불필요한 피처가 생기기도 하고 데이터의 크기도 커지기 때문에 학습에도 시간이 더 걸림.
너무 적게 등장하는 값을 피처로 만들었을 때 해당 값에 대한 오버피팅 문제도 있을 수 있음.
train 과 test 의 피처 개수가 다르면 오류가 발생.
원핫인코딩을 할 때 train, test 피처의 개수와 종류가 같은지 확인이 필요.
예를 들어 train 피처는 수학인데 test 피처는 국어라고 하면 피처의 개수가 같더라도 다른 종류 값이기 때문에 제대로 학습할 수 없다. 피처를 컬럼명으로 만들 때도 제대로 만들어지지 않는다.
pd.get_dummies : 범주형 데이터를 수치형으로 바꿔준다.
범주형 데이터의 경우에는 결측치 처리를 하면 원핫인코딩을 했을 때 해당 값이 만들어지지 않습니다.
One-Hot-Encoding
pandas에서는 Ordinal-Encoding을 category 타입에 대해서 cat 속성의 codes 속성으로 지원
pandas에서는 One-Hot-Encoding을 get_dummies 메서드로 지원
sklearn에서는 Ordinal-Encoding을 OrdinalEncoder 객체로 지원
sklearn에서는 One-Hot-Encoding을 OneHotEncoder 객체로 지원
sklearn 을 사용하게 되면 일단 학습을 해서 전처리를 하게 된다. 어떤 피처가 있는지를 확인하게 된다.
test 에 없는 값이라도 test 에 해당 피처를 생성해 준다.
그런데 pandas 의 get_dummies 를 사용하면 각각 전처리를 하기 때문에 다른 값이 있다면 다른 컬럼으로 생성이 된다.
이 부분도 피처가 만들어지고 나서 다른 컬럼은 제외해 주는 방법도 있다.
모델이 학습할 때 문자는 인식을 하지 못해서 학습할 때 에러가 뜹니다. 따라서 문자에서 숫자로 바꿔주는 인코딩이 필요한데 그 인코딩 방식 중 하나가 OneHotEncoder 이다.
int, float, bool 은 머신러닝 알고리즘에서 수치데이터로 취급한다.
결측치 채우는 다양한 방법
fillna(method="ffill”)
fillna(method=“bfill")