당신은 주제를 찾고 있습니까 “머신 러닝 데이터 전처리 – [14] 머신러닝, 데이터 준비 방법 – 데이터 제공 사이트, 전처리 방법“? 다음 카테고리의 웹사이트 you.tfvp.org 에서 귀하의 모든 질문에 답변해 드립니다: https://you.tfvp.org/blog/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 친절한 AI 이(가) 작성한 기사에는 조회수 15,048회 및 좋아요 366개 개의 좋아요가 있습니다.
머신 러닝 데이터 전처리 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 [14] 머신러닝, 데이터 준비 방법 – 데이터 제공 사이트, 전처리 방법 – 머신 러닝 데이터 전처리 주제에 대한 세부정보를 참조하세요
안녕하세요, 친절한AI 미정입니다 🙂
이번시간은 머신러닝을 하기 위해 데이터를 어떻게 준비할 수 있는지 알아보겠습니다.
공개되어있는 데이터가 많이많이 올라와있는 좋은 사이트 주소가 아래 있으니 꼭 한번 들려보세요!
[국내]– AI 팩토리 : http://aifactory.space
– 공공데이터포털 : https://www.data.go.kr/datasetsearch
– AI허브 : http://www.aihub.or.kr
– 데이콘 : https://dacon.io
– 보건의료빅데이터개방시스템 : https://opendata.hira.or.kr
[국외]– 캐글 : https://www.kaggle.com/datasets
– 구글 : https://toolbox.google.com/datasetsearch
– 레딧 : https://www.reddit.com/r/datasets/
– UCI : https://archive.ics.uci.edu/ml/
머신 러닝 데이터 전처리 주제에 대한 자세한 내용은 여기를 참조하세요.
머신러닝 파이프라인에서 데이터 전처리 방법 – 조대협
Raw data. 초기에 수집된 원본 데이터로 분석이나, 머신러닝 학습 용도로 전혀 전처리가 되지 않은 데이터를 의미한다.
Source: bcho.tistory.com
Date Published: 5/24/2022
View: 8034
머신러닝 (3) – 데이터 전처리 – DAVINCI – AI
데이터 전처리는 기존의 데이터를 머신러닝 알고리즘에 알맞은 데이터로 바꾸는 과정입니다. 이 전처리 과정은 모델이 생선 된 이후에도 예측하고자 …
Source: davinci-ai.tistory.com
Date Published: 9/6/2022
View: 5734
[머신러닝 완벽가이드] 데이터 전처리 (Data Preprocessing)
[머신러닝 완벽가이드] 데이터 전처리 (Data Preprocessing). 김딩코 2021. … 데이터 전처리를 통해 Null값을 다른 고정된 값으로 변환해야 합니다.Source: kimdingko-world.tistory.com
Date Published: 5/27/2022
View: 2133
데이터 전처리(Data preprocessing) : 인공지능 머신러닝 위키백과
데이터 전처리(data preprocessing )가 필요한 이유는 무엇일까. 우수한 예측 분석 결과는 잘 정돈된 데이터에서 출발한다. 즉, 정교한 예측 분석 모델을 얻기 …
Source: davincilabs.ai
Date Published: 1/14/2022
View: 3761
[머신러닝] 데이터 전 처리하기 – 공빵탈출
[출처] 2021 NIPA AI 온라인 교육. 데이터 분석 및 전처리 단계 : 수집한 데이터를 분석하고 머신러닝에 사용할 형태로 변환시키는 단계.Source: limvo.tistory.com
Date Published: 4/22/2022
View: 6728
머신러닝 데이터 전처리 과정 – 비전공자 데이터분석 노트
머신러닝 데이터 전처리 과정 · 01. 데이터 구조 확인 · 02. 판다스 사용 : import pandas · 04. columns(열)과 row(행)의 개수 확인 : shape( ) · 05.
Source: bigdaheta.tistory.com
Date Published: 8/7/2022
View: 142
머신러닝 데이터 전처리 입문(백견불여일타) – 교보문고
실습하며 배우는 데이터 전처리 입문서 | “Garbage In, Garbage Out” | 이 책은 인공지능이 올바른 데이터를 입력 받아 의미 있는 결과를 도출하는 과정에서 필수적 …
Source: www.kyobobook.co.kr
Date Published: 8/21/2021
View: 3821
향상된 기계 학습을 위한 데이터 준비 – Azure – Microsoft Docs
데이터 전처리 및 정리는 모델 학습에 데이터 세트를 사용할 수 있기 전에 수행해야 하는 중요한 작업입니다. 원시 데이터는 노이즈가 많고, 불안정하고, …
Source: docs.microsoft.com
Date Published: 9/8/2021
View: 3277
머신러닝 2_5 데이터 전처리(Preprocessing) – rejoice
결손값 처리 (Null/ NaN 처리); 데이터 인코딩(레이블, 원-핫 인코딩). 머신러닝알고리즘은 문자열 데이터 속성을 입력값으로 받지않기 때문에 문자형 …
Source: rejoice-it.com
Date Published: 6/6/2021
View: 8604
머신러닝을 위한 데이터 전처리 속도 향상 방법 – MathWorks
이 eBook에서는 머신러닝 알고리즘에 사용되는 데이터를 MATLAB®에서 전처리할 때 수반되는 작업에 대해 다룹니다. 머신러닝으로 작업해 본 적이 있다면 데이터에 …
Source: explore.mathworks.com
Date Published: 10/21/2021
View: 3475
주제와 관련된 이미지 머신 러닝 데이터 전처리
주제와 관련된 더 많은 사진을 참조하십시오 [14] 머신러닝, 데이터 준비 방법 – 데이터 제공 사이트, 전처리 방법. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
주제에 대한 기사 평가 머신 러닝 데이터 전처리
- Author: 친절한 AI
- Views: 조회수 15,048회
- Likes: 좋아요 366개
- Date Published: 2020. 3. 24.
- Video Url link: https://www.youtube.com/watch?v=5KSkNfX1wpU
머신러닝 파이프라인에서 데이터 전처리 방법
Data Preprocessing in ML Pipeline
본글은 구글 클라우드 블로그에 포스팅한 글을, 재 포스팅 허가를 받은 후 포스팅한 글입니다.
다른 좋은 글들도 많으니 아래 출처 링크를 참고해 주새요
출처 링크
머신러닝 파이프라인에서, 데이터는 모델 학습 및 서빙의 입력에 알맞게 가공되어야 한다. 이를 전처리라고 하는데, 이번 글에서는 전처리에 대한 개념과 이에 대한 구현 옵션등에 대해서 알아보도록 한다.
처리 단계별 데이터 분류
머신러닝에서 데이터 전처리는 모델 학습에 사용되는 데이터 형태로 데이터를 가공하는 과정을 이야기한다.
데이터 전처리는 여러 단계로 이루어지는데, 단계별로 처리된 데이터에 대해서 다음과 같이 명명한다.
Raw data
초기에 수집된 원본 데이터로 분석이나, 머신러닝 학습 용도로 전혀 전처리가 되지 않은 데이터를 의미한다.
하둡과 같은 데이터 레이크에 저장된 데이터나, 기본적인 처리를 통해서 테이블 구조로 데이터 레이크에 저장된 데이터가 Raw 데이터에 해당한다.
Prepared data
Prepared data는 Data engineering 전처리에 의해서, 학습을 위한 데이터만 추출한 서브셋 데이터를 의미한다. 예를 들어 서울 20대 사용자의 구매 패턴을 머신러닝 모델로 만들고자 할때, 서울 20대 사용자 데이터만 추출한 경우 이 데이터를 Prepared data라고 한다. 단순하게 서브셋만을 추출하는 것이 아니라, 깨끗한 상태의 데이터로 정재된 데이터인데, 정재의 의미는 비어 있는 행이나 열을 삭제한 데이터를 의미한다.
Engineered feature
이렇게 정제된 데이터는 머신러닝 학습과 서빙에 적절한 형태로 재가공 되어야 하는데 이를 Feature Engineering 이라고 한다. 예를 들어 숫자와 같은 값을 0~1 사이로 맵핑 시키거나 , 카테고리 밸류 예를 들어 남자/여자를 0,1과 같은 값으로 맵핑 시키고, 전체 데이터를 학습,평가용으로 7:3 분할하여 저장하는 것이 이에 해당 한다.
<그림. 데이터 전처리 단계 및 단계별 생성된 데이터 >
데이터 전처리 기법
그러면, 이 데이터 전처리 과정에서 구체적으로 어떤 기법으로 데이터를 처리할까? 몇가지 대표적인 기법을 정리해보면 다음과 같다.
Data cleansing : 데이터에서 값이 잘못되거나 타입이 맞지 않는 행이나 열을 제거하는 작업을 한다.
Instance selection & partitioning : 데이터를 학습,평가,테스트용 데이터로 나누는 작업을 한다. 단순히 나누는 작업 뿐만 아니라, 데이터를 샘플링 할때, 그 분포를 맞추는 작업을 병행한다. 예를 들어 서울/대구/부산의 선거 투표 데이타가 있을때, 인구 비율이 9:2:3이라고 할때, 전체 인구를 랜덤하게 샘플링해서 데이타를 추출하는 것이 아니라, 서울/대구/부산의 인구 비율에 따라서 서울에서 9, 대구에서 2, 부산에서 3의 비율로 샘플링을 할 수 있다. 이를 stratified partitioning 이라고 한다. 또는 데이터 분포상에서 특정 카테고리의 데이터 비율이 적을때, 이 카테고리에 대해서 샘플의 비율을 높이는 minority classed oversampling 등의 기법을 이 과정에서 사용한다.
Feature tuning : 머신러닝 피처의 품질을 높이기 위해서 0~1값으로 값을 normalization 시키거나, missing value를 제거 하거나, 아웃라이어등을 제거하는 등의 과정을 수행한다.
Representation transformation : 피처를 숫자로 맵핑 시키는 작업을 한다. 카레고리컬 피처를 one hot encoding 등을 통해서 숫자로 맵핑하거나, 텍스트를 embedding 을 통해서 숫자로 변환하는 작업등을 수행한다.
Feature extraction : PCA와 같은 차원 감소 기법을 이용하여, 전체 피처의 수를 줄이는 작업을 수행하거나, 피처를 해시값으로 변환하여, 더 효율적인 피쳐를 사용하는 작업을 한다. .
Feature selection : 여러개의 피처(컬럼)중에 머신러닝에 사용할 피처만을 선별한다.
Feature construction : 기존의 피처를 기반으로 polynomial expansion 이나, feature crossing 등의 기법을 이용하여 새로운 피처를 만들어낸다.
데이터 전처리 단위
Instance level transformation & Full pass transformation
데이터 전처리를 할때 어떤 단위로 데이터를 전처리 할지에 대한 정의이다. 예를 들어 숫자 데이터의 값을 0~1 사이로 맵핑하고자 하면, 그 데이터의 최소/최대 값을 알아야 0~1사이로 맵핑할 수가 있는데, 최소/최대값을 추출하려면, 전체 데이터에 대한 스캔이 필요하다. 반대로 NULL 값을 0으로 변환하는 작업은 전체 데이터에 대한 스캔이 필요없고 개별 데이터만 변환하면 된다. 앞에 설명한 전체 데이터에 대한 스캔이 필요한 방식을 full pass transformation 이라고 하고, 전체 데이터를 볼 필요 없이 개별 데이터에 대해 변환하는 작업을 instance level transformation이라고 한다.
Window aggregation
전체 데이터의 볼륨이 클 경우 이를 윈도우 단위로 잘라서 처리할 수 있는 방법이 있는데, 예를 들어 10분 단위로 데이터를 처리해서, 10분 단위로 최소/최대 값을 구하거나 또는 10분 단위로 어떤 값의 평균값을 대표값으로 사용하는 것들이 이에 해당한다.
일반적으로 입력값은 (entity, timestamp, value) 형태가 되며, 전처리된 출력 값은 다음과 같이. (entity, time_index, aggregated_value_over_time_window) 엔터티(피쳐)에 대해서 윈도우별로 처리된 값을 저장하는 형태가 된다. 보통 이런 window aggregation 방식은 리얼 타임 스트리밍 데이터에서 시간 윈도우 단위로 데이터를 처리하는 경우에 많이 사용이 되며, Apache Beam과 같은 스트리밍 프레임워크를 이용하여 구현한다.
구글 클라우드에서 데이터 전처리 방식
이러한 데이터 전처리는 다양한 컴포넌트를 이용해서 처리할 수 있는데, 어떤 방식이 있는지 살펴보기 전에 먼저 구글 클라우드 기반의 머신러닝 학습 파이프라인 아키텍처를 살펴보자. 아래는 일반적인 구글 클라우드 기반의 머신러닝 파이프라인 아키텍처이다.
<그림. 구글 클라우드 플랫폼 기반의 일반적인 머신러닝 학습 파이프라인 아키텍처 >
원본 데이터는 빅쿼리에 저장된다. (테이블 형태의 데이터가 아닌 이미지나 텍스트등은 클라우드 스토리지(GCS)에 저장된다.) 저장된 원본 데이터는 Dataflow를 이용해서 머신러닝 학습에 알맞은 형태로 전처리 된다. 학습/평가/테스트 셋으로 나누는 것을 포함해서, 가능하면 텐서플로우 파일형태인 *.tfrecord 형태로 인코딩 된후에, GCS 에 저장된다. 텐서플로우등으로 모델을 개발한 후에, trainer-package로 패키징을 하고, AI Platform 트레이닝에 이 모델을 업로드 한다. 업로드된 모델을 앞서 전처리된 데이터를 이용해서 학습이되고, 학습이 된 모델은 GCS에 저장된다. (텐서플로우에서 SavedModel로 저장한다.) GCS 에 저장된 모델은 AI Plaform 서빙 엔진에 배포되고 REST API를 이용하여 서빙된다. 클라이언트에서는 이 REST API를 이용하여 학습된 모델에 대한 서빙을 이용한다. 전체 워크플로우에 대한 파이프라인 관리는 Apache Airflow 매니지드 서비스인 Composer 를 이용한다. 또는 머신러닝에 특화된 파이프라인이기 때문에, AI Platform pipeline을 사용하는 것이 좋다.
Option A: 빅쿼리에서 데이터 전처리
일반적으로 빅쿼리를 이용한 전처리는 다음과 같은 시나리오에 유용하다.
Sampling : 데이터에서 랜덤하게 일부 데이터셋만 가지고 오는 용도
Filtering : 학습에 필요한 데이터만 WHERE 문을 이용해서 가지고 오는 용도
Partitioning : 데이터를 학습/평가/테스트 용도로 나누는 용도
주로 빅쿼리는 Dataflow로 데이터를 인입하기 전체 최초 전처리 용도로 사용이 되는데, 주의할점은 빅쿼리에 전처리 로직이 많을 경우 향후 서빙에서 재 구현이 필요할 수 있다. 무슨 이야기인가 하면, 서빙시에도 입력 데이터에 대한 동일한 전처리가 필요한데, 빅쿼리에서 SQL로 작성한 전처리 로직은 서빙시에는 사용할 수 없기 때문에, 자바나 파이썬으로 전처리 로직을 다시 구현해야 하는 이중작업이 될 수 있다. 물론 서빙이 빅쿼리에 있는 데이터를 사용하는 배치 서빙일 경우 문제가 없지만, 리얼타임으로 단건의 데이터에 대해서 서빙을 하는 경우에는 빅쿼리에서 서빙용 데이터를 전처리할 수 없다.
그럼에도 불구하고 배치 서빙용인 경우 전처리를 빅쿼리를 이용할 경우 편리하고 특히 Dataflow 에 데이터를 입력하기전에 Full pass transformation 이 필요한 전체 통계 데이터 (예를 들어 평균,분산,최소/최대값)은 SQL을 통해서 쉽게 뽑아낼 수 있는 장점이 있다.
Option B: Dataflow 에서 데이터 전처리
복잡한 데이터 변환 로직이 있는 경우등에 효율적으로 사용할 수 있는 방식인데, Instance level transformation 뿐만 아니라, full pass transformation, 그리고 window aggregation 타입 모두를 지원할 수 있다.
Dataflow는 Apache Beam 오픈소스 기반의 런타임이지만, 다양한 구현 방식을 지원하고 있다.
Apache Beam을 사용하는 방법 : 가장 일반적인 방식으로 Apache Beam Java/Python SDK 을 이용하여 데이터 변환 로직을 구현할 수 있다.
Tensorflow Transformation 을 사용하는 방법 : 텐서플로우의 경우 Tensorflow Transformation (이하 TFT) 이라는 이름으로 데이터 변환 프레임워크를 제공한다. TFT는 Apache Beam 기반으로 동작하는데, 텐서플로우 코드를 기반으로 하기 때문에, 머신러닝 개발자 입장에서는 접근이 상대적으로 쉬운 장점이 있다.
Dataflow SQL을 사용하는 방법 : 앞의 두 방식의 경우에는 Java나 Python 기반의 코딩이 필요한데, 이런 코딩 없이 Window aggregation이나, 기타 복잡한 로직을 구현하고자 할때 사용할 수 있는 방식이 Dataflow SQL이다.SQL을 사용하여 구현하지만, Dataflow의 함수등을 사용할 수 있는 장점이 있다.
Dataflow Template + UDF를 사용 하는 방법 : 복잡한 변환이 아니라 단순한 맵핑이나 문자열 변환들을 어렵지 않게 구현하는 방식으로 Dataflow는 Pre-built in 된 Template을 제공한다. 이 템플릿 중에는 비즈니스 로직을 자바스크립트로 넣을 수 있는 UDF 라는 방식을 지원하는데, Apache Beam 형태로 구현할 필요 없이 단순한 변환 로직을 자바스크립트로 구현하여 GCS에 파일을 저장하고, 설정 정보에서 자바 스크립트 파일만 지정하면되기 때문에, 쉽게 사용할 수 있다.
서빙시에도 다양한 아키텍처 구현이 가능한데, Pub/Sub 큐를 통해서 데이터를 실시간으로 인입한 데이터를 머신러닝 모델로 서빙한후에, Pub/Sub으로 내보내는 near realtime 서빙이 가능하고 또는 bigtable에 서빙 결과를 저장하여 마치 serving 결과에 대한 캐쉬식으로 사용하는 구조도 가능하다.
<그림. 스트림 데이터를 이용하여 서빙을 제공하는 아키텍처>
Option C: Tensorflow 모델 내에서 데이터 전처리
아니면 데이터 전처리를 Tensorflow 모델 코드내에서 하는 방식이 있다.
feature_column 를 이용하여 피처를 임베딩하거나, 버킷화 하는 방식이 있고
아니면 데이터를 피딩하는 input functions(train_input_fn, eval_input_fn, and serving_input_fn) 안에 데이터 전처리 로직을 구현하는 방법이 있다.
Custom estimator를 사용하는 경우에는 model_fn 자체에 데이터 전처리 로직을 넣을 수 있다.
이렇게 텐서 플로우 코드단에 전처리 기능을 넣는 경우는 Instance level transformation은 가능하지만 다른 방식에 대해서는 불가능하다. 그렇지만 이미지 데이터를 학습전에 rotation하거나 flip 하는 argumentation 등은 텐서플로우 코드에서 하게 되면 동적으로 데이터를 학습 단계에 argumentation할 수 있기 때문에 효율이 좋은 장점이 있다.
Option D: DataPrep을 이용한 데이터 전처리
구글 클라우드 플랫폼에서는 데이터의 특성을 분석하고 간단한 변환을 지원하기 위한 wrangling 도구로 DataPrep을 제공한다. Engineered feature 단계까지 데이터를 가공하는 것은 어려울 수 있겠지만, Raw data를 Prepared data 형태로 cleansing 하는 용도로는 충분히 사용할 수 있으며, 특히 시각화를 통한 데이터 분포나 아웃라이어 분석이나 단순 변환등에는 효과적으로 사용할 수 있다.
<그림 DataPrep 을 이용한 Wrangling 과정 예시>
Option E: DataProc을 이용한 데이터 전처리
DataProc은 Hadoop/Spark 에 대한 구글 매니지드 서비스이다. Apache Beam을 사용하는 Dataflow와 같이 코딩을 기반으로 한다는 점은 같지만, 기존에 Hadoop/Spark 에코 시스템에 익숙한 사용자들의 경우에는 기존의 에코 시스템과 개발 코드를 재활용할 수 있다는 장점을 가지고 있다.
데이터 전처리시 고려할점
그러면 이러한 기술을 이용해서 데이터를 전처리할때, 고려해야하는 점은 무엇이 있을까?
학습/서빙 데이터에 대한 스큐(skew)
모델을 학습하여, 서비스에 배포한후에, 향후 들어오는 데이터로 서빙을 하게 되는데, 이때 학습에서 사용한 데이터와 서빙시 사용한 데이터의 특성이 다를때 이를 training-serving skew 라고 한다.
예를 들어 피처 A가 학습시에 범위가 1~255 였는데, 서빙시에 1~500 사이로 들어오게 되면 이 모델의 서빙 결과는 정확하지 못하게 된다.
(참고 : 이런 문제를 해결하기 위해서 데이터의 분포나, 수학적 통계값을 저장해 놓은 후에, 서빙전에 검증하는 방식을 사용할 수 있으며 이는 Tensorflow data validation으로 구현이 가능하다. )
Full pass transformation
Option C의 텐서플로우 모델내의 데이터 변환 로직은 Full pass transformation을 지원하지 않기 때문에, feature scaling이나, normalization 적용이 불가능하다. 이러한 전처리 기법은 최소/최대값등의 통계 데이터가 필요한데, 이러한 데이터는 모델 학습전에 계산되어야 하고, 계산된 데이터는 어디에든 저장되어 있어야 하며, 학습과/서빙 단계에 모두 일관되게 사용될 수 있어야 한다.
성능 향상을 위한 Up front data loading
Option C 텐서플로우 모델내에 데이터 변환 로직을 구현할때, 고려해야 하는 사항이다.
모델 코드 상에 데이터 전처리 로직이 있을 경우, 아래 그림과 같이 데이터 변환 작업이 끝나면, 그 데이터로 모델을 학습 시키는 구조가 된다.
<그림. 데이터 전처리가 모델 학습전에 발생하여, 대기하는 현상>
이 경우에 데이터가 전처리되고 있는 동안에는 학습이 이루어지지 않기 때문에 자원이 낭비되는 문제가 발생하고, 모델의 학습 시간에 전처리 시간까지 포함되기 때문에 전체 학습시간이 상대적으로 오래걸린다.
Option B의 데이터 플로우를 사용하는 것처럼 미리 여러 학습에 사용될 데이터를 전처리를 해놓거나 아니면 아래 그림과 같이 병렬적으로 데이터 플로우에서 데이터를 전처리하면서 모델은 학습에만 전념하도록 하면, 모델의 전체학습 시간을 줄일 수 있다.
<그림. 병렬로 데이타 전처리를 해서 모델 학습을 최적화 하는 방식>
이를 up front data loading 이라고 하는데, 텐서플로우에서는 Prefetching, Interleave, Parallel mapping 등을 tf.data.DataSet에서 다양한 방식으로 이를 지원하고 있다.
Tensorflow Transform
텐서플로우 프레임웍은 이러한 데이터 변환을 위해서 Tensorflow Transform (이하 TFT) 라는 프레임웍을 데이터 전처리 기능을 제공한다. 이 TFT를 구글 클라우드에서 실행하게 되면, Dataflow를 기반으로 실행할 수 있다. (Option B)
tf.Transform 이라는 패키지로 제공된다. TFT는 instant level transformation 뿐만 아니라, full pass transformation, window aggregation 을 지원하는데, 특히 full pass transformation을 지원하기 위해서 데이터를 변환하기 전에 Analyze 라는 단계를 거치게 된다.
아래 그림이 TFT가 작동하는 전반적인 구조를 기술한것인데,
Analyze 단계에서는 데이터의 통계적인 특성 (최소,최대,평균 값등)을 추출하고, Transform 단계에서는 이 값을 이용하여, 데이터 변환을 수행한다. 각 단계는 tft_beam.AnalyzeDataset , tft_beam.TransformDataset 로 실행될 수 있으며, 이 두 단계를 tft_beam.AnalyzeAndTransformDataset 로 합쳐서 한번에 실행하는 것도 가능하다.
Analyze 단계 : Analyze 단계에서는 통계적인 값을 Full pass operation 을 통해서 계산해내는 것이외에도, transform_fn을 생성해내는 작업을 한다. transform_fn은 텐서플로우 그래프로, 데이터 변환에 대한 instance level operation 을 계산해낸 통계값을 사용해서 수행한다.
Transform 단계 : 데이터 변환 단계에서는 transform fn을 인입 데이터에 적용하여, instance level로 데이터를 변환하는 작업을 수행한다.
모델 학습시 데이터에 대한 전처리는 학습 데이터뿐만 아니라, 평가 (Eval) 데이터에도 동일하게 적용이 되어야 하는데, Analyze는 학습데이터에만 적용되서 데이터의 특성을 추출하고, 평가 데이터에는 별도로 Analyze를 수행하지 않고, 학습 데이터에서 추출된 데이터 특성을 그대로 사용한다
TFT pipeline export
transform_fn으로 구성된 데이터 변환 파이프라인은 내부적으로 텐서 플로우 그래프로 변환이 되는데, 학습된 텐서플로우 모델을 export 하여 SavedModel로 저장할때, 이 transform_fn 그래프가 서빙용 데이터 입력함수인 serving_input_fn에 붙어서 같이 export 된다. 이 말은, 학습에서 사용한 데이터 전처리 로직인 transform_fn이 그대로 서빙단에도 같이 적용된다는 이야기이다. 물론 full-pass transformation에서 계산한 통계값도 상수형태로 저장하게 된다. 그래서 입력값에 대해서 학습과 서빙시 같은 변환 로직을 사용할 수 있게 된다.
데이터 전처리 옵션 정리
앞서 설명한 데이터 변환 전처리 옵션을 Instance level transformation, full pass level transformation, window aggregation 에 따라 정리해보면 다음과 같다.
Disclaimer
본 글의 작성자는 Google 직원입니다. 그러나 본 글의 내용은 개인의 입장에서 작성된 글이며, Google의 입장을 대변하지 않으며, Google이 본 컨텐츠를 보장하지 않습니다.
References
Instance-level transformation (stateless transformation) Full pass during training instance -level during serving (stateful transformation) Real-time (window) aggregations during training and serving (streaming transformation) 배치 서빙 온라인 서빙 배치 서빙 온라인 서빙 배치 서빙 온라인 서빙 BigQuery (SQL) OK 같은 데이터 변환 로직을 학습과 서빙 단계에 적용 가능 가능은 하지만 권장하지 않음
서빙시에는 BigQuery가 아니라 다른 방식으로 데이터 변환 로직을 구현해야 하기 때문에 결과적으로 학습/서빙 Skew를 유발할 수 있음 가능
BigQuery에서 수학적 통계값(최소/최대)를 계산하여, 이 값을 이용하면 가능하다. 그러나 계산된 값을 별도로 저장해서 학습/서빙시에 사용해야 하기 때문에 구현이 번거롭다. N/A 가능은 하지만 권장하지 않음
BigQuery의 윈도우 함수등을 이용하여 구현은 가능하지만, 서빙시에는 BigQuery가 아닌 다른 툴로 구현을 해야 하기 때문에 학습/서빙 Skew가 발생할 수 있음 Dataflow (Apache Beam) OK 서빙시 데이터가 Pub/sub을 통해서 데이터 블로우로 들어오면 가능하지만, 그렇지 않은 경우 학습/서빙 데이터간 Skew가 발생할 수 있음 가능
Dataflow에서 수학적 통계값(최소/최대)를 계산하여, 이 값을 이용하면 가능하다. 그러나 계산된 값을 별도로 저장해서 학습/서빙시에 사용해야 하기 때문에 구현이 번거롭다. OK
동일한 Apache Beam 기반의 데이터 변환 로직이 학습을 서빙시 적용이 가능함 Dataflow (Apache Beam + TFT) 권장함
학습과 서빙의 Skew를 방지할 수 있고, 학습/서빙전 데이터를 미리 준비할 수 있음 권장함
데이터 변환 로직과, 모델 학습시에 계산된 통계 결과 텐서플로우 그래프 형태로 저장되서, 서빙 모델을 export할시에 같이 저장됨 Tensorflow
(input_fn & serving_input_fn) 가능은 하지만 권장하지 않음
학습과 서빙 효율성을 생각하면, 학습전에 데이터를 변환하는게 좋음 가능은 하지만 권장하지 않음
학습과 서빙 효율성을 생각하면, 학습전에 데이터를 변환하는게 좋음 불가능 불가능
머신러닝 (3)
Writer: Harim Kang
머신러닝 – 3. End-to-End Machine Learning Project (2)
해당 포스팅은 머신러닝의 교과서라고 불리는 Hands-On Machine Learning with Scikit-Learn & Tensor flow 책을 학습하며 정리하고, 제 생각 또한 함께 포스팅한 내용입니다. 아래의 포스팅에 이어진 내용입니다.
https://learning.oreilly.com/library/view/hands-on-machine-learning/9781491962282/ch02.html의 내용과 제 조사 및 생각을 함께 정리한 포스팅입니다.
2020/01/21 – [IT/Machine Learning] – 머신러닝 (2) – ML프로젝트를 위한 데이터 선택 및 준비 (using Scikit-Learn)
오늘의 포스팅은 위의 포스팅에 이어지는 데이터 전처리 과정에 대한 포스팅입니다. 해당 포스팅은 Data Cleaning, text or categorical feature encoding, Data Transformation, Data Scaling, Pipeline에 대한 내용을 포함하고 있으며, Scikit-learn 라이브러리 메서드를 사용한 전처리에 대해 포스팅하였습니다.
데이터 전처리
데이터 전처리는 기존의 데이터를 머신러닝 알고리즘에 알맞은 데이터로 바꾸는 과정입니다. 이 전처리 과정은 모델이 생선 된 이후에도 예측하고자 하는 새로운 데이터에도 적용하는 과정입니다. 또한, 전처리 과정을 통해서 더욱더 모델 학습의 성능을 높일 수 있습니다.
데이터 전처리 과정
Data Cleaning Handling Text and Categorical Attributes Custom Transformers Feature Scaling Transformation Pipelines
Data Cleaning
대부분의 머신러닝 알고리즘은 Missing feature, 즉 누락된 데이터가 있을 때, 제대로 역할을 하지 못합니다. 그래서 첫번째 방법으로 먼저 Missing feature에 대해 처리해주어야 합니다.
불 필요 데이터 제거(처리) dropna() : pandas에서 제공하는 누락 데이터를 제거하는 함수입니다. Na/NaN과 같은 누락 데이터를 제거하는 함수입니다. axis: 파라미터 값으로 0을 주면 행 제거, 1을 주면 열 제거입니다. default값은 0입니다. subset: array, 특정 feature를 지정하여 해당 Feature의 누락 데이터 제거가 가능합니다.
전체 속성 제거 : 연관성 없는 feature의 경우, 학습에 방해가 될 수 있기 때문에 제거합니다. drop() : pandas에서 제공하는 특정 데이터 열(또는 행)을 제거하는 함수입니다. 특정 행 또는 열의 라벨(데이터)들을 제거합니다. labels: 제거할 데이터를 지정하는 파라미터입니다. axis: 파라미터 값으로 0을 주면 행 제거, 1을 주면 열 제거입니다. default값은 0입니다.
누락 데이터에 특정 값을 지정 : zero(0으로 채우기), the mean(평균값으로 채우기), the median(중간값으로 채우기) 등등의 값을 누락 데이터에 채우는 방식입니다. fillna() : pandas에서 제공하는 누락 데이터에 특정 값을 채우는 함수입니다. 특정 메서드를 지정하여 Na/NaN값을 채웁니다. value: scalar, dict, series or dataframe, value 등 구멍을 메우기 위한 값
scikit-learn에서 제공하는 클래스 Imputer() class missing_values: int or ‘NaN’ strategy: ‘median'(중앙값), ‘mean'(평균값), ‘most_frequent'(최빈값) axis: 0(columns), 1(rows) 사용법 Imputer Class를 선언합니다. 채우고자 하는 값을 함께 정의합니다. from sklearn.preprocessing import Imputer imputer = Imputer(strategy=’median’) fit() 함수를 사용하여 기존 데이터의 누락 데이터에 채워야 할 값을 imputer 객체에 훈련시킵니다. imputer.fit(dataset) transform() 함수를 사용하여 기존 데이터의 누락 데이터를 변환합니다. X = imputer.transform(dataset)
문자와 카테고리형 데이터 다루기
대부분의 ML알고리즘들은 숫자 데이터로 학습하는 것을 선호합니다. 기존 데이터 세트에 텍스트가 있는 경우 이것을 숫자형 데이터로 인코딩해주어야 합니다. 방법은 아래와 같습니다.
Encoding Encoding text to number method : factorize(), OrdinalEncoder() One-Hot Encoding method : OneHotEncoder()
예제로 사용할 데이터 >>> housing_cat = housing[[“ocean_proximity”]] >>> housing_cat.head(10) ocean_proximity 17606 <1H OCEAN 18632 <1H OCEAN 14650 NEAR OCEAN 3230 INLAND 3555 <1H OCEAN 19480 INLAND 8879 <1H OCEAN 13685 INLAND 4937 <1H OCEAN 4861 <1H OCEAN >>> housing_categories Index([‘<1H OCEAN', 'INLAND', 'ISLAND', 'NEAR BAY', 'NEAR OCEAN'], dtype='object') factorize() Pandas에서 제공하는 메서드로서, 숫자형 또는 카테고리형으로 인코딩을 해주는 함수입니다. 여러 개의 카테고리형 input feature들을 인코딩할 수 있습니다. 파라미터 values: a 1-D array, factorization전의 배열 sort: bool, default False, 관계를 유지하면서 unipue 한 카테고리 label을 준비합니다. Returns labels: ndarray, 인코딩 된 결과를 배열로 리턴합니다. uniques: ndarray, 카테고리를 배열로 리턴합니다. housing_cat_encoded, housing_categories = housing_cat.factorize() [0 0 1 2 0 2 0 2 0 0 2 2 0 2 2 0 3 2 2 2 0] OrdinalEncoder() Scikit-learn에서 제공하는 factorize 역할의 클래스라고 생각하면 될 거 같습니다. OrdinalEncoder객체를 생성해서, inputer와 비슷한 방식으로 사용합니다. 대신, fit_transform() 메서드를 사용하여, fit과 transform을 한 번에 제공합니다. from sklearn.preprocessing import OrdinalEncoder ordinal_encoder = OrdinalEncoder() housing_cat_encoded = ordinal_encoder.fit_transform(housing_cat)** > housing_cat_encoded[:10] > array([[0.], > > > [0.], > [4.], > [1.], > [0.], > [1.], > [0.], > [1.], > [0.], > [0.]]) >
위의 factorize()와 OrdinalEncoder()와 같은 카테고리형 텍스트를 단순히 순서에 맞게 숫자형으로 바꾸어주는 방법은 문제점이 있습니다. 예를 들어 위의 함수들을 사용해서 변환시키면 <1H OCEAN변수는 0이고, NEAR OCEAN변수는 4입니다. 각각 변수들은 0~4까지 있는데, 1 같은 경우 0과 비슷하다고 ML알고리즘은 판단할 수 있습니다. 실제로는 비슷하지 않지만, 알고리즘은 숫자에 의미를 두어 거리를 판단하게 되는 경우가 생깁니다. 이를 방지하기 위해서 나온 것인 One-Hot Encoder입니다. OneHotEncoding() Scikit-learn에서 제공하는 클래스로, 카테고리형 특징들을 one-hot 숫자형 배열로 인코딩해주는 클래스입니다. 오직 하나로 해당되는 부분만 1(Hot)로, 나머지는 0(Cold)으로 바꾸는 방법입니다. from sklearn.preprocessing import OneHotEncoder cat_encoder = OneHotEncoder() > housing_cat_1hot = cat_encoder.fit_transform(housing_cat) > housing_cat_1hot > <16512x5 sparse matrix of type '
‘ > with 16512 stored elements in Compressed Sparse Row format> 위와 같은 코드로 사용합니다. OrdinalEncoder와 비슷한 방식으로 사용됩니다. 아래에는 numpy배열로 변환한 코드입니다. >>> housing_cat_1hot.toarray() array([[1., 0., 0., 0., 0.], [1., 0., 0., 0., 0.], [0., 0., 0., 0., 1.], …, [0., 1., 0., 0., 0.], [1., 0., 0., 0., 0.], [0., 0., 0., 1., 0.]]) Custom Transformers
Scikit-learn에서는 다양한 데이터 변환기(Transformer)들을 제공합니다. 이를 이용하여, 커스텀 변환기를 만들 수 있습니다. 이를 위해서는 세 가지 메서드를 알아야 합니다.
fit() x: input data x라는 데이터에 특정 알고리즘 또는 전처리를 적용하는 메서드입니다. 이를 통해 변환기에 알맞는 파라미터를 생성합니다.
transform() x: input data fit()을 통해 생성된 파라미터를 통해서 모델을 적용시켜 데이터 세트를 알맞게 변환시키는 메소드입니다.
fit_transform() 같은 데이터 세트를 사용하여 fit과 transform을 한 번에 하는 메서드입니다. from sklearn.base import BaseEstimator, TransformerMixin rooms_ix, bedrooms_ix, population_ix, households_ix = 3, 4, 5, 6 class CombinedAttributesAdder(BaseEstimator, TransformerMixin): def __init__(self, add_bedrooms_per_room = True): # no *args or **kargs self.add_bedrooms_per_room = add_bedrooms_per_room def fit(self, X, y=None): return self # nothing else to do def transform(self, X, y=None): rooms_per_household = X[:, rooms_ix] / X[:, households_ix] population_per_household = X[:, population_ix] / X[:, households_ix] if self.add_bedrooms_per_room: bedrooms_per_room = X[:, bedrooms_ix] / X[:, rooms_ix] return np.c_[X, rooms_per_household, population_per_household, bedrooms_per_room] else: return np.c_[X, rooms_per_household, population_per_household] attr_adder = CombinedAttributesAdder(add_bedrooms_per_room=False) housing_extra_attribs = attr_adder.transform(housing.values)
위의 코드는 rooms_per_household, population_per_household 두 변수의 데이터를 생성하는 코드입니다.
위의 코드를 통해 이해한 내용으로는, fit함수 작성을 통해 데이터 세트를 받아서 객체를 return 하고, transform을 통해 데이터 세트를 실질적으로 변환(생성)시킨다는 것을 알 수 있습니다.
Feature Scaling
숫자형으로 다 바꾼 데이터를 바로 학습시킨다면 좋은 성능을 가진 모델이 될까요? 일반적인 ML 알고리즘들은 아주 다양한 범위의 숫자형 데이터를 학습시킨다면 제대로 성능을 보여주지 못합니다.
예를 들어, 특정 데이터의 범위가 -500~39,320이라면 아주 다양한 데이터가 존재합니다. 이러한 상태에서는 제대로 된 학습을 잘하지 못합니다. 이를 방지하기 위해서 숫자형 데이터의 범위를 줄여주는 방법을 사용합니다.
Min-Max Scaling (Normalization) 최솟값과 최댓값을 확인하여 이 값들을 모두 지정한 범위(대체로 0과 1 사이)의 상대적인 값으로 변환시키는 방법입니다. 특정 범위를 지정하면 해당 범위 안으로 바인딩시키는 방법입니다. Scikit-learn에서는 MinMaxScaler(feature_range, copy) class를 제공합니다. feature_range: tuple(min, max), default=(0, 1), 변환하고자 하는 데이터의 변환 지정 범위입니다. copy: Boolean, 변환 이전의 값들을 복사해 둘 것인지에 대한 여부입니다. from sklearn.preprocessing import MinMaxScaler a = [[10, 2, 1], [9, 2, 1], [8, 2, 1], [6, 2, 5], [2, 8, 10]] scaler = MinMaxScaler(feature_range=(0,1)) a = scaler.fit_transform(a) >>> print(a) [ [1. 0. 0.] [0.875 0. 0.] [0.75 0. 0.] [0.5 0. 0.44444444] [0. 1. 1.]]
Standardization 특정 범위에 값을 바인딩하지 않습니다. 특정 알고리즘(ex. Neural Network)에서는 사용되지 않는 방식입니다. 특이점(이상점)의 영향이 적습니다. Scikit-learn에서는 StandardScaler() 클래스를 제공합니다. from sklearn.preprocessing import StandardScaler a = [[10, 2, 1], [9, 2, 1], [8, 2, 1], [6, 2, 5], [2, 8, 10]] scaler = StandardScaler() a = scaler.fit_transform(a) >>> print(a) [ [1.06066017 -0.5 -0.73130714] [0.70710678 -0.5 -0.73130714] [0.35355339 -0.5 -0.73130714] [0.35355339 -0.5 0.39378077] [-1.76776695 2. 1.80014064]]
ML Pipeline
위의 데이터 전처리 방식들은 아주 다양한 컴포넌트들로 이루어져 있습니다. 매번 데이터 정제마다 같은 순서를 반복하기 싫다면, Pipeline이라는 방식을 사용하면 됩니다.
Pipeline은 Data Processing Component들의 순서를 정의해놓은 것입니다.
데이터 변환을 조작하고 적용하는 방법입니다.
각각의 컴포넌트들과 교류하며 사용합니다.
ML 워크플로우의 자동화를 돕는 방법입니다.
Scikit-Learn에서는 Pipeline Class를 제공합니다. 이것은 데이터 변환 단계의 순서를 정리하고 만들기 쉽게 합니다.
Parameter steps: list, list of tuple
마지막에 사용되는 estimator는 반드시 데이터 변환 단계를 필요로 합니다. (fit_transform이 포함되어야 합니다.) from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler num_pipeline = Pipeline([ (‘imputer’, SimpleImputer(strategy=”median”)), (‘attribs_adder’, CombinedAttributesAdder()), (‘std_scaler’, StandardScaler()), ]) housing_num_tr = num_pipeline.fit_transform(housing_num)
위의 코드에서, Pipleline클래스에 imputer, 특성 추가, StandardScaler()를 모두 선언하여 데이터가 해당 순서에 맞춰 진행되도록 하는 코드입니다.
다음 포스팅에서는 이어서 ML 알고리즘, 모델 선정, 학습, 평가 등에 관한 내용을 작성할 예정입니다.
머신러닝 입문 관련 데이터 세트 프로젝트는 아래의 github 레포지토리에 있습니다.
https://github.com/harimkang/Scikit-Learn-Example
Reference
[머신러닝 완벽가이드] 데이터 전처리 (Data Preprocessing)
첫번째 데이터 전처리 대상은 결측치(결손값), 즉 Null값에 대한 이슈를 해결하는 것입니다.
데이터 전처리를 통해 Null값을 다른 고정된 값으로 변환해야 합니다. 하지만 데이터의 특징에 따라 Null값을 어떻게 처리해야 할지 달라집니다.
1. 피처 값 중 Null값의 비율이 매우 작을 경우
위 경우에는 단순히 평균값, 최빈값 등으로 대체하는 방법이 있습니다.
2. 피처 값 대부분이 Null값인 경우
위 경우에는 과감히 해당 피처를 드롭하는 것이 ML 알고리즘 성능 개선이 더 효과적일 수 있습니다.
3. 중요한 피쳐의 Null값의 분포가 일정 수준 이상일 경우
위 경우가 Null값 처리의 핵심이 되겠습니다. 일정 수준의 기준은 데이터에 따라 달라질 수 있습니다. 또한 중요한 피처인 경우 1번, 2번 방식으로 결측치를 처리하게 되면 예측 왜곡이 심하게 나타날 수 있어 업무 로직, 필드 지식 등을 상세히 검토하여 더 정밀한 값으로 대체해야합니다.
[머신러닝] 데이터 전 처리하기
[출처] 2021 NIPA AI 온라인 교육데이터 분석 및 전처리 단계 : 수집한 데이터를 분석하고 머신러닝에 사용할 형태로 변환시키는 단계
크롤링이나 DB 데이터를 통해 수집된 데이터를 머신러닝에 학습시키기 위해서는 데이터 전 처리 과정이 필요하다.
데이터 전 처리는 크게 3가지 역할을 한다.
머신러닝의 입력 형태로 데이터 변환 (피처 엔지니어링) 결측값 및 이상치를 처리하여 데이터 정제 학습용 및 평가용 데이터 분리
1. 데이터 변환
실제 학습에 사용되는 데이터 셋은 이미지, 자연어, 범주형, 시계열 등 다양한 데이터 형태를 가지고 있다.
대부분의 머신러닝 모델은 숫자 데이터를 입력으로 받으며, 대부분의 원본 데이터는 머신러닝 모델이 학습할 수 없는 형태로 되어있다.
따라서 학습에 사용할 데이터는 머신러닝 모델이 학습할 수 있는 수치형 자료로 변환이 필요하다.
[출처] 2021 NIPA AI 온라인 교육2. 데이터 정제
결측값은 값이 측정되지 않은 것으로 일반적인 머신러닝의 입력값으로 사용할 수 없다.
Null, None, NaN 등의 결측값을 처리하는 방법은 다음과 같다.
결측값이 존재하는 샘플 삭제
결측값이 많이 존재하는 변수 삭제
결측값을 다른 값으로 대체
이상치가 존재하면 모델의 성능 저하를 유발할 수 있다.
이상치는 일반적으로 전 처리 과정에서 제거하며, 이상치를 판단하는 기준이 중요하다.
이상치인지 판단하는 방법은 다음과 같다
통계지표(카이제곱 검정, IQR 지표 등)를 사용하여 판단
데이터 분포를 보고 직접 판단
머신러닝 기법을 사용하여 이상치 분류
3. 데이터 분리
데이터 분리는 머신러닝 모델의 성능을 평가하기 위해서 필요하다.
학습에 사용된 데이터로 평가할 수 없기 때문에 초기 데이터 셋에서 일정 비율로 학습용, 평가용 데이터를 분리한다.
일반적으로 7 : 3 ~ 8 : 2 로 학습용 : 평가용 데이터를 분리함.
※ 지도학습의 경우에는 입력 값인 Feature 데이터와 예측 대상인 Label 데이터로 분리하여 저장함.
파이썬 데이터 전처리 흐름
1. 데이터 불러오기
import numpy as np import pandas as pd #데이터 시각화 라이브러리 import matplotlib.pyplot as plt import seaborn as sns #dataframe 형태로 읽어오기 data=pd.read_csv(“data.csv”, encoding=’euc-kr’) #상위 5개 데이터 data.head() #데이터 타입 data.dtypes #데이터 column 이름 data.columns.values #dataframe 모양 (행, 열) data.shape #dataframe 정보 요약 data.info() # 수치형 변수의 데이터 정보 요약 data.describe()
head(N), tail(N) 함수를 통해 상위 N개, 하위 N개 데이터 확인이 가능함.
info 함수의 출력 값으로 Column, Non-Null Count, Dtype 정보를 알 수 있음.
Non-Null Count의 값이 0인 변수는 데이터 정제 단계에서 삭제
2. 데이터 정제
결측값 처리
#각 열의 빈 데이터 개수 확인 data[[column1,…]].isna().sum() #모든 열의 빈 데이터 개수 확인 data.isna().sum() #drop 함수를 통한 값이 없는 변수 삭제 corona_del = corona.drop(columns = [column1, … ]) #결측값 정보 출력 data.isnull().sum() #해당 변수의 결측값만 삭제 data = data[~data[column].isnull()] #모든 변수의 결측값 삭제 data = data.dropna()
값이 없는 변수 삭제
변수에 결측값이 존재하는 샘플 삭제
중복값 제거
#중복값 확인 data[data.duplicated(keep=False)] #제거 전 df 길이 print(len(df)) #중복값 제거 data = data.drop_duplicates() #제거 후 df 길이 print(len(df))
이상치 제거
#소수점을 갖는 이상치 처리 data = data[data[column]-np.floor(data[column]) == 0][column] #정제된 dataframe 정보 corona_del.info()
소수점을 가지는 이상치 삭제 (소수점인 데이터를 이상치라고 판단)
3. 데이터 분리
from sklearn.model_selection import train_test_split #예측해야하는 label 데이터를 제외한 feature 데이터 X = data.drop(columns=[label 데이터]) #예측해야하는 label 데이터 y = data[label 데이터] # sklearn의 train_test_split으로 쉽게 분리 가능 x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)
sklearn에서 제공하는 train_test_split을 통해 쉽게 훈련용, 테스트용 데이터 분리 가능
머신러닝 데이터 전처리 과정
반응형
데이터 분석을 하기 위해 데이터를 가져왔을 때 가장 먼저 확인해야 하는 것들을 정리해보고자 한다.
01. 데이터 구조 확인
가장 먼저 내가 분석할 데이터가 어떤 구조, 형태로 이루어진 데이터인가?를 확인해야 한다. 데이터 구조는 간단히 보자면 크게 2가지로 나눌 수 있다.(더 세부적으로 나눌 수도 있지만 우선은 크게 보자면!)
-정형 데이터 : ‘표’형태의 데이터
-비정형 데이터 : 이미지, 소리, 영상, 신호 등
02. 판다스 사용 : import pandas
우선 표 형태의 정형 데이터를 가져왔을 때 확인해야 할 기본적인 사항들에 대해 정리해보자.
파이썬에서는 정형 데이터를 처리할 때 pandas라는 라이브러리를 사용한다. 따라서 이 라이브러리를 사용하기 위해서는 import pandas 로 판다스를 임포트 해주고, 그 pandas를 앞으로 pd로 줄여 사용하기 위해 as pd를 적어준다.
03. 데이터 불러오기 : read_csv(‘파일명’)
이때, 내가 불러올 csv파일과 스크립트가 같은 폴더에 위치해야 쉽게 불러올 수 있다.
04. columns(열)과 row(행)의 개수 확인 : shape( )
05. DataFrame 상위 5개 추출 : head( )
columns, row, values 확인
06. DataFrame을 조금 더 자세히 확인 : info( )
1) row 개수
2) columns개수
3) 데이터 타입 (int:정수형 , object:문자형, float :실수형)
4) Missing value (비어있는 값)
5) 데이터 타입별 칼럼 수
6) 데이터 타입의 용량
07. 데이터 타입 확인
: 데이터 타입에 따라 분석방법과 결과가 달라지기 때문에 데이터 타입을 정확하게 알고 전처리하는 것이 중요하다.
1) 숫자(연속형) 데이터
describe()
describe() 함수를 쓰면 숫자형 데이터 값들에 대한 정보를 볼 수 있다.(object타입의 칼럼은 제외됨)
1) count : Not Nill인 데이터의 개수
2) mean : 전체 데이터의 평균
3) std : 표준편차
4) min : 최솟값
5) max : 최댓값
6) 사분위 범위(IQR) : 전체 데이터의 50%가 존재하는 구간
2) 문자(범주형) 데이터
unique()
unique( )를 사용하여 [‘Pclass’]라는 columns에 들어있는 항목들 확인(중복 제거된 상태로)
value_counts() :범주형 데이터에서 각 항목의 개수 확인
각 항목별로 몇 개의 데이터가 있는가?를 확인할 때 value_counts( ) 함수를 사용한다. 즉, unique()함수를 써서 ‘Pclass’라는 칼럼에 어떤 값들이 들어있는지 확인한 뒤, value_counts()를 사용하여 그렇다면 각 값들이 몇 개씩 있는지 확인하는 것이다.
3) columns가 많은 경우에 문 자형 columns만 빨리 확인하고 싶을 때
먼저 describe()를 이용하여 연속형 columns를 가져온 뒤, columns를 이용하여 숫자 데이터 칼럼의 이름들만 추출해서 가져온다. 그리고 tolist()를 이용하여 그 이름들을 리스트 형태로 만들어준다.
다음으로 데이터 프레임의 모든 칼럼들을 리스트로 만들어준다.
연속형 데이터 칼럼은 a로 선언하고, 전체 칼럼은 b로 선언한다.
set을 이용하여 b(전체 칼럼)에서 a(연속형 데이터가 들어있는 칼럼)의 중복을 제거해주면 범주형 데이터 칼럼만 남게 된다. 이것을 list( )를 사용하여 다시 리스트 형태로 만들어준다.
범주형 데이터 칼럼만 추출한 것을 c로 선언한 뒤, [ ]를 사용해보면 범주형 데이터 칼럼에 해당되는 것만 뽑아서 확인할 수 있다.
반응형
머신러닝 데이터 전처리 입문(백견불여일타)(원서/번역서: [해외]機械學習のための「前處理」入門)
상품상세정보 ISBN 9788997924745 ( 8997924745 ) 쪽수 324쪽 크기 190 * 257 * 16 mm /676g 판형알림 이 책의 원서/번역서 機械學習のための「前處理」入門 / 足立悠/著
책소개
이 책이 속한 분야
이 책은 인공지능이 올바른 데이터를 입력 받아 의미 있는 결과를 도출하는 과정에서 필수적으로 거쳐야 할 데이터 전처리에 관한 ‘입문서’이다. 정형 데이터뿐만 아니라 이미지, 텍스트 데이터와 같은 비정형 데이터를 다루는 방법을 제공한다. 데이터를 처리하고 분석하기 위해 가장 많이 사용되는 파이썬 언어를 사용하고, NumPy, Pandas 등 라이브러리를 통해 어떠한 방법으로 데이터를 시각화하고, 의미를 도출할 수 있는지를 자세하게 배울 수 있다. 실습 위주의 책이며, 파이썬을 조금만 알아도 누구나 쉽게 따라해보면서 데이터 전처리의 개념과 방법 등에 관한 기초지식을 충분히 습득할 수 있다. 이것을 기초로 스스로 데이터 전처리 전문가가 되는 길을 찾을 수 있을 것이다.
[샘플원고] www.roadbook.co.kr/244_대상 독자
머신러닝이나 딥러닝을 학습하고 실무에서 모델을 작성해보고자 하는 입문자
인공지능 개발자가 되기 위해 고군분투 중인 취준생 개발자
상세이미지
목차
지은이의 글
옮긴이의 글
감수자의 글
다운로드 및 개발환경 안내
일러두기
1장 데이터 분석, 활용을 시작하기 전에
1 데이터 기반 시대로
2 데이터 분석 프로젝트에 필요한 요소
3 데이터 분석 인재에게 필요한 스킬
컬럼 | 보충지식 1 BI로 무엇을 할 수 있나?
컬럼 | 보충지식 2 데이터처리가 빠른 툴은?
2장 데이터 분석의 프로세스와 환경
1 들어가며
2 비즈니스 이해
3 데이터 이해
4 데이터 준비
5 모델 작성
6 평가
7 배포/공유
8 데이터 분석 환경의 선택
9 주피터 노트북 사용 방법
3장 정형 데이터의 전처리 (1)
1 데이터 이해
2 데이터 준비
3 모델 작성
4 다시 데이터 준비로
5 다시 한번 모델 작성으로
컬럼 | 보충지식 1 데이터 결합
컬럼 | 보충지식 2 오버 샘플링
컬럼 | 보충지식 3 분할의 순도
[함께 해봐요 3-1] Pandas를 사용한 파일 업로드 [함께 해봐요 3-2] 데이터의 행수와 열수 확인 [함께 해봐요 3-3] 데이터형 확인 [함께 해봐요 3-4] 결손값의 포함 유무 확인 [함께 해봐요 3-5] 결손값의 개수 파악 [함께 해봐요 3-6] 데이터형이 수치인 항목의 통계량 계산 [함께 해봐요 3-7] age의 히스토그램 작성 [함께 해봐요 3-8] age와 balance 산포도 작성과 항목 관련성 확인 [함께 해봐요 3-9] 문자열 항목 중 job의 원 그래프 작성 (1) [함께 해봐요 3-10] 문자열 항목 중 job의 원 그래프 작성 (2) [함께 해봐요 3-11] y의 원 그래프 작성 및 데이터 분포 확인 [함께 해봐요 3-12] 목적변수 y에 대한 데이터 분포 확인 [함께 해봐요 3-13] 전처리를 위한 코드 입력 [함께 해봐요 3-14] 각 항목의 데이터형 재확인 [함께 해봐요 3-15] 결손값 제외 [함께 해봐요 3-16] 결손값 보완 [함께 해봐요 3-17] 특이값(이상치) 제외 [함께 해봐요 3-18] 값 두 개를 가지는 데이터 변환 [함께 해봐요 3-19] 다수의 값을 가지는 데이터 변환 [함께 해봐요 3-20] 분석 데이터 세트로 완성 [함께 해봐요 3-21] 더미 변수화한 데이터 결합 [함께 해봐요 3-22] CSV 파일로 결과 출력 [함께 해봐요 3-23] Pandas를 사용한 결합의 이미지 표현 [함께 해봐요 3-24] 데이터를 로드하는 코드 작성 [함께 해봐요 3-25] imbalanced-learn 패키지 설치 유무 확인 [함께 해봐요 3-26] 주티퍼랩에 설치된 패키지 확인 [함께 해봐요 3-27] imbalanced-learn 패키지 설치 [함께 해봐요 3-28] 불균형 데이터 세트에 대한 언더 샘플링 [함께 해봐요 3-29] 오버 샘플링 구현 [함께 해봐요 3-30] 결정 트리 알고리즘을 사용한 모델 검증 [함께 해봐요 3-31] 재현율과 적합도 확인 [함께 해봐요 3-32] 파라미터와 기본값 확인 [함께 해봐요 3-33] 그리드 서치를 사용한 모델의 성능 개선 [함께 해봐요 3-34] 가장 높은 성능일 때의 모델에 대한 파라미터 조합 확인 [함께 해봐요 3-35] 모델 완성 및 영향력 높은 변수 확인 [함께 해봐요 3-36] job 통합 및 새로운 특징량 생성 [함께 해봐요 3-37] month 통합 및 새로운 특징량 생성 [함께 해봐요 3-38] day 통합 및 새로운 특징량 생성 [함께 해봐요 3-39] duration 통합 및 새로운 특징량 생성함께 해봐요 3-40] previous 통합 및 새로운 특징량 생성
[함께 해봐요 3-41] 더미변수를 만들기 위한 목록 삽입 [함께 해봐요 3-42] get_dummies를 사용한 더미변수 생성 [함께 해봐요 3-43] CSV 파일 내용 변경 [함께 해봐요 3-44] feature_selection을 통한 변수 사용 유무 확인4장 정형 데이터의 전처리 (2)
1 고객의 특성 이해
2 고객의 그룹화
3 잠재적인 요구 추출
[함께 해봐요 4-1] 분석 데이터를 읽기 위한 코드 작성 [함께 해봐요 4-2] 각 항목의 데이터형 재확인 [함께 해봐요 4-3] 범위변환 테스트 [함께 해봐요 4-4] Z변환 테스트 [함께 해봐요 4-5] 각 변수의 평균과 표준편차 값 확인 [함께 해봐요 4-6] 계층형 클러스터링을 이용한 그룹 분할 [함께 해봐요 4-7] 고객별 그룹 확인 [함께 해봐요 4-8] k-Means법을 이용한 그룹 분할 [함께 해봐요 4-9] 클러스터 ID별 데이터 분포 확인 [함께 해봐요 4-10] 클러스터 ID별 데이터 세트와의 결합 [함께 해봐요 4-11] 그룹별 데이터 건수 확인 [함께 해봐요 4-12] 각 그룹의 통계량 계산 및 성질 파악 [함께 해봐요 4-13] PCA를 이용한 신규변수 작성 [함께 해봐요 4-14] 목적변수별 분포 확인 [함께 해봐요 4-15] 목적변수별 산포도 확인5장 이미지 데이터의 전처리
1 데이터 이해
2 기계학습을 위한 데이터 준비
3 딥러닝을 위한 데이터 준비
컬럼 | 보충지식 1 중간층의 추출
[함께 해봐요 5-1] OpenCV 설치 [함께 해봐요 5-2] swiss-army-ant.jpg 읽기 [함께 해봐요 5-3] 배열에 저장된 픽셀값 확인 [함께 해봐요 5-4] 배열 크기 확인 [함께 해봐요 5-5] 컬러 이미지의 픽셀값 확인 [함께 해봐요 5-6] 그레이스케일 이미지로 변환 [함께 해봐요 5-7] 그레이스케일 이미지의 픽셀값 확인 [함께 해봐요 5-8] 이진화 이미지로 변환 [함께 해봐요 5-9] 이진화 이미지의 픽셀값 확인 [함께 해봐요 5-10] 데이터 프레임 형식으로 확인하는 픽셀값 [함께 해봐요 5-11] 신규 노트북 작성 [함께 해봐요 5-12] 설명변수와 목적변수의 세트 작성 (1) [함께 해봐요 5-13] 설명변수와 목적변수의 세트 작성 (2) [함께 해봐요 5-14] 이진화 이미지의 침식 처리 [함께 해봐요 5-15] 이진화 이미지의 팽창 처리 [함께 해봐요 5-16] 이진화 이미지의 오프닝 처리 [함께 해봐요 5-17] 이진화 이미지의 클로징 처리 [함께 해봐요 5-18] 그레이스케일 이미지의 히스토그램 작성 [함께 해봐요 5-19] 그레이스케일 이미지의 pixels_df에 대한 t-SNE 적용 [함께 해봐요 5-20] 목적변수별 데이터 분포 확인 [함께 해봐요 5-21] 그레이스케일 이미지의 설명변수와 목적변수의 세트 작성 [함께 해봐요 5-22] 데이터 세트의 분할 [함께 해봐요 5-23] 이미지 반전을 통한 이미지 수 증가 [함께 해봐요 5-24] 블러 처리를 통한 이미지 수 증가 [함께 해봐요 5-25] 명도 변경을 통한 이미지 수 증가 [함께 해봐요 5-26] 중간층 추출 (1) [함께 해봐요 5-27] 중간층 추출 (2)6장 시계열 데이터의 전처리
1 데이터 이해
2 데이터 준비
3 훈련 데이터 작성
[함께 해봐요 6-1] 분석 데이터 세트 로드 [함께 해봐요 6-2] 데이터의 행수와 열수 확인 [함께 해봐요 6-3] 데이터형 확인 [함께 해봐요 6-4] datetime형으로 데이터 변환 [함께 해봐요 6-5] 한 행 전과의 시간차(분) 계산 [함께 해봐요 6-6] 경과시간(분) 계산 (1) [함께 해봐요 6-7] 결손값 개수 확인 [함께 해봐요 6-8] 각 항목의 통계량 계산 [함께 해봐요 6-9] Matplotlib을 사용한 데이터 시각화 [함께 해봐요 6-10] 전처리 대상의 데이터 읽기 [함께 해봐요 6-11] 결손값 표시 [함께 해봐요 6-12] NaN을 통한 결손값 보완 [함께 해봐요 6-13] 전후의 값 평균치로 보완하는 결손값 [함께 해봐요 6-14] 경과시간(분) 계산 (2) [함께 해봐요 6-15] 6시간 단위로 만들기 위한 평균치 계산 [함께 해봐요 6-16] 두 개의 데이터 세트 결합 [함께 해봐요 6-17] event.csv 파일 읽기 [함께 해봐요 6-18] 데이터 집약 및 시간 축 작성 (1) [함께 해봐요 6-19] 데이터 집약 및 시간 축 작성 (2) [함께 해봐요 6-20] 특징량과 목적변수 결합 [함께 해봐요 6-21] 슬라이드 창을 사용한 특징량 추출 [함께 해봐요 6-22] 기계학습의 알고리즘 형태로 특징량 변형 [함께 해봐요 6-23] 특징량 세트와 목적변수 결합 [함께 해봐요 6-24] 새로운 노트북 작성 및 코드 입력 [함께 해봐요 6-25] 데이터 시각화 [함께 해봐요 6-26] 데이터 분할 [함께 해봐요 6-27] 데이터 정규화 [함께 해봐요 6-28] 훈련 데이터의 부분시계열 작성 [함께 해봐요 6-29] 부분시계열의 파형 거리(유사도) 측정 [함께 해봐요 6-30] 케라스 실행 [함께 해봐요 6-31] 오토 인코더 네트워크 작성 [함께 해봐요 6-32] 학습 조건 설정 및 학습 실행 [함께 해봐요 6-33] 오차의 수렴 상태 확인 [함께 해봐요 6-34] 출력값 추이 비교 [함께 해봐요 6-35] 이상 스코어 계산7장 자연어 데이터의 전처리
1 데이터 이해
2 기계학습을 위한 데이터 준비
3 딥러닝을 위한 데이터 준비
4 주제 추출을 위한 데이터 준비
컬럼 | 보충지식 1 한글 형태소 분석 환경의 설정
컬럼 | 보충지식 2 2-gram 에지 리스트
[함께 해봐요 7-1] 업로드한 기사를 대상으로 하는 형태소 분석 [함께 해봐요 7-2] konlpy 설치 (1) [함께 해봐요 7-3] Okt를 통한 형태소 분석 [함께 해봐요 7-4] 정규표현식을 사용한 URL 제거 [함께 해봐요 7-5] 명사인 단어 추출 [함께 해봐요 7-6] konlpy 설치 (2) [함께 해봐요 7-7] 모든 기사에 대한 형태소 분석 작업 진행 [함께 해봐요 7-8] docterm에 저장한 단어 확인 [함께 해봐요 7-9] 첫 번째 기사의 단어 추출 [함께 해봐요 7-10] label에 저장된 기사 인덱스 확인 [함께 해봐요 7-11] 단어 문서 행렬 작성 [함께 해봐요 7-12] 작성한 단어 문서 행렬의 크기 확인 [함께 해봐요 7-13] 고빈도어와 저빈도어 삭제 [함께 해봐요 7-14] TF-IDF치를 계산한 단어 문서 행렬 작성 [함께 해봐요 7-15] 단어 문서 행렬의 크기 확인 [함께 해봐요 7-16] konlpy 설치 (3) [함께 해봐요 7-17] 전체 기사에 대한 처리 실행 [함께 해봐요 7-18] 작성한 데이터 세트 크기와 값 확인 [함께 해봐요 7-19] 내림순으로 단어 정렬 [함께 해봐요 7-20] 일련번호를 부여한 사전 작성 [함께 해봐요 7-21] 리스트 길이 정리 [함께 해봐요 7-22] 부족한 패키지 설치 [함께 해봐요 7-23] 부족한 패키지 실행 (1) [함께 해봐요 7-24] 부족한 패키지 실행 (2) [함께 해봐요 7-25] 단어 문서 행렬과 label열 결합 [함께 해봐요 7-26] label이 0인 문서의 유사도 계산 [함께 해봐요 7-27] 행렬 형식에서 리스트 형식으로 변환 [함께 해봐요 7-28] 동시 출현어 에지 리스트 작성 [함께 해봐요 7-29] 문장에서 2-gram 모델 작성 [함께 해봐요 7-30] 기사 데이터에서 2-gram 모델 작성 [함께 해봐요 7-31] 단어에 ID 부여 (1) [함께 해봐요 7-32] 단어에 ID 부여 (2) [함께 해봐요 7-33] 띄어쓰기한 단어에 ID 부여 [함께 해봐요 7-34] 2-gram 모델 작성 [함께 해봐요 7-35] 리스트 bigram에 저장부록
1 주피터랩 로컬 환경 구축
2 이미지 인식 모델 작성
3 기사 분류 모델 작성
4 기사 주제 추출
5 다양한 시각화 툴
[함께 해봐요 A1-1] 주피터랩의 홈 디렉토리 변경 [함께 해봐요 A1-2] 변경 전 소스코드 [함께 해봐요 A1-3] 변경 후 소스코드 [함께 해봐요 A2-1] 학습에 사용하는 네트워크 작성 [함께 해봐요 A2-2] 학습 조건 설정 및 학습 실행 [함께 해봐요 A2-3] 오차 이력 그래프 작성 (1) [함께 해봐요 A2-4] 정확도 이력 그래프 작성 (1) [함께 해봐요 A2-5] 학습에 사용하는 네트워크 작성 [함께 해봐요 A2-6] 학습 조건 설정 및 학습 실행 [함께 해봐요 A2-7] 오차 이력 그래프 작성 (2) [함께 해봐요 A2-8] 정확도 이력 그래프 작성 (2) [함께 해봐요 A3-1] 명사인 단어만 추출한 데이터 세트 작성 [함께 해봐요 A3-2] [함께 해봐요 7-21] 수정 및 추가 (1) [함께 해봐요 A3-3] [함께 해봐요 7-21] 수정 및 추가 (2) [함께 해봐요 A3-4] 학습 조건 설정 및 실행 [함께 해봐요 A3-5] 오차 이력 그래프 작성 (3) [함께 해봐요 A3-6] 정확도 이력 그래프 작성 (3) [함께 해봐요 A4-1] 코드 추가 및 실행 [함께 해봐요 A4-2] 네트워크 그래프 작성 [함께 해봐요 A4-3] 작성한 네트워크에 대한 클러스트 계수와 매개 중심성 계산 [함께 해봐요 A4-4] 커뮤니티 추출 [함께 해봐요 A5-1] 워드 클라우드 설치 [함께 해봐요 A5-2] [함께 해봐요 A3-1] 수정 및 실행 [함께 해봐요 A5-3] 5회 이상 출현 단어 추출3장_연습문제 해답 289
5장_연습문제 해답 298
6장_연습문제 해답 306
7장_연습문제 해답 313
찾아보기
출판사 서평
ML Studio(클래식)에 대한 데이터 준비 – Azure Architecture Center
목차
향상된 기계 학습을 위한 데이터 준비
아티클
08/10/2022
읽는 데 13분 걸림
기여자 6명
이 문서의 내용
데이터 전처리 및 정리는 모델 학습에 데이터 세트를 사용할 수 있기 전에 수행해야 하는 중요한 작업입니다. 원시 데이터는 노이즈가 많고, 불안정하고, 값이 누락된 경우가 종종 있습니다. 이러한 데이터를 모델링에 사용하면 결과가 잘못될 수 있습니다. 이러한 작업은 TDSP(팀 데이터 과학 프로세스)의 일부이며 일반적으로 필요한 전처리를 검색하고 계획하는 데 사용되는 데이터 세트의 초기 탐색을 수행합니다. TDSP 프로세스에 대한 자세한 지침은 팀 데이터 과학 프로세스에 설명된 단계를 참조하세요.
데이터 검색 작업 등의 전처리 및 정리 작업은 데이터가 저장된 위치와 포맷 방식에 따라 R 또는 Python 등의 다양한 도구 및 언어와 함께 SQL, Hive 또는 Azure Machine Learning 스튜디오(클래식)와 같은 다양한 환경에서 수행할 수 있습니다. TDSP는 반복 성향을 띠기 때문에, 이러한 작업은 프로세스의 워크플로 내의 다양한 단계에서 발생할 수 있습니다.
이 문서에서는 Azure Machine Learning 스튜디오(클래식)에 데이터를 수집하기 전후에 수행할 수 있는 다양한 데이터 처리 개념과 작업을 소개합니다.
Azure Machine Learning 스튜디오(클래식) 내부에서 수행된 데이터 검색 및 전처리의 예제는 데이터 전처리 비디오를 참조하세요.
데이터 전처리 및 정리가 필요한 이유
실제 데이터는 다양한 소스 및 프로세스에서 수집되며 데이터 세트의 품질을 떨어트리는 이상값 또는 손상된 값이 포함될 수 있습니다. 다음과 같은 일반적인 데이터 품질 문제가 자주 발생합니다.
불완전 : 데이터에 특성이 없거나 값이 누락되었습니다.
: 데이터에 특성이 없거나 값이 누락되었습니다. 노이즈가 많은 : 데이터에 잘못된 레코드 또는 이상값이 있습니다.
: 데이터에 잘못된 레코드 또는 이상값이 있습니다. 불일치: 데이터에 충돌하는 레코드 또는 일치하지 않는 값이 있습니다.
우수한 예측 모델을 구축하려면 우수한 데이터가 필요합니다. “쓰레기를 넣고 쓰레기를 얻는 현상”을 방지하고 데이터 품질을 높여서 궁극적으로 모델 성능을 높이려면 데이터 상태 검사를 수행하여 조기에 데이터 문제를 발견하고 적절한 데이터 처리 및 정리 단계를 결정하는 것이 중요합니다.
가장 일반적으로 사용되는 데이터 상태 검사 방법으로 어떤 것이 있습니까?
다음을 검사하여 데이터의 전체적인 품질을 확인할 수 있습니다.
레코드 수.
수. 특성 (또는 기능 ) 수.
(또는 ) 수. 특성 데이터 유형 (명목, 서수 또는 연속).
(명목, 서수 또는 연속). 누락된 값 의 수.
의 수. 잘 구성된(Well-Formed) 데이터. 데이터가 TSV 또는 CSV로 되어 있으면 열 구분 기호 및 줄 구분 기호가 열과 줄을 항상 올바르게 구분하는지 확인합니다. 데이터가 HTML 또는 XML 형식이면 해당 표준에 따라 올바르게 구성되었는지 확인합니다. 또한 반 구조적 데이터 또는 구조화되지 않은 데이터에서 구조적 정보를 추출하려면 구문 분석이 필요할 수 있습니다.
데이터. 일관되지 않은 데이터 레코드. 값의 범위가 허용되는지 확인하세요. 예를 들어, 데이터에 학생 GPA(Grade Point Average)가 포함되어 있으면 GPA가 지정된 범위(예: 0~4) 내에 있는지 확인합니다.
데이터 문제를 찾으면 처리 단계가 필요합니다. 처리 단계에서는 누락된 값 정리, 데이터 정규화, 분할, 텍스트 처리를 통해 데이터 정렬, 일반 필드의 혼합된 데이터 형식 등에 영향을 미칠 수 있는 포함된 문자를 제거 및/또는 대체하는 작업이 수행됩니다.
Azure Machine Learning에서는 올바르게 구성된 테이블 형식 데이터를 사용합니다. 데이터가 이미 테이블 형식이면 Machine Learning에서 Azure Machine Learning 스튜디오(클래식)를 사용하여 바로 데이터 전처리를 수행할 수 있습니다. 데이터가 테이블 형식이 아닌 XML 형식이라고 한다면 데이터를 테이블 형식으로 변환하려면 구분 분석이 필요할 수 있습니다.
데이터 전처리의 주요 작업
데이터 정리 : 누락된 값을 입력하고, 시끄러운 데이터와 이상값을 검색하고 제거합니다.
: 누락된 값을 입력하고, 시끄러운 데이터와 이상값을 검색하고 제거합니다. 데이터 변환 : 차원 및 노이즈를 줄이기 위해 데이터를 정규화합니다.
: 차원 및 노이즈를 줄이기 위해 데이터를 정규화합니다. 데이터 감소 : 데이터 처리를 용이하게 하는 샘플 데이터 레코드 또는 특성입니다.
: 데이터 처리를 용이하게 하는 샘플 데이터 레코드 또는 특성입니다. 데이터 불연속화 : 특정 기계 학습 방법에서 쉽게 사용할 수 있도록 연속 특성을 범주 특성으로 변환합니다.
: 특정 기계 학습 방법에서 쉽게 사용할 수 있도록 연속 특성을 범주 특성으로 변환합니다. 텍스트 정리: 탭으로 구분된 데이터 파일에 포함된 탭, 레코드 줄 바꿈 문제를 일으킬 수 있는 포함된 새 줄 등 데이터 정렬 문제를 일으킬 수 있는 포함된 문자를 제거합니다.
아래 섹션에서는 일부 데이터 처리 단계에 대해 자세히 설명합니다.
누락된 값을 처리하는 방법
누락된 값을 처리하려면 누락된 값이 문제 해결에 더 나은 이유를 먼저 확인하는 것이 좋습니다. 일반적인 누락 값 처리 방법은 다음과 같습니다.
삭제 : 값이 누락된 레코드를 제거합니다.
: 값이 누락된 레코드를 제거합니다. 더미 대체 : 누락된 값을 더미로 대체합니다. 예를 들어 범주 값은 알 수 없음, 숫자 값은 0으로 대체합니다.
: 누락된 값을 더미로 대체합니다. 예를 들어 범주 값은 알 수 없음, 숫자 값은 0으로 대체합니다. 평균 대체 : 누락된 값이 숫자이면 평균으로 대체합니다.
: 누락된 값이 숫자이면 평균으로 대체합니다. 빈도 대체 : 누락된 값이 범주이면 가장 빈도가 높은 항목으로 대체합니다.
: 누락된 값이 범주이면 가장 빈도가 높은 항목으로 대체합니다. 회귀 대체: 회귀 메서드를 사용하여 누락된 값을 회귀된 값으로 대체합니다.
데이터를 정규화하는 방법
데이터 정규화는 숫자 값을 지정된 범위로 다시 스케일링합니다. 일반적인 데이터 정규화 방법은 다음과 같습니다.
최소-최대 정규화 : 0과 1 사이에서 데이터를 선형적으로 범위로 변환합니다. 여기서 최소값은 0, 최대값은 1로 조정됩니다.
: 0과 1 사이에서 데이터를 선형적으로 범위로 변환합니다. 여기서 최소값은 0, 최대값은 1로 조정됩니다. Z 점수 정규화 : 평균 및 표준 편차를 기반으로 데이터 조정: 데이터와 평균의 차이를 표준 편차로 나눕니다.
: 평균 및 표준 편차를 기반으로 데이터 조정: 데이터와 평균의 차이를 표준 편차로 나눕니다. 소수점 배열: 특성 값의 소수점을 이동하여 데이터 크기를 조정합니다.
데이터를 분할하는 방법
연속 값을 명목 특성 또는 간격으로 변환하여 데이터를 분할할 수 있습니다. 다음은 이 작업을 수행하는 방법 중 일부입니다.
동일 너비 범주화 : 특성의 모든 가능한 값 범위를 크기가 같은 N개의 그룹으로 나누고 bin 번호를 사용하여 bin에 속하는 값을 할당합니다.
: 특성의 모든 가능한 값 범위를 크기가 같은 N개의 그룹으로 나누고 bin 번호를 사용하여 bin에 속하는 값을 할당합니다. 동일 높이 범주화: 특성의 모든 가능한 값 범위를 인스턴스 수가 같은 N개의 그룹으로 나누고 bin 번호를 사용하여 bin에 속하는 값을 할당합니다.
데이터를 줄이는 방법
데이터를 쉽게 처리할 수 있도록 데이터 크기를 줄이는 다양한 방법이 있습니다. 데이터 크기 및 도메인에 따라 다음 방법을 적용할 수 있습니다.
레코드 샘플링 : 데이터 레코드를 샘플링하고 데이터에서 대표적인 하위 집합만 선택합니다.
: 데이터 레코드를 샘플링하고 데이터에서 대표적인 하위 집합만 선택합니다. 특성 샘플링 : 데이터에서 가장 중요한 특성의 하위 집합만 선택합니다.
: 데이터에서 가장 중요한 특성의 하위 집합만 선택합니다. 집계: 데이터를 여러 그룹으로 나누고 각 그룹에 대한 숫자를 저장 합니다. 예를 들어 어떤 식당 체인의 지난 20년 간 일일 수익을 월별 수익으로 집계하면 데이터 크기를 줄일 수 있습니다.
텍스트 데이터를 정리하는 방법
표 형식 데이터의 텍스트 필드에 열 정렬 및/또는 레코드 경계에 영향을 미치는 문자가 포함될 수 있습니다. 예를 들어, 탭으로 구분된 파일에 포함된 탭은 열 정렬 문제를 일으킬 수 있고, 포함된 줄 바꿈 문자는 레코드 줄 바꿈 문제를 일으킬 수 있습니다. 텍스트를 쓰고 읽는 동안 텍스트 인코딩 처리가 잘못되면 정보가 손실되고, 읽을 수 없는 문자(예: null)가 의도치 않게 도입되며, 텍스트 구문 분석에 영향을 미칠 수도 있습니다. 데이터를 올바르게 정렬하고 구조화되지 않은 데이터 또는 반 구조적 데이터에서 구조적 데이터를 추출할 수 있도록 텍스트 필드를 정리하려면 신중한 구문 분석 및 편집 작업이 필요할 수 있습니다.
데이터 탐색을 통해 초기에 데이터를 살펴볼 수 있습니다. 이 단계에서 다양한 데이터 문제를 파악하고 그에 맞는 적절한 방법을 적용하여 이러한 문제를 해결할 수 있습니다. 문제의 원인이 무엇인지, 문제가 어떻게 시작되었는지 등의 질문에 대한 답을 고민해 보는 것이 중요합니다. 이 프로세스를 통해 문제 해결에 필요한 데이터 처리 단계를 결정할 수 있습니다. 최종 사용 사례 및 가상 사용자 식별을 사용하여 데이터 처리 작업의 우선 순위를 지정할 수도 있습니다.
참조
머신러닝 2_5 데이터 전처리(Preprocessing)
반응형
결손값 처리 (Null/ NaN 처리)
데이터 인코딩(레이블, 원-핫 인코딩) 머신러닝알고리즘은 문자열 데이터 속성을 입력값으로 받지않기 때문에 문자형이 아닌 숫자형으로 표현 되어야한다. 레이블인코딩 – 남, 여 → 1, 0 , 숫자값이기 때문에 의도하지 않아도 1이 더크다는 의미로 영향을 받는 알고리즘이 있을수있다. 따라서 회귀에는 적용하지말고 tree 계열 ML 알고리즘은 적용가능 , 이러한 문제점을 해결하기위해 나온것이 원핫 인코딩이다. 사이킷런의 LabelEncoder 클래스 , fit() 과 transform() 을 이용하여 변환 원핫(One-hot) 인코딩 -feature 값의 유형에 따라 새로운 피처를 추가 해서 고유값에 해당하는 컬럼에만 1을 표시 하고 나머지 컬럼에는 0 을 표시 하는 방식이다. -성별_남(남자일때 1) ,성별_여 (여자일때 1) 사이킷런의 OneHotEncoder 클래스 fit() 과 transform() 을 이용하여 숫자형으로 변환 – 인자로 이차원ndarray 입력 필요, Sparse 배열 형태로 변환되며 toarray() 를 적용하여 다시 Dense 형태로 변환 되어야함. pd.get_dummies(DataFrame) 을 이용 하면 쉽게 원핫 인코딩 가능 – 확인
데이터 스케일링
이상치 제거
Feature 선택 , 추출 및 가공
데이터인코딩
1. 레이블인코딩
2. 원-핫인코딩 (One-Hot encoding)
피처 스케일링과 정규화
데이터 스케일(Scale) : 변수를 구성하는 값 들의 크기 , 규모, 범위를 의미
feacure scaling : 서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작업
Feature Scaling을 하는 이유는?
변수 값의 범위 또는 단위가 달라서 발생 가능한 문제를 예방할 수 있다. 머신러닝 모델이 특정 데이터의 편향성을 갖는 걸 방지할 수 있다. 즉 데이터 범위 크기에 따라 모델이 학습하는 데 있어서 bias(편향)가 달라질 수 있으므로 하나의 범위 크기로 통일해주는 작업이 필요할 수 있다.
Feature Scaling 종류
표준화- 데이터의 피처 각각이 평균이 0 이고 분산이 1인 가우시안 정규분포를 가진 값으로 변환하는 것을 의미 (데이터분포의 중심을 0으로)
정규화- 서로 다른 피처의 크기를 통일하기 위해 크기를 변환해주는 개념, 일반적으로 이상치 제거후 정규화
사이킷 런에서
StandardScaler: Sklrean(사이킷런)에서 제공하는 표준화를 위한 클래스이며, 개별 변수를 평균이 0이고 분산이 1인 가우시안 정규 분포를 가질 수 있도록 값을 변환해준다. StandardScaler 사용 시 주의할 점 Scaler에 의해 변환된 데이터는 ndarray 형식이므로 데이터 관리의 용이성을 위해 DataFrame 형식으로의 명시적 변환이 필요할 수 있다. 변수의 최소값과 최대값 크기를 제한하지 않음 ,
따라서 이상값(outlier) 있는 경우 평균과 표준편차에 영향을 미치기 때문에 데이터 분포 (확산)에 영향을 미침.
MinMaxScaler: 데이터값을 0과 1사이의 범위값으로 변환(음수값이 있으면 -1 에서 1값으로 변환) , 데이터 분포가 가우시안분포가 아닐경우 적용
선형, 회기는 스케일링 해주는것이 좋고 tree 분류는 스케일링에 크게 영향을 받지 않는다.
머신러닝 모델은 학습 데이터를 기반으로 학습되기 때문에 반드시 테스트 데이터는 학습데이터 스케일링 기반에 따라야 하고 테스트 데이터 에 다시 fit() 을 적용하면안되고 scaler 객체를 이용해 transform() 을 적용해야한다.
Scaler를 사용하는 이유:
데이터가 가진 크기과 편차가 다르기 때문에 한 피처의 특징을 너무 많이 반영하거나 패턴을 찾아내는데 문제가 발생하기 때문이다
StandardScaler
MinMaxScaler
반응형
키워드에 대한 정보 머신 러닝 데이터 전처리
다음은 Bing에서 머신 러닝 데이터 전처리 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 [14] 머신러닝, 데이터 준비 방법 – 데이터 제공 사이트, 전처리 방법
- 머신러닝
- 데이터
- 준비하기
- 친절한AI
- 인공지능
- Artificial Intelligence
- Machine Learning
- Data
- Preprocessing
- 데이터 전처리
YouTube에서 머신 러닝 데이터 전처리 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 [14] 머신러닝, 데이터 준비 방법 – 데이터 제공 사이트, 전처리 방법 | 머신 러닝 데이터 전처리, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.