목숨건데이터엔지니어
foot-data-engineering
목숨건데이터엔지니어
전체 방문자
오늘
어제
  • 분류 전체보기 (54)
    • 취업과 기본기 잡기 (11)
      • Python (2)
      • 자료구조 (1)
      • 알고리즘 (1)
      • 운영체제 (2)
      • 네크워크 (1)
      • 데이터베이스 (1)
      • SQL (1)
      • Linux (1)
      • Docker (1)
    • 더 나은 엔지니어가 되기위해 (11)
      • (AWS) api-gateway, kinesis (1)
      • (AWS) MWAA (1)
      • Apache Spark (1)
      • Apache Airflow (1)
      • Apache Kafka (1)
      • Apache Flink (1)
      • Hadoop (1)
      • 알쓸신잡 (4)
    • 데이터와 손잡기 (6)
      • 머신러닝(sklearn) (1)
      • 딥러닝 (3)
      • 오디오 처리 (1)
      • 데이터 시각화 (1)
    • 코딩테스트 잡기 (1)
      • [BOJ] 문제풀이 (0)
      • [프로그래머스] 문제풀이 (0)
      • [HackerRank] SQL (0)
      • 코딩테스트 후기 (1)
    • 토이 프로젝트 (4)
    • 각종 기술 삽질하며 익히기 - onpremise (11)
    • 학습과정 잡동사니 (7)
      • 오답노트 (7)
    • 평소 궁금증 파헤치기 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 아직 한참 부족하고 부끄러운 나의 github 링크

인기 글

태그

  • spark to mysql
  • 쓰레드와 프로세스
  • 도커파일
  • Tableau
  • Elk
  • 네트워크 스위치
  • 파이썬
  • #데이터 수집 절차
  • 서비쿼리
  • scikit-learn
  • spark with elasticsearch
  • logstash
  • aws builders online series
  • django
  • flink
  • filebeat
  • Kinesis
  • spark on centos7
  • spark
  • CTAS
  • MWAA
  • Api-Gateway
  • ES
  • 프로세스
  • kafka
  • EMR
  • jupyter
  • 멀티 프로그래밍
  • LIVY
  • #데이터수집

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
목숨건데이터엔지니어

foot-data-engineering

머신러닝
데이터와 손잡기/머신러닝(sklearn)

머신러닝

2022. 4. 2. 22:00

머신러닝(Machine Learning)

  • 명시적인 프로그래밍 없이 컴퓨터가 학습하는 능력을 갖추게 하는 연구 분야
  • 머신러닝은 데이터를 통해 다양한 패턴을 감지하고, 스스로 학습할 수 있는 모델 개발에 초점

지도학습(Supervised Learning)

  • 지도 학습은 주어진 입력으로 부터 출력 값을 예측하고자 할 때 사용
  • 입력과 정답 데이터를 사용해 모델을 학습 시킨 후 새로운 입력 데이터에 대해 정확한 출력을 예측하도록 하는 것이 목표
  • 지도 학습 알고리즘의 학습 데이터를 만드는 것은 많은 사람들의 노력과 자원이 필요하지만 높은 성능을 기대할 수 있음

분류와 회귀

  • 지도 학습 알고리즘은 크게 분류(classification)와 회귀(regression)로 구분
  • 분류는 입력 데이터를 미리 정의된 여러개의 ㅋㄹ래스 중 하나로 예측하는 것
  • 분류는 클래스의 개수가 2개인 이진분류(binary classification)와 3개 이상의 다중분류(multi-class classification)로 나눌 수 있음
  • 회귀는 연속적인 숫자를 예측하는 것으로 어떤 사람의 나이, 농작물의 수확량, 주식 가격 등 출력 값이 연속성을 갖는 다면 회귀 문제라고 할 수 있음

지도 학습 알고리즘

  • 선형 회귀(Linear Regression)
  • 로지스틱 회귀(Logistic Regression)
  • 서포트 벡터 머신(Support Vector Machine)
  • k-최근접 이웃(k-Nearest Neighbors)
  • 결정 트리(Decision Tree)
  • 앙상블(Ensemble)
  • 신경망(Neural Networks)

비지도 학습(Unsupervised Learning)

  • 비지도 학습은 원하는 출력 없이 입력 데이터 사용
  • 입력 데이터의 구조나 패턴을 찾는 것이 목표
  • 미리 정해진 결과가 없고, 방대한 양의 데이터에서 유용한 통찰력을 얻을 수 있음

클러스터링, 차원축소, 연관규칙

  • 비지도 학습 알고리즘은 크게 클러스터링(Clustering), 차원 축소(Dimensionality Reduction), 연관 규칙(Association Rules)으로 구분
  • 클러스터링은 공간상에서 서로 가깝고 유사한 데이터를 클러스터로 그룹화
  • 차원 축소는 고차원의 데이터에 대해서 너무 많은 정보를 잃지 않으면서 데이터를 축소시키는 방법
  • 연관 규칙은 데이터에서 특성 간의 연관성이 있는 흥미로운 규칙을 찾는 방법

 

