- 데이터 분석 기반 에너지 운영 관리자 양성 및 취업과정
- 기초다지기
- boostcoures
- 코딩테스트
- python
- 부스트코스
- r
- 빅분기
- 인공지능기초다지기
- DB
- 코딩테스트 python
- 데이터베이스
- AI 플랫폼을 활용한 데이터 분석
- 파이썬
- Machine Learning
- 난생처음 R코딩&데이터 분석 저서
- 오라클
- 이기적
- boostcourse
- SQL
- 정보처리기사
- 빅데이터분석기사
- [멀티잇]데이터 시각화&분석 취업캠프(Python)
- PY4E
- 프로그래머스
- 빅데이터 분석 기반 에너지 운영 관리자 양성 및 취업과정
- 이것이 취업을 위한 코딩테스트다 with 파이썬
- Ai
- Oracle
- 네이버부스트캠프
- Today
- Total
매일공부
[sklearn] Data Preprocessing 본문
데이터 랭글링(data wrangling)
>> 원본 데이터를 정제하고 사용 가능한 형태로 구성하기 위한 광범위한 변환 과정
>> 데이터 랭글링에 사용되는 가장 일반적인 데이터 구조 - 데이터프레임
데이터 스케일링 (scaling) 수행 목적
- 데이터의 값이 너무 크거나 혹은 작은 경우에 모델 알고리즘 학습과정에서 0으로 수렴하거나 무한으로 발산되지 않도록 하기 위함
- 데이터 전처리 과정에서 굉장히 중요한 과정
- 특성 값을 0~1이나 -1~1 사이 범위의 값으로 변환
- sklearn.preprocessing.MinMaxScaler
: 특성의 최솟값과 최댓값을 사용하여 일정 범위 안으로 값을 조정
: 데이터-최소 / 최대-최소
: MinMaxScaler.fit() - 특성의 최솟값과 최댓값을 계산
: MinMaxScaler.transform() - 특성의 스케일을 변환
: MinMaxScaler.fit_transform() - 학습과 변환을 한번에 처리
>> 스케일링한 값을 되돌리려면? (역변환)
- 직접 공식 적용 = x`(max-min)+min
- 함수 사용 = scaler.inverse_transform()
- 참고 : https://zephyrus1111.tistory.com/218
[Scikit-Learn] 2. 최대 최소(Min Max) 변환하기 feat. MinMaxScaler
예측 모델링을 할 때 학습 데이터에 대하여 변환하는 경우가 굉장히 많다. 그중에서 각 데이터를 특정 범위로 제한시키는 Min Max 변환을 많이 사용한다. 최대 최소(Min Max) 변환은 원 데이터를 우
zephyrus1111.tistory.com
- sklearn.preprocessing.StandardScaler
: 표준화 변환 - 특성 데이터를 평균이 0이고 표준편차가 1이 되도록 변환
: 데이터-평균 / 표준편차
: 특성을 표준 정규분포로 근사하는 스케일링 방식
: 커널 SVM, 선형회귀, 로지스틱 알고리즘(선형모델) - 스케일에 아주 민감하므로 정규화(normalization) 하면 성능 향상
: 머신러닝 알고리즘 중에서 거리(distance) 를 사용하는 함수(KNN) - 반드시 정규화(normalization)
- sklearn.preprocessing.RobustScaler()
: 데이터 - median / IQR (IQR = Q3-Q1; 1사분위와 3사분위 사이의 거리)
: 데이터에 이상치가 많다면 특성의 평균과 표준편차에 영향을 미치기 때문에 표준화에 부정적인 효과가 발생하므로 평균과 분산 대신 중간값median과 사분위 범위quartile을 사용하여 특성의 스케일을 조정
: 이상치에 영향을 받지 않
>> 주성분 분석은 표준화가 적합하지만 신경망에는 최소-최대 스케일링을 권장
- sklearn.preprocessing.QuantileTransformer()
: 훈련 데이터를 1,000개의 분위로 나누어 0~1 사이에 고르게 분포시킴으로써 이상치로 인한 영향을 줄여주는 특성 스케일 변환 클래스
- sklearn.preprocessing.Normalizer(norm=)
: 정규화 변환 , 단위 길이의 합이 1이 되도록 개별 샘플의 값을 변환
: row마다 각각 정규화
: 유클리드 거리가 1이 되도록 데이터를 조정
: L2 norm 유클리드 거리계산 (최단거리)
: L1 norm 맨하튼 거리계산 (가로지르지 않고 가로, 세로만으로 이동한 거리)
다항 특성과 교차항 특성 생성
from sklearn.preprocessing import PolynomialFeatures
: 특성과 타깃 사이에 비선형 관계가 있다는 가정을 추가할 때 다항 특성을 만듭니다.
: 교차항을 포함
: degree 매개변수가 다항식의 최대 차수를 결정
: interaction_only를 True로 지정하면 교차항 특성만 만들 수 있다.
: include_bias 매개변수의 변수값은 True (변환된 특성에 상수항 1을 추가합니다.)
특성 변환
from sklearn.preprocessing import FunctionTransformer
: 일련의 특성에 어떤 함수를 적용
: validate 매개변수가 True이면 입력값이 2차원 배열인지 확인하고 아닐 경우 예외를 발생시킴
from sklearn.compose import ColumnTransformer
: 특성 배열이나 데이터프레임의 열마다 다른 변환을 적용
이상치 검색
from sklearn.covariance import EllipticEnvelope (contamination= )
: 데이터가 정규분포를 따른다는 가정을 기반으로 데이터를 둘러싼 타원을 그립니다. 타원 안의 샘플을 정상치(레이블 1)로 분류하고, 타원 밖의 샘플은 이상치(레이블 -1)로 분류
IQR >> np.percentile
: 데이터에 있는 1사분위와 3사분위 사이의 거리
: 1사분위보다 1.5 x IQR 이상 작은 값이나 3사분위보다 1.5 x IQR 큰 값으로 정의
특성 이산화
from sklearn.preprocessing import Binarizer
: 수치 데이터(feature)을 개별적인 구간으로 나누는 이산화는 수치 데이터(feature)을 범주형처럼 다루어야 할 때 유용한 전략
: 임계값에 따라 수치 데이터(feature) 을 두 개의 구간으로 나눠줌
: 수치 데이터(feature) 을 세 개 이상의 여러 임계값에 따라 나누는 방법을 제공
(bins 매개변수의 입력값은 각 구간의 왼쪽 경계값이다)
from sklearn.preprocessing import KBinsDiscretizer
: 연속적인 특성값을 여러 구간으로 나눔
: 연속된 값을 이산화하여 원-핫 인코딩으로 만들면 범주형 특성으로 다루기 편리
: 구간은 bin_edges_속성에서 확인
군집으로 샘플을 그룹으로 묶기
from sklearn.cluster import KMeans
: k-평균 군집 모델 생성
누락된 값 채우기
from sklearn.impute import KNNImputer
: KNN - 누락된 값에 가장 가까운 샘플을 구하기 위해 누락된 값과 모든 샘플 사이의 거리를 계산
: 데이터의 양이 작으면 k-최근접 이웃(KNN) 알고리즘을 사용해(가장 가까이 있는 k개의 샘플을 사용해) 누락된 값을 예측가능
from sklearn.impute import SimpleImputer
: 특성의 평균, 중간값, 최빈값으로 누락된 값을 채울 수 있음(KNN 보다는 결과가 좋지 않습니다)
: 대용량 데이터셋에서는 누락된 값을 모두 평균값으로 채우는 것을 권장
범주형 데이터 처리
sklearn.preprocessing.Label Encoding 레이블 인코딩
- 문자열(범주형)값을 오름차순 정렬 후 0부터 1씩 증가하는 값으로 변환
- 순서의 의미가 있을때 (유치원, 초등학교, 대학교 같은 등급 / 사원, 대리, 과장, 부장 같은 직급)
- 고유값의 개수가 많을때 ( One-hot Encoding은 메모리 소비가 많으므로 효율적이지 못하다)
- 변수의 속성값의 알파벳 순서에 따라 unique한 정수가 할당
- 문자형태의 데이터로 구성된 피처를 수치화
- 속성값을 단순히 정수로 바꿔주는 것이기 때문에 shape 유지
- 선형 계열 모델(로지스틱회귀, SVM, 신경망)와 같은 ML 알고리즘에는 적용하지 않도록 권장
(변환된 수의 크고 작음의 특성이 작용하여 예측 성능이 떨어질 수 있음) - 트리 계열(의사결정나무, 랜덤포레스트)의 ML알고리즘은 변환된 수의 크고 작음의 특성이 반영되지 않으므로 학습할 데이터 Feature를 LabelEncoder로 변환해도 괜찮음
https://nicola-ml.tistory.com/62
sklearn.preprocessing.OneHotEncoder 원-핫 인코딩
- 정수형 특성을 원-핫 인코딩으로 변환
- 순서가 없을 때 (예, 국가명 )
- 고유값의 개수가 많지 않으면 효율적(3개 이상)
- 범주형 변수를 0 또는 1 값을 가진 새로운 특성으로 바꾼 것
- Feature의 속성값의 종류만큼 열을 추가해서 늘린다
- sklearn의 OneHotEncoder 은 레이블 인코딩을 한번 거쳐야함
- categories_속성으로 클래스를 확인
pandas.get_dummies( DataFrame[ , columns=[변환할 컬럼명] ] )
- 판다스를 이용한 특성 원-핫 인코딩
- 변경해야할 변수 종류가 2개인 경우 유리
np.where(DataFram 변경 조건 , True일 경우 변경 값 , False일 경우 변경 값).astype(변경할 타입)
- 넘파이를 이용한 특성 원-핫 인코딩
- 변경해야할 변수 종류가 2개인 경우
- where & astype로 강제로 전체 재정의 가능
순서 없는 범주형 특성 인코딩
from sklearn.preprocessing import LabelBinarizer
: 문자열 타깃 데이터를 원-핫 인코딩
: classes_ 속성에서 클래스를 확인
from sklearn.preprocessing import MultiLabelBinarizer
: 다중 클래스 원-핫 인코더 객체 생성
순서 있는 범주형 특성 인코딩
from sklearn.preprocessing import OrdinalEncoder
: 클래스 범주를 순서대로 변환
: 특정 열만 범주형으로 변환하려면 ColumnTransformer와 함께 사용
특성 딕셔너리를 특성 행렬로 (변환) 인코딩
from sklearn.ature_extraction import DictVectorizer
: 0이 아닌 값의 원소만 저장하는 희소 행렬을 반환
: 매우 큰 행렬을 다룰 때 메모리 사용량을 최소화해야하기 때문에 유용
: Sparse=False로 지정하면 밀집 벡터를 출력할 수 있습니다
: get_feature_names() - 생성된 특성의 이름을 반환
누락된 클래스 값 대체
from sklearn.neighbors import KNeighborsClassifier (3, weights='distance')
: 머신러닝 분류 알고리즘을 훈련하여 누락된 값을 예측
: k-최근접 이웃KNN) 분류기를 사용, 이상적인 방법
from sklearn.impute import SimpleImputer (strategy='most_frequent')
: 락된 값을 특성에서 가장 자주 등장하는 값으로 채우기
'IT > ML' 카테고리의 다른 글
[Machine Learning] 교차검증 (0) | 2022.11.21 |
---|---|
[sklearn] 학습과 검증셋 분리 (0) | 2022.11.21 |
[sklearn] 사이킷런 (scikit-learn) 주요 모듈 (0) | 2022.11.20 |
[Machine Learning] 오차행렬 - 모델 평가&분류 확인 (0) | 2022.11.20 |
[Machine Learning] 비계층적 군집분석; K-means, DBSCAN (0) | 2022.11.18 |