일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 기초프로젝트
- 프로젝트
- 히트맵
- 데이터 분석
- 크롤링
- data analyst
- GA4
- jd
- 서브쿼리
- streamlit
- 팀프로젝트
- SQL
- 프롬프트 엔지니어링
- 데이터분석
- If
- 최종 프로젝트
- Python
- pandas
- 군집화
- Chat GPT
- da
- 전처리
- 클러스터링
- SQLD
- 머신러닝
- 태블로
- cross join
- 기초통계
- lambda
- 시각화
Archives
- Today
- Total
세조목
머신러닝 심화 복습(결측치, 인코딩&스케일링)(24.05.07) 본문
결측치
표준편차가 크다 = 평균에서 벗어난 값들이 많다
so 표준편차가 크다면 결측치를 평균값으로 대체하기보단 중앙값으로 대체하는게 낫다.
※ 범주형 데이터의 경우 최빈값으로 대체
표준편차가 큰지는 어떻게 알 수 있지??
→ 평균값과 비교
- 평균값보다 표준편차가 크다면 데이터들이 평균값에서 많이 벗어나 있다는 의미임
결측치 확인
.notna()
→ 결측치 없는 데이터만 확인 가능
.isna()
→ 결측치인 데이터만 확인 가능
결측치 처리
from sklearn.impute import SimpleImputer
si = SimpleImputer()
si.fit(titanic_df[['Age']])
titanic_df['Age_si_mean'] = si.transform(titanic_df[['Age']])
# default 값은 평균값
인코딩 & 스케일링
범주형 데이터 인코딩
1. 레이블 인코딩
→ 범주에 속하는 값에 고유한 숫자를 할당함
<예시>
A → 0
B → 1
C → 2
D → 3
※ 인코딩 결과값인 0~3은 크기를 나타내는 것이 아닌데 나타내는 것으로 모델이 잘못 해석할 수 있음
※ 따라서 순서 구분이 필요한 범주형 데이터만 레이블 인코딩 진행해줘야 함
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
le.fit(titanic_df[['Sex']])
titanic_df['Sex_le'] = le.transform(titanic_df[['Sex']])
2. 원-핫 인코딩
→ 각 범주를 이진 형식으로 변환함
from sklearn.preprocessing import OneHotEncoder
oe = OneHotEncoder()
oe.fit(titanic_df[['Embarked']])
embarked_csr = oe.transform(titanic_df[['Embarked']])
embarked_csr_df = pd.DataFrame(embarked_csr.toarray(), columns=oe.get_feature_names_out())
pd.concat([titanic_df, embarked_csr_df], axis=1)
수치형 데이터 스케일링
1. 표준화(Standardization)
- 각 데이터에서 평균을 빼고, 그 값을 표준편차로 나누어줌
- 평균을 0으로 분산을 1로 조정해줌
from sklearn.preprocessing import StandardScaler
sd_sc = StandardScaler()
# fit, transform 분리
sd_sc.fit(titanic_df[['Fare']])
titanic_df['Fare_sd_sc'] = sd_sc.transform(titanic_df[['Fare']])
# fit_transform 메서드 사용
titanic_df['Fare_sd_sc'] = sd_sc.fit_transform(titanic_df[['Fare']])
2. 정규화(Normalization)
- 각 데이터에서 최소값을 빼고, 그 값을 최대값 - 최소값의 차로 나누어 줌
- 모든 값이 0과 1 사이로 들어옴
from sklearn.preprocessing import MinMaxScaler
mm_sc = MinMaxScaler()
# fit, transform 분리
mm_sc.fit(titanic_df[['Age_mean']]
titanic_df['Age_mean_mm_sc'] = mm.sc.transform(titanic_df[['Age_mean']]
# fit_transform 메서드 사용
titanic_df['Age_mean_mm_sc'] = mm_sc.fit_transform(titanic_df[['Age_mean']])
3. 로버스트(Robust)
- 각 데이터에서 중앙값을 빼고, 그 값을 IQR(3분위값 - 1분위값)으로 나누어 줌
from sklearn.preprocessing import RobustScaler
rb_sc = RobustScaler()
# fit, transform 분리
rb_sc.fit(titanic_df[['Fare']])
titanic_df['Fare_rb_sc'] = rb_sc.transform(titanic_df[['Fare']])
# fit_transform 메서드 사용
titanic_df['Fare_rb_sc'] = rb_sc.fit_transform(titanic_df[['Fare']])
'데이터 분석 공부 > 머신러닝' 카테고리의 다른 글
머신러닝 심화 복습(교차검증(K-Fold, StratifiedKFold))(24.05.10) (0) | 2024.05.10 |
---|---|
머신러닝 심화 복습(과적합)(24.05.07) (0) | 2024.05.07 |
머신러닝 심화 복습(데이터 구조, EDA 시각화, 기술 통계, 이상치)(24.05.06) (0) | 2024.05.06 |
머신러닝 기초 복습(로지스틱 회귀)(24.05.03) (0) | 2024.05.03 |
머신러닝 기초 복습(선형 회귀)(24.05.02) (1) | 2024.05.02 |