비지도 학습 알고리즘

  • 클러스터링(Clustering)
    • k-Means
    • DBSCAN
    • 계층 군집 분석(Hierarchical Cluster Analysis)
    • 이상치 탐지(Outlier Detection), 특이값 탐지(Novelty, Detection)
  • 차원축소(Dimensionality Reduction)
    • 주성분 분석(Principal Component Analysis)
    • 커널 PCA(Kernel PCA)
    • t-SNE(t-Distributed Stochastic Neighbor Embedding)
  • 연관 규칙(Association Rule Learning)
    • Apriori
    • Eclat

준지도 학습(Semi-supervised Learning)

  • 레이블이 있는 것과 없는 것이 혼합된 경우 사용
  • 일반적으로는 일부 데이터에만 레이블이 있음
  • 준지도 학습 알고리즘은 대부분 지도 학습 알고리즘과 비지도 학습 알고리즘의 조합으로 구성

강화학습(Reinforcement Learning)

  • 동적 환경과 함께 상호 작용하는 피드백 기반 학습 방법
  • 에이전트(Agent)가 환경을 관찰하고, 행동을 실행하고, 보상(reward) 또는 별점(penality)를 받음
  • 에이전트는 이러한 피드백을 통해 자동으로 학습하고 성능을 향상시킴
  • 어떤 지도가 없이 일정한 목표를 수행

온라인 vs 배치

  • 온라인 학습(Online Learning)
    • 적은 데이터를 사용해 미니배치(mini-batch) 단위로 점진적으로 학습
    • 실시간 시스템이나 메모리 부족의 경우 사용
  • 배치 학습(Batch Learning)
    • 전체 데이터를 모두 사용해 오프라인에서 학습
    • 컴퓨팅 자원이 풍부한 경우 사용

사례 기반 vs 모델 기반

  • 사례 기반 학습(Instance-based Learning)
    • 훈련 데이터를 학습을 통해 기억
    • 예측을 위해 데이터 사이의 유사도 측정
    • 새로운 데이터와 학습된 데이터를 비교
  • 모델 기반 학습(Model-based Learning)
    • 훈련 데이터를 사용해 모델을 훈련
    • 훈련된 모델을 사용해 새로운 데이터를 예측

일반화, 과대적합, 과소적합

 

일반화(generalization)

  • 일반적으로 지도 학습 모델은 학습 데이터로 훈련 시킨 뒤 평가 데이터에서도 정확하게 예측하기를 기대함
  • 훈련된 모델이 처음보는 데이터에 대해 정확하게 예측한다면, 이러한 상태를 모델이 일반화 되었다고 함
  • 모델이 항상 일반화 되는 것은 아님

과대적합

  • 주어진 훈련 데이터에 비해 복잡한 모델을 사용한다면, 모델은 훈련 데이터에서만 정확한 성능을 보이고, 평가 데이터에서는 낮은 성능을 보임
  • 즉, 모델이 주어진 훈련 데이터는 잘 예측하지만 일반적인 특징을 학습하지 못해 평가 데이터에서는 낮은 성능을 보이는 상태를 과대적합(Overfitting)이라 함

과소적합

  • 과대적합과 반대로 주어진 훈련 데이터에 비해 너무 간단한 모델을 사용하면, 모델이 데이터에 존재하는 다양한 정보들을 제대로 학습하지 못함
  • 이러한 경우 모델은 훈련 데이터에서도 나쁜 성능을 보이고 평가 데이터에서도 낮은 성능을 보이는 과소적합되었다고 함

 

모델 복잡도와 데이터셋 크기의 관계

  • 데이터의 다양성이 클수록 더 복잡한 모델을 사용하면 좋은 성능을 얻을 수 있음
  • 일반적으로 더 큰 데이터셋(데이터 수, 특징 수)일수록 다양성이 높기 때문에 더 복잡한 모델을 사용할 수 있음
  • 하지만, 같은 데이터를 중복하거나 비슷한 데이터를 모으는 것은 다양성 증가에 도움이 되지 않음
  • 데이터를 더 많이 수집하고 적절한 모델을 만들어 사용하면 지도 학습을 사용해 놀라운 결과를 얻을 수 있음

훈련 세트 vs 테스트 세트 vs 검증 세트

  • 머신러닝 모델의 일반화 성능을 측정하기 위해 훈련세트 , 테스트 세트로 구분
  • 훈련 세트로 모델을 학습하고 테스트 세트로 모델의 일반화 성능 측정
  • 하이퍼파라미터는 알고리즘을 조절하기 위해 사전에 정의하는 파라미터
  • 테스트 세트를 이용해 여러 모델을 평가하면 테스트 세트에 과대적합됨
  • 모델 선택을 위해 훈련세트, 테스트 세트, 검증 세트로 구분

 

 

