머신러닝 복습

문호준·2022년 11월 3일
0

정규화 => 숫자 스케일의 차이가 클 때 값을 정규분포로 만들어 주거나 스케일 값을 변경해 주는 것
이상치 => 이상치를 제거하거나 대체
대체 => 결측치를 다른 값으로 대체
인코딩 => 호칭, 탑승지의 위치, 문자 데이터를 수치화, 너무 범위가 큰 수치 데이터를 구간화 해서 인코딩 할 수도 있다.

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를 통해서 생존여부에 중요한 역할을 하는 변수를 찾아서 전처리 해주면 성능이 더 나아질 수 있다.

엔트로피

엔트로피 공식 예제

  • ((549/891) np.log2(549/891) + (342/891) np.log2(342/891))

지니불순도와 엔트로피를 사용하는 목적

분류를 했을 때 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")
profile
고수

0개의 댓글