scikit-learn 특징

  • 다양한 머신러닝 알고리즘을 구현한 파이썬 라이브러리
  • 심플하고 일관성 있는 API, 유용한 온라인 문서, 풍부한 예제
  • 머신러닝을 위한 쉽고 효율적인 개발 라이브러리 제공
  • 다양한 머신러닝 관련 알고리즘과 개발을 위한 프레임워크와 API 제공
  • 많은 사람들이 사용하며 다양한 환경에서 검증된 라이브러리

scikit-learn 주요 모듈

sklearn.datasets 내장된 예제 데이터 세트
sklearn.preprocessing 다양한 데이터 전처리 기능 제공 (변환, 정규화, 스케일링 등)
sklearn.feature_selection 특징(feature)를 선택할 수 있는 기능 제공
sklearn.feature_extraction 특징(feature) 추출에 사용
sklearn.decomposition 차원 축소 관련 알고리즘 지원 (PCA, NMF, Truncated SVD 등)
sklearn.model_selection 교차 검증을 위해 데이터를 학습/테스트용으로 분리, 최적 파라미터를 추출하는 API 제공 (GridSearch 등)
sklearn.metrics 분류, 회귀, 클러스터링, Pairwise에 대한 다양한 성능 측정 방법 제공 (Accuracy, Precision, Recall, ROC-AUC, RMSE 등)
sklearn.pipeline 특징 처리 등의 변환과 ML 알고리즘 학습, 예측 등을 묶어서 실행할 수 있는 유틸리티 제공
sklearn.linear_model 선형 회귀, 릿지(Ridge), 라쏘(Lasso), 로지스틱 회귀 등 회귀 관련 알고리즘과 SGD(Stochastic Gradient Descent) 알고리즘 제공
sklearn.svm 서포트 벡터 머신 알고리즘 제공
sklearn.neighbors 최근접 이웃 알고리즘 제공 (k-NN 등)
sklearn.naive_bayes 나이브 베이즈 알고리즘 제공 (가우시안 NB, 다항 분포 NB 등)
sklearn.tree 의사 결정 트리 알고리즘 제공
sklearn.ensemble 앙상블 알고리즘 제공 (Random Forest, AdaBoost, GradientBoost 등)
sklearn.cluster 비지도 클러스터링 알고리즘 제공 (k-Means, 계층형 클러스터링, DBSCAN 등)

 

estimator API

  • 일관성: 모든 객체는 일관된 문서를 갖춘 제한된 메서드 집합에서 비롯된 공통 인터페이스 공유
  • 검사(inspection): 모든 지정된 파라미터 값은 공개 속성으로 노출
  • 제한된 객체 계층 구조
    • 알고리즘만 파이썬 클래스에 의해 표현
    • 데이터 세트는 표준 포맷(NumPy 배열, Pandas DataFrame, Scipy 희소 행렬)으로 표현
    • 매개변수명은 표준 파이썬 문자열 사용
  • 구성: 많은 머신러닝 작업은 기본 알고리즘의 시퀀스로 나타낼 수 있으며, Scikit-Learn은 가능한 곳이라면 어디서든 이 방식을 사용
  • 합리적인 기본값: 모델이 사용자 지정 파라미터를 필요로 할 때 라이브러리가 적절한 기본값을 정의
 

API 사용 방법

  1. Scikit-Learn으로부터 적절한 estimator 클래스를 임포트해서 모델의 클래스 선택
  2. 클래스를 원하는 값으로 인스턴스화해서 모델의 하이퍼파라미터 선택
  3. 데이터를 특징 배열과 대상 벡터로 배치
  4. 모델 인스턴스의 fit() 메서드를 호출해 모델을 데이터에 적합
  5. 모델을 새 데이터에 대해서 적용
    • 지도 학습: 대체로 predict() 메서드를 사용해 알려지지 않은 데이터에 대한 레이블 예측
    • 비지도 학습: 대체로 transform()이나 predict() 메서드를 사용해 데이터의 속성을 변환하거나 추론

 

실사용 코드

  • 내용이 방대해서 파일로 정리
  • +아래 코드 틀을 기본으로 
    • 선형모델
    • 로지스틱 회귀
    • 서포트 벡터 머신
    • 최근접 이웃
    • 나이브 베이즈 분류
    • 결정 트리
    • 앙상블
    • XGBosost, LightGBM
    • 군집화
    • 다양체 학습
    • 분해
    • 추천 시스템 등을 API 사용법만 알면 바로 적용 및 하이퍼 파라미터 최적화 가능

https://colab.research.google.com/drive/1woBGsdfWtzq_KQ6CuaPy5o3LRKIMiZiM?usp=sharing

 

_2사이킷런(scikit-learn) .ipynb

Colaboratory notebook

colab.research.google.com

 

 

참고문헌

  • scikit-learn 사이트: https://scikit-learn.org/
  • Aurelien Geron, "Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems", O'Reilly

 

    목숨건데이터엔지니어
    목숨건데이터엔지니어

    티스토리툴바