728x90
Basics of Cloud Storage

Basics of Cloud Storage

  • 클라우드 저장소 : 클라우드 상에 데이터와 파일을 저장
    • 컴퓨팅 노드를 통해 접근하거나, 인터넷을 통해 직접적으로 접근할 수도 있음
  • 클라우드 저장소의 종류
    • Direct Attached(Local Storage)
      • 서버 랙에 호스트와 함께 할당
      • 서버 OS를 위해 사용
      • 연산을 위한 '임시' 저장소 역할이므로 클라우드 저장소로는 부적합
    • File Storage(NFS storage)
      • 네트워크를 통해 연산 노드와 연결
      • direct-attach 대비 느린 속도
      • direct / block 저장소 대비 낮은 가격
      • 다수의 서버에 동시에 연결 가능
      • 데스크톱 유저에게 익숙한 구조
    • Block Storage
      • R/W 속도가 빠르고, 높은 신뢰성을 갖기 때문에 DB나 빠른 속도가 중요한 어플리케이션에 유용
      • Volume : Block storage의 처리 단위로 연산 노드에 연결되는 최소 단위 - HDD와 유사하게 동작
      • 한번에 연산 노드와 볼륨은 1:1로만 연결 가능
      • IOPS (Input/Output Operations Per Second) : 저장소의 속도
      • Persistent : 연산 노드가 사라져도 Volume은 남아있는 상태
        • 이후 Volume이 사라질 경우, 데이터가 손실될 수 있음
        • snapshot을 통해 데이터를 백업
    • Object Storage
      • API를 통해 접근
      • 가장 저렴하지만, 가장 느림
      • 용량 제한이 없음
      • 구조화되지 않은 데이터를 저장할 때 좋음

File Storage

  • 접근 및 저장 전에 연산 노드와 연결되어야 함
  • Direct attach 대비 저렴하고, 신뢰성이 높으며 사용자가 관리할 필요가 적어지며, 서버 디스크보다 많은 용량을 할당 가능
  • 실제 디스크를 일정 단위로 분리 후 할당
  • File Storage는 인터넷을 통해 연결
    • Network Attached Storage = Network File Storage(NFS)
    • 트래픽에 따라 속도가 변화하므로 일정 속도를 보장하지 못할 수 있음
  • File Storage는 하나 이상의 연산 노드와 연결될 수 있음
    • 파일 공유, 입력되는 파일 저장(Landing Zone) 등 속도 영향을 덜 받는 경우 사용
  • IOPS
    • 초당 I/O 동작의 수 (네트워크 속도나 연산 속도와는 다름)
    • 높은 IOPS = 디스크 속도가 빠름 = 비용이 높음
    • 낮은 IOPS는 병목 현상을 일으킬 수 있음

Block Storage

  • 파일을 chunk(block)으로 분할하여 각각의 주소를 할당하여 관리
  • File Storage와 유사하게 사용 전에 연산 노드에 연결해야 함
  • 높은 신뢰성과 보안성
  • 광케이블에 연결되므로 일정하게 빠른 속도를 갖기 때문에 저지연성 작업(DB, 메일)에 유리
  • 연산 노드간 공유 저장소로는 부적합
  • 필요에 따라 IOPS를 수정할 수 있음
  • Block / File Storage의 공통점
    • 서비스 제공자에 의해 유지보수
    • 높은 가용성, 신뢰성
    • 데이터 암호화 제공
  • File Storage는 이더넷에 연결되지만, Block Storage는 광케이블로 연결되므로 Block쪽이 훨씬 빠르고, 일정 속도를 보장
  • File Storage는 다수 노드에 연결 가능하며, 파일 공유가 가능하나, Block Storage는 단일 노드에만 연결 가능하며 빠른 연결이 지속적으로 필요한 경우 사용

Object Storage Overview

  • Object Storage는 특정 노드에 연결되지 않고, API를 통해 접근(up/download)
  • 다른 저장소 대비 저렴하게 제공
  • 거의 무한한 저장소 제공, 사용한 만큼만 지불 가능
  • 구조화되지 않은 (= 폴더 단위로 저장되지 않는) 데이터를 저장할때 유용
    • Bucket이라는 파일 단위를 사용하여 서로 다른 데이터를 저장(이때 Bucket 내에 Bucket을 저장할 수는 없음)
    • Bucket에는 metadata가 설정되어 접근을 위해 활용됨
    • Bucket 생성 시 크기를 정의할 필요가 없음
    • Bucket을 저장 방식의 설정
      • 동일 region 내 설정 : 높은 가용성
      • 여러 region 에 분할 : 높은 신뢰성
  • Using Case
    • text, audio, video
    • IoT data
    • VM Image
    • Backups
  • OS, DB 등 변화가 잦은 경우에는 부적합

Object Storage - Tiers and APIs

  • Bucket 내에는 Tier와 Class가 존재
  • Tier : 데이터 접근 빈도
    • standard : 주기적 접근, 높은 가격
    • vault, archive : 문서 혹은 월에 한두번만 접근할 파일들 - 상대적으로 낮은 가격
    • Cold Vault : 연에 한두번만 접근할 파일들, GB단위가 월에 cent단위일 만큼 저렴
    • automatc archiving rule : 파일 접근 빈도에 따라 자동으로 티어 조정
    • Tier는 IOPS와는 다름
  • 가장 흔한 Object Storage는 S3 API로, AWS S3 object storage에 기반
    • 많은 공급자들이 S3에 호환되도록 API를 구성

Content Delivery Networks

  • 임시 파일, 캐시 파일, 웹 데이터 등을 전달하는 분산 서버 네트워크
  • 한 리전 내의 웹에 접근할 때, 멀리 떨어진 사용자는 그만큼 응답 시간이 느려지게 됨
    • 각 리전에 CDN을 배치하여 유저 데이터 등을 저장
    • 리전 근처의의 사용자 요청 시 CDN 데이터를 전달
    • 접근 속도를 높이고, 중앙 트래픽은 낮춤
728x90
728x90
Overview of Cloud Infrastructure

Overview of Cloud Infrastructure

  • 클라우드 모델을 선택 후, Infrasturcture 구조를 결정하여야 함
  • Region : Infrasturcture가 구성되어 있는 지역 (East, US 등등)
    • 한 region에 손상을 받아도 다른 region은 계속 동작
  • Zone : 한 region 내에 존재하는 Data Center 구역
    • DAL-09 / US-east-01 등으로 명명
    • Zone의 분리는 fault 위험을 낮추고, 지연을 감소시킬 수 있음
  • Computing Resource
    • Virtual Server(VM) : 가상화된 소프트웨어 기반의 서버
    • Bare metal servers : 가상화되지 않은 물리적 서버
    • Serverless : 가상 머신의 추상화된 계층
  • Storage
    • 데이터의 중요도, 접근 빈도, 접근 속도, 보안 정도에 따라 결정
    • Block Storage
    • File Storage
    • Object Storage
  • Networking : 라우터, 스위치, SDN(Software Defined Networking)
    • Interface : 서버와 공개된 네트워크상의 연결 여부 - public / private
    • 네트워크 접근 제어 : VPC, VLAN, VPN
    • HW적 제어 : 방화벽, 게이트웨이, 로드밸런서 등

Virtualization and Virtual Machines Explained

  • 가상화 : 소프트웨어 기반으로 가상의 컴퓨터 / 저장소 / 네트워크 등을 만드는 것
  • Hypervisor : 가상화의 핵심
    • 물리적인 서버 위에서 동작하여 가상 환경에 컴퓨터 자원을 할당
    • Type 1 - Baremetal Hypervisor
      • 가장 대표적인 hypervisor 유형
      • VMware, Hyper-v 등
    • Type 2 - Hosted Hypervisor
      • 물리 - Hypervisor 사이에 host OS 계층이 존재
      • Virtualbox 등
  • Virtual Machine : 소프트웨어 기반으로실제 컴퓨터처럼 동작 (OS, 어플리케이션 등을 동작)
    • Host에 대해 독립성을 갖기 때문에 hypervisor 간에 유연한 이동이 가능
  • VM의 장점
    • 비용 절감 : 한 인프라 내에서 여러 VM을 돌릴 수 있다 = 실제 서버에 대한 유지 보수가 절감(전기세 등)
    • Agility : VM 구성은 매우 빠르고 쉽게 할 수 있음
    • 시간 절약 : 다른 Host로 빠르게 VM을 이동할 수 있다 = 백업이 간편하다

Types of Virtual Machines

  • 가상 머신을 구성할 때의 고려할 점
    • 가상 머신의 위치 : Region, Zone
    • OS : Unix, Linux, Window, ...
    • shared(Multi - tenant) / dedicated (Single - tenant)
    • 과금 체계 : hourly or monthly
  • shared(public) cloud : multi-tenant 구조, 정해진 크기 내에서 수요에 따라 정의
    • multi-tenant : 서버를 가상화하여 다른 사용자와 공유하여 사용
  • transient(spot) VM : 데이터센터의 사용하지 않는 용량을 활용
    • 비슷한 VM 대비 저렴한 가격으로 공급하나, 경우에 따라 할당이 취소(de-provision)되거나 더 높은 가격으로 책정될 수 있음
    • 테스트 / 개발용으로 활용
  • reserved virtual server instance
    • 일정 용량 혹은 자원을 보장
    • 장기간 예약할수록 저렴하게 사용 가능
  • Dedicated Host
    • Single-tenant : 특정 Host 자원을 독점하여 사용

Bare Metal Servers

  • Single-tenant / dedicated 서버, 단일 고객을 위해 할당
  • 공급자는 하드웨어를 관리하고, 그 외의 부분은 고객이 설정
    • 공급자에 의해 사전에 설정되거나, 고객이 원하는대로 맞출 수도 있음
  • Virtual Server 대비 프로비전까지의 시간이 오래 걸림
  • 단일 고객에게 할당되므로 VM 대비 고가
  • Hypervisor가 필요 없기 때문에 독립된 환경에서 사용 가능하며, 하드웨어에 대한 높은 접근성을 제공

Secure Networking in Cloud

  • 클라우드 환경 구축 사례가 많아지면서 보안에 대한 필요성 역시 그에 따라 높아짐
  • 클라우드 보안의 경우 실제 서버 보안과 크게 다르지 않으나, 구성 요소가 논리적으로 동작한다는 차이가 존재
    • 네트워크 인터페이스 컨트롤러(NIC)의 경우 클라우드에서 가상 NIC(vNIC)로 동작
  • 클라우드의 네트워크 기능은 HW보다는 서비스로서 기능
  • 네트워크의 사이즈(IP 주소 범위)를 정의하는 것으로 시작
    • 클라우드 네트워크는 서브넷이라는 단위로 분할
    • 한 서브넷 내에는 VM, 인스턴스, 저장 공간, 로드 밸런서 등으로 구성
    • 각 서브넷은 접근 제어 리스트(Access Control List, ACL)이라는 서브넷 단위의 방화벽으로 보호됨
  • 서브넷이 사용하는 서비스에 따라 각각 다른 보안 그룹으로 할당
    • Web tier의 경우 인터넷에 연결되어야 함 : Public Gateway와 VPN을 활용
    • 많은 접근이 있는 어플리케이션의 신뢰성을 위해 Load Balancer 사용

Containers

  • 의존성 + 라이브러리 + 코드로 구성된 실행 가능한 SW 단위
  • 클라우드, 데스크톱 등 어느 곳에서나 실행 가능
  • 가상 머신과 달리 OS를 포함하지 않음
  • Virtual Machine의 경우
    • HW - Host OS - Hypervisor로 구성
    • Hypervisor 위에 Guest OS를 포함하는 Virtual Machine이 할당
    • VM 위에 프로그램 구동
    • 여러 개의 프로그램 구동시 그만큼의 VM이 필요
    • 다수의 프로그램 구동 시 많은 자원이 필요하고, VM별로 다른 호환성 문제가 있을 수 있음
  • Container의 경우
    • 파일 생성 - 이미지 생성 - 컨테이너 생성
    • HW - Host OS - Runtime Engine으로 구성
    • Guest OS 없이 동작하므로 VM 대비 적은 자원 필요
728x90
728x90
Overview of Service Models

Overview of Service Models

  • IaaS : 가상화된 네트워크 및 저장소가 제공되어 사용자는 접근 및 설정이 가능

    • 사용자 유형(persona) : 시스템 / IT 관리자
    • 자동차 리스로 비유 : 차량의 성능에 대해 신경 쓸 필요 없이 외관(도장)에만 신경쓰면 됨
  • PaaS : IaaS의 가상화된 자원이 갖는 장점을 이용 + 사용자는 이 부분에 대해 관리할 필요가 없음

    • 사용자 유형 : 대체로 개발자
    • 렌트카로 비유 : 단순히 차를 빌려서 톨비, 연료비만 지출
  • SaaS : 로컬 장치에 설치하거나 업데이트 없이 사용하는 소프트웨어

    • ex. 유튜브 역시 SaaS의 일종
    • 대체로 라이센스보다는 구독형 모델
    • 택시로 비유 : 차의 성능, 외관, 유지비 상관 없이 정해진 거리만 이동
  • IaaS > PaaS > SaaS 순으로 사용이 쉬우며, 역순으로 관리 복잡성이 증가

IaaS - Infrastructure as a Service

  • 인터넷을 통해서, 실시간으로, 사용한 만큼 지불하는 방식으로 고객들에게 연산 능력, 네트워크, 저장소를 제공

  • Infrastructure를 가상화, 혹은 하이퍼바이저 층을 이용하여 제공

  • 고객은 클라우드 공급자가 공급 가능한 지역을 선택하여 가상 머신을 생성, 혹은 프로비전할 수 있음

  • 가상 머신에는 고객이 선택한 운영 체제가 설치

    • 고객은 middleware, 어플리케이션을 설치하고 프로그램을 구동
    • 처리 및 백업을 위해 저장소를 사용
  • 클라우드 공급자는 고객들에게 성능 및 사용량의 추적 및 측정, 재해에 따른 복구를 제공

  • IaaS의 구성요소

    • Physical Data Center
      • 다양한 추상화 계층을 제공
      • 사용자들은 물리 계층을 직접 사용하지 않고, 데이터센터가 제공하는 서비스를 사용
    • Compute
      • 공급자는 하이퍼바이저를 관리하고, 사용자는 필요한 만큼의 연산, 메모리, 저장 공간을 프로비전
      • auto scaling, load balancing을 통한 높은 성능 제공
    • Network : 네트워크 자원을 API를 통해 접근
    • Storage : Object, File, Block 저장소로 구성
  • Using Case

    • Test / Develop : 개발 환경을 더 빠르게 구성할 수 있게 하여, 인프라 관리보다 비즈니스 로직에 더 집중할수 있게 해줌
    • Continuity / Recovery : 정전 혹은 재해의 위험 없이 어플리케이션 혹은 데이터에 접근 가능하게 해줌
    • Faster Deployment : 웹 어플리케이션을 빠르게 배치하고, 변화하는 수요에 맞추어 인프라 크기를 빠르게 키우거나 줄임

Paas - Platform as a Service

  • 고객에게 직접 개발하였거나 서드파티에 의해 개발, 배치, 구동, 관리할 수 있는 완성된 플랫폼을 제공
    • 서버, 네트워크, OS, 저장소, API, 미들웨어, DB 등...
    • 사용자는 코딩 및 유지보수만 하도록 구성
  • IaaS의 경우 raw한 컴퓨터 자원을 제공
    • PaaS의 경우 low-level 환경에 대한 부분을 추상화
  • PaaS의 주요 특징
    • 높은 추상화 : 어플리케이션 배치, 프로비저닝, 인프라 설정, 로드 밸런싱과 DB의 설정 복잡성을 모두 배제
    • API 제공
      • 클라우드 어플리케이션의 복잡한 부분을 API를 통해 단순화
      • 워크로드, 사용자 구분, 통계 등을 API로 지원
    • 빠른 배치 매카니즘 : 어플리케이션을 빠르고 효율적으로 배치 및 동작
  • Using Case
    • API 개발 및 관리
    • IoT : 개발을 위한 도구 및 프로그래밍 언어 등 제공
    • Business analytic : 사업 결정 및 예측 지원
  • PaaS의 장점
    • Scalability : API, 지원, 미들웨어 등을 사용한 만큼 지불
    • 빠른 시장 출시 : 환경 구성에 필요한 시간을 단축
    • Agility : 다양한 OS, 언어, 도구를 쉽고 빠르게, 그리고 변경 시의 위험을 낮게 하여 사용 가능
  • PaaS의 위험성
    • 서비스 제공자의 인프라에 따른 보안 위험성
    • 인프라에 의한 의존성
    • 제공되는 서비스가 변경될 경우 제어 불가

SaaS - Software as a Service

  • 클라우드에 기반한 SW 제공
  • 공급자는 서버, DB, 어플리케이션 및 접근 권한, 보안 등을 관리
  • 사용자는 유지보수 / 업데이트 없이 사용
  • MS Office 365, Gmail, CRM 등이 해당
  • 주요 특징
    • Multitenant architecture : 인프라 및 코드는 중앙에서 유지보수하고, 모든 사용자에 의해 접근
    • Management : 접근 권한 및 데이터 사용을 관리하기 편하고, 모든 사람들이 동시에 같은 정보를 볼 수 있게 함
    • Customize : 어플리케이션을 사업에 맞게 조정 가능하고, data field나 기능 활성 여부를 선택 가능
    • Subscription model
  • SaaS의 장점
    • 빠른 솔루션 조달이 가능 : 결정부터 결과까지의 시간을 단축
    • 작업 생산성과 효율성을 증가
    • SW 배포가 매우 빠름
  • Using Case
    • 업그레이드, 유지보수 및 패치가 필요 없는 환경
    • 최소한으로 신뢰성 있는 어플리케이션 동작
    • 웹, 마케팅, 판매 등을 관리
    • SaaS 어플리케이션을 모아 SIP(SaaS Integration Platform)으로 제공
  • SaaS의 유의점
    • 서드파티 사용 시 중요 데이터 문제
    • 인터넷 상태가 불량할 시 접근 불가

Public Cloud

  • Deploy model의 구분
    • 어디에 인프라가 할당되는지
    • 누가 소유하고 관리하는지
    • 어떻게 자원과 서비스가 사용자가 이용 가능하도록 만들어지는지
  • Public Cloud : 사용자는 인터넷을 통해 서버, 저장소, 네트워크, 보안 등에 접근
  • Web, API 등 필요한 서비스를 사용
  • 제공자는 인프라를 소유, 관리, 유지보수 - 사용자는 이 과정을 알지 못함
    • 물, 전기, 가스를 사용하는 것과 같은 방식
  • 가상화된 multi-tenant 구조를 사용하여 컴퓨팅 자원을 공유
    • 방화벽 바깥에 위치
    • 공유되는 인프라, 플랫폼, 소프트웨어는 단일 사용자에게 할당되지 않음(공유됨)
    • 자원은 필요에 따라 분배되며, 구독 및 사용량에 따라 지불
  • public cloud의 장점
    • 필요에 따라 끊김 없는 자원 할당
    • 규모의 경제에 따른 서비스 제공
    • 높은 신뢰성
  • public cloud의 유의점
    • 보안 : 데이터 손상, 손실 등의 문제
    • 데이터 권한 준수 : 법률에 따른 데이터 관리 문제
  • Using Case
    • 클라우드 기반의 어플리케이션 / 플랫폼을 통해 어플리케이션 개발 및 시험에 집중하여 출시까지의 기간 단축
    • 변화하는 사용량에 대응
    • 피해 복구, 데이터 보호, 지속성 유지
    • 쉬운 배포, 데이터 백업, 높은 접근성
    • 어플리케이션 및 플랫폼의 유지보수를 클라우드 공급자에게 아웃소싱

Private Cloud

  • NIST 정의 : 단일 기관에 의해 독점적으로 클라우드 인프라를 사용
    • 소유, 관리, 동작 역시 사용 기관에서 담당
  • Internal Infrastructure : 사용 기관에 의해 소유 / 관리
  • External Infrastructure : 서비스 제공자에 의해 소유 / 관리
    • Virtual Private Cloud(VPC) : 퍼블릭 클라우드에서 논리적으로 독립되어 사용
    • Public Cloud의 장점은 취하고, 맞춤형 보안 등 특정한 니즈를 충족 가능
  • Private Cloud의 장점
    • 더 직접적인 관리 가능
    • 자원 활용을 통한 비용 절감
    • Cloud Bursting : Public Cloud 사용 중 급격한 변화(Surge) 발생 시 Private로 전환 가능
    • 필요에 따른 접근 관리
  • Using Case
    • 매우 민감한 데이터 관리
    • 기존의 내부 어플리케이션 등을 통합, 최신화
    • 보안 걱정을 낮추면서 어플리케이션의 장소 제약 없는 개발

Hybrid Cloud

  • private 및 public cloud를 하나의 인프라로 구성
    • 각 어플리케이션 및 작업에 대해 유연한 동작 선택 가능
    • private - public을 자유롭게 전환 가능
  • 필요에 따라 public 용량을 순간 수요에 따라 private로 전환 가능 (Cloud Bursting)
  • 주요 특징
    • Interoperable : private - public cloud가 서로의 API, 설정, 데이터 포맷, 인증 양식을 해석 가능
    • Scalable : public cloud 용량을 private로 전환 가능
    • portable : 데이터를 특정 서비스에 종속되지 않게 사용 가능
  • Hybrid Cloud의 종류
    • Mono : 단일 제공자에 의해 제공
    • Multi : 표준에 기반한 Stack으로 임의의 인프라 상에 구축 가능
    • Composite Multicloud : Multicloud보다 높은 유연성 제공
  • Hybrid Cloud의 이점 : 보안, 신뢰성, 최적화, 비용 절감
  • Using Case
    • SaaS 통합 : public - private 클라우드들 간에 SaaS 어플리케이션 이용이 가능하도록 하여 새로운 솔루션 제공
    • Data / AI 통합
    • 레거시 어플 개선
    • VMware 마이그레이션
728x90
728x90
Cloud Adoption - No Longer a Choice
  • 학습 목표
    • 클라우드로 이동한 Business Case 학습
    • IoT, AI, 블록체인 등의 기술이 어떻게 클라우드로 인해 가속될 수 있는지 학습

Cloud Adoption - No Longer a Choice

  • 클라우드는 낮은 위험으로, 실험-실패-학습의 과정을 더욱 빠르게 해줌
  • IBM Business Value Study : 3/4 이상의 기업들이 새 산업으로 확장할 때 클라우드 컴퓨팅을 사용
    • 74%가 더 나은 고객 경험을 위해 클라우드로 이동
    • 71%가 기존 시스템의 크기를 줄이고, 비용을 감축하며 더 나은 제품과 서비스를 위해 클라우드를 사용
  • 경쟁력 있는 기업은 통계나 고객 경험을 이해하여 시장에 빠르게 반응하여야 함
    • 제품의 수명주기는 더욱 짧아졌고, 진입 장벽은 더욱 낮아짐
  • The International Data Corporation(IDC) : 2025년이면 전 세계에서 생성되는 데이터 양이 163ZB(1ZB = 1조 GB)에 달할 것이라고 예상되며, 이중 30%는 실시간 정보가 될 것
    • data에 기반한 결정은 어느 사업에서나 중요
    • 그렇기 때문에 클라우드 컴퓨팅은 성공적이고, 지속 가능하며, 경쟁력 있는 사업에 필수적인 요소가 되어가고 있음

Cloud Adoption - Some Case Studies

  • American Airlines
    • Challenge : 고객 경험, 디지털 채널의 향상 / 고객 니즈에 대한 응답 시간을 개선
    • Soltuion : 클라우드 기반의 Self-service tool, 기존 어플리케이션의 제약사항 제거
    • Result : 새로운 어플리케이션 개발 및 배포 속도의 증가, 신뢰성 및 생산성의 증가, 업그레이드 비용의 절약
  • UBank
    • Challenge : 개발자에게 더 많은 권한 부여, 추가 자원에 대한 니즈 감소, 시장에 대한 빠른 대응
    • Solution : IBM watson을 이용한 지원, PaaS 개발 모델
  • Bitly
    • Challenge : global precense, 크기의 확대 및 축소, 더 많은 POP로의 분산
    • Solution : 확장 가능한 호스팅 플랫폼, IBM Cloud로의 이동
    • result : 250억개의 링크가 site에서 클라우드로 이동, 10억 개의 유저 데이터가 클라우드를 통해 관리
  • ActivTrades
    • Challenge : latency 감소, 실행 속도 증가, 새로운 기능의 효율적 전달
    • Solution : 거래 시스템을 IBM Cloud로 이동(저장소, 네트워킹, 보안)
    • result : 성능의 3배 향상, 보안 향상된 플랫폼, 새로운 요구사항에 대한 더욱 빠른 응답

Internet of Things in the Cloud

  • 각종 디바이스와 센서들은 데이터를 수집하고 측정
    • 스마트 빌딩의 경우, 온도, 시각, 환경 등의 정보를 수집하는 수천개의 센서가 데이터를 수집
    • 어마어마한 양의 데이터가 수집되고, 네트워크 상에 부담이 될 수밖에 없음
    • 클라우드를 통해 IoT 디바이스에 의한 데이터를 관리

Artificial Intelligence on the Cloud

  • AI-IoT-Cloud의 관계
    • IoT 디바이스에 의한 데이터를 AI가 처리 - IoT 기기의 동작은 AI에 의해 결정
      • ex. smart assistant - IoT기기가 사용자의 행동 특성을 학습하여 행동 보조
    • IoT와 AI가 클라우드의 활용성을 높임
  • case study : USTA(미국 테니스 연합)
    • 테니스 경기 중의 모든 데이터(영상, 소리 등)를 수집
    • 경기에 몰린 사람들로 인한 네트워크 트래픽을 자동으로 관리
    • 관중의 함성소리 등으로 경기의 하이라이트를 자동으로 식별

Blockchain and Analytics on the Cloud

  • 블록체인
    • transaction application의 투명성과 추적성을 설정하고, 비용을 감축하며 처리 속도를 높이기 위한 보안, 분산, 공개 기술
    • transaction과 연관된 멤버들만 볼 수 있도록 하는 네트워크
    • 네트워크가 더 분산되고, 공개되고, 다양해질수록 신뢰성과 투명성은 증가
  • 데이터를 클라우드 간에 간편하고 안전하게 옮기기 위해, 블록체인과 같은 기술의 필요성은 증가 추세
  • 블록체인 - AI의 관계
    • 블록체인은 신뢰성 있는 연결을 제공
    • AI는 수집된 데이터로 통계와 의사 결정을 강화
    • 클라우드는 효율적인 연산 자원을 제공
728x90
728x90
Definition and Essential Characteristics of Cloud Computing

이번 강의를 통해 클라우드 컴퓨팅을 정의하고, 주요 특징, 발전 과정, buisness case를 알 수 있게 될 것이다.
IBM Clouders에 지원하기 위한 기본 과제로써 해당 강의를 알게 되었는데, 클라우드에 관련한 몇몇 세미나를 들은 기억들을, 이 강의로 어느 정도 기초 개념을 확실히 하고자 한다.
IBM Cloud Course는 강의 중/후의 시험으로 통과 여부를 정한다. 이번 코스의 경우 강의 중간 평가 50%, 기말고사 50%로 수료 여부가 정해진다. 100점 만점에 총 70점 이상을 획득하여야 한다.

  • 학습 목표
    • 클라우드 컴퓨팅의 정의
    • 클라우드 컴퓨팅의 주요 특징을 설명
    • 클라우드 컴퓨팅의 역사와 발전에 대한 학습
    • ...등등

Definition and Essential Characteristics of Cloud Computing

  • 클라우드 컴퓨팅

    • 클라우드라고도 칭함
    • 인터넷을 통해 제공되며 사용한 만큼 지불하는 서비스
    • 실시간 연산 자원을 제공한다.
  • NIST(US National Institute of Standard and Technology)

    • 편의를 제공하는 실시간 네트워크 접속 모델로 적은 노력으로 빠르게 준비(provision)되고 공개(release)될 수 있는, 설정 가능한 공유된(shared pool of) 연산 자원.
    • ex. 네트워크, 서버, 저장소, 어플리케이션, 서비스 등
  • 5가지 주요 특징

    • On-demand Self Service : 연산 자원, 저장소 등의 클라우드 자원에 제공자와의 대면(human interaction) 없이 단순하게 접근 가능
    • Broad Network Access : 클라우드 자원은 스마트폰, 타블렛, 노트북과 같은 표준 플랫폼과 매카니즘을 통해 접근 가능
    • Resource Pooling : multi-tanent model을 통해 클라우드 자원을 다수의 사용자에게 할당-재할당하고, 클라우드를 cost-efficient하게 하여 클라우드 제공자들에게 규모의 경제를 제공
    • Rapid Elasticity : 필요할 때는 더 많은 자원을 사용하고, 그렇지 않을 때는 적게 사용
    • Measured Servic : 사용한 만큼 지불하는 서비스 - 사용 자원은 감시, 측정되어 투명하게 보고됨
  • Cloud As a Service

    • 연산 자원의 비용 효율성을 높이고,
    • 시장 변화를 더욱 빠르게 만듦
  • Deployment Model

    • Public : 클라우드 제공자의 자원을 개방 인터넷을 통해 사용하며, 다른 사용자와 자원을 공유
    • Private : 클라우드 제공자의 자원은 단독 사용을 위해 할당
    • Hybrid
  • Service Model

    • Infrastructure (IaaS) : 서버, 저장소 등 Infra 및 물리적 자원을 제공
    • Platform (PaaS) : 개발에 필요한 HW/SW tool을 제공
    • Application (SaaS) : on-demand SW라고도 하며, 구독에 기반하여 SW 라이센스 등을 제공

History and Evolution of Cloud Computing

  • 1950s
    • 클라우드 컴퓨팅의 개념은 1950년대부터 시작(시분할, resource pooling 등)
    • Dumb terminal : 다수의 유저가 메인프레임의 동일 자원을 사용을 효율적으로 사용하기 위해 사용
  • 1970s
    • 가상 머신(VM)을 통해 메인프레임 내에서 다수의 VM으로 분리된 컴퓨팅 환경 제공
    • 당시 비싼 HW를 효율적으로 쓰기 위해, 기능적으로 공유 호스팅(Shared Hosting), 가상 개인 서버(Private serer) 등으로 분리
    • Hypervisor : 다수의 OS가 서로 간섭 없이 동작할 수 있도록 하는 SW layer

Key Considerations for Cloud Computing

  • 클라우드로의 이전을 위한 핵심 요소
    • 민첩성(agility)
    • 유연성(flexivity)
    • 경쟁력(competitiveness)
  • 클라우드를 위한 주요 고려 사항
    • Infrasturcture and Workload
      • 데이터센터를 직접 짓는데는 천문학적인 비용이 듦
      • 클라우드 컴퓨팅의 낮은 초기 비용 / 사용한 만큼 지불하는 특성은 유의미한 비용 절감을 제공
      • 클라우드의 경우 모든 자원이 항상 준비되어 있지는 않을 수 있음
    • SaaS and Development Platform
      • 기성(off-the-shelf) SW과 주기적 업그레이드 대신 어플리케이션의 접근(SaaS)을 제공
      • 클라우드에서 n시간동안의 구동을 할 지, 기존 플랫폼에서 장시간 동작시킬지를 고려
    • Risk Exposure
      • 클라우드로의 이동이 불확실한 상황에서 장기간의 Plan을 지불하는 것이 옳은가?
  • 클라우드로 이동할 때의 장점
    • Flexivity
      • 서비스의 Scale이나 어플리케이션 Customization을 원하는 대로 조정
      • 클라우드 서비스로 어디서나 접근
      • 가상 private 클라우드, 암호화, API 키를 통해 데이터를 안전하게 저장
    • Efficiency
      • 인프라 비용 및 유지보수에 대한 걱정 없이 빠른 출시가 가능
      • 인터넷 통신이 가능한 어떤 기기에서도 자유로운 접근 가능
      • 백업으로 인한 데이터 손실 방지
    • Strategic Value
      • 인프라 관리를 더욱 효율적으로 하여, 기업만의 특징에 집중할 수 있도록 해줌.
  • 클라우드로의 이동 시 주의사항
    • 사업 간의 차이로 인한 데이터의 이용 불가, 혹은 손실 등의 문제
    • 관리와 권한 문제
    • 법적 문제
    • 표준화가 부족할 때의 서비스 통합 및 상호 운용 문제
    • 적절한 서비스 모델, 클라우드 제공자 선택
728x90
728x90
Introduction

Introduction

  • 결정 트리는 여러분에게 어려운 결정을 남겨줍니다. 많은 잎을 갖는 깊은 트리는 각 예측이 적은 집의 데이터에서 온 데이터이기 때문에 오버피팅을 유발할 것입니다. 한편 적은 잎을 갖는 얕은 트리는 raw 데이터에서 많은 특성을 찾지 못해 좋지 못한 성능을 갖게 될 것입니다.

  • 비록 오늘날의 대부분의 모델링 기술이 오버피팅과 언더피팅 사이의 이러한 긴장을 마주하고 있지만, 많은 모델들은 더 나은 성능을 위한 좋은 아이디어를 갖고 있습니다. 우리는 이런 예시로 Random Forest를 알아볼 것입니다.

  • Random Forest는 많은 트리를 이용하여, 각 구성 트리의 예측을 평균하여 예측합니다. 보통 단일 결정 트리보다 더 나은 예측 정확도를 갖고 기본 파라미터로도 잘 동작합니다. 만약 여러분이 계속해서 모델링한다면, 여러분은 더 좋은 성능을 갖는 모델들에 대해 배우게 되겠지만, 대부분은 적절한 파라미터에 민감하게 반응합니다.

Example

  • 여러분은 이미 데이터를 불러오는 코드를 본 적이 있습니다. 데이터를 불러올 때, 우리는 다음과 같은 변수를 갖게 됩니다.
    • train_X
    • val_X
    • train_y
    • val_y
  • 우리는 scikit-learn에서 결정 트리를 만든 방식과 유사하게 랜덤 forest model을 만듭니다 - 이번에는 DecisionTreeRegressor 대신 RandomForestRegressor 클래스를 사용합니다.
from sklearn.metrics import mean_absolute_error forest_model = RandomForestRegressor(random_state=1) forest_model.fit(train_X, train_y) melb_preds = forest_model.predict(val_X) print(mean_absolute_error(val_y, melb_preds))
/opt/conda/lib/python3.6/site-packages/sklearn/ensemble/forest.py:245: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22. "10 in version 0.20 to 100 in 0.22.", FutureWarning) 202888.18157951365

Conclustion

  • 더 개선의 여지가 있지만, 결정 트리의 오차값인 250000을 볼 때 매우 큰 개선이 이루어졌습니다. 우리가 단일 결정 트리의 최대 깊이를 바꾼 것과 같이 랜덤 포레스트의 성능을 여러분이 바꿀 수 있는 파라미터가 존재합니다. 하지만 이러한 튜닝 없이 일반적으로 하는 것이 랜덤 포레스트 모델의 가장 좋은 기능 중 하나라고 할 수 있습니다.
  • 여러분은 곧 튜닝과 적절한 파라미터값일 때 더 좋은 성능을 제공(하지만 파라미터 값을 위해 적당한 기술이 필요한)하는, XGBoost 모델에 대해 배울 것입니다.
728x90
728x90
Experimenting With Different Models
  • 이번 수업을 마치고 나면, 여러분은 언더피팅(underfitting)과 오버피팅(overfitting)의 개념에 대해 알고, 이러한 개념을 모델을 더 정확하게 만들기 위해 사용할 수 있을 것입니다.

Experimenting With Different Models

  • 이제 여러분은 모델의 정확도를 측정하는 적절한 방법을 갖고, 다른 모델과 비교하여 어떤 것이 제일 괜찮은 예측을 제공하는지 실험할 수 있습니다. 하지만 모델을 위한 대안은 어떻게 해야 할까요?

  • 여러분은 scikit-learn 문서에서 결정 트리 모델이 (여러분이 오랫동안 원하거나 필요로 하는 것 보다도 많은) 옵션을 제공하는 것을 볼 수 있습니다. 가장 중요한 옵션은 트리의 깊이를 결정하는 것입니다. 이 수업의 가장 첫 단원을 되돌아보면 트리의 깊이는 예측 이전에 얼마나 많은 분류가 이루어지는지에 대한 단위였습니다. 이것은 매우 얇은 트리입니다.

  • 실제로, 트리가 최상단(모든 집)에서 잎까지 10개의 분류를 갖는 것은 매우 흔하지 않은 일입니다. 이것이 깊어질수록, 데이터셋은 더 적은 집의 잎으로 나누어집니다. 만약 트리가 한 개의 분류만을 갖고 있다면, 그 트리는 데이터를 2개의 그룹으로 나눌 것입니다. 만약 한번 더 나누면, 우리는 4개의 집 그룹을 얻게 될 것입니다. 다시 나누면 8개의 그룹이 만들어질 것입니다. 만약 계속해서 그룹의 개수를 두배로 만들면서 각 단계마다 더 많은 분류를 추가한다면, 우리는 10단계에 이르렀을 때 2102^10개의 집의 그룹을 얻게 될 것입니다.

  • 우리가 집들을 매우 많은 잎으로 나누게 될 때, 우리는 각 잎에 매우 적은 집들이 남겨지게 됩니다. 매우 적은 집들을 갖는 잎은 실제 집값과 꽤나 가까운 예측을 하겠지만, 새로운 데이터에 대해서는 매우 적절하지 않은 예측을 하게 될 것입니다(각 예측은 매우 적은 집들에 기반하기 때문입니다).

  • 모델이 학습 데이터에 거의 정확하게 일치하게 되지만, 새로운 데이터나 검증 시에는 그렇지 못한 이 현상을 오버피팅이라고 부릅니다. 반면, 만약 트리가 매우 얕다면, 집들을 분명한 그룹으로 나누지 못할 것입니다.

  • 극단적으로, 만약 트리가 집들을 2~4개의 그룹으로 나눈다면, 각 그룹은 넓은 범위의 집을 갖게 될 것입니다. 예측 결과는 학습 데이터에도 불구하고, 대부분의 집에 대해 동떨어진 결과를 낼 것입니다(같은 이유로 검증 시에도 좋지 않은 결과가 나타날 것입니다). 모델이 중요한 특정이나 패턴을 데이터에서 찾지 못한다면, 학습 데이터일지라도 좋지 못한 성능을 나타낼 것입니다. 이를 언더피팅이라고 부릅니다.

  • 우리는 검증 데이터에서 예측하여야 하는 새로운 데이터에 대한 정확도에 집중하기 때문에, 우리는 언더피팅과 오버피팅 사이의 스위트 스팟을 찾아야 합니다. 시각적으로, 우리는 검증 커브(아래 붉은 색)의 최저점을 원하고 있습니다.

Example

  • 트리 깊이를 조절하기 위한 몇 가지 대안이 있고, 다른 경로보다 일부 경로가 더 깊은 깊이를 갖도록 하는 많은 방법이 있습니다. 하지만 max_leaf_nodes 매개변수는 매우 감각적으로 오버피팅과 언더피팅을 조절할 수 있도록 해줍니다. 모델에 더 많은 잎을 만들수록, 언더피팅 영역에서 오버피팅으로 이동하게 됩니다.
  • 우리는 max_leaf_nodes를 위한 다른 값들로부터 MAE 점수를 비교하기 위한 유틸리티 함수를 사용할 수 있습니다.
from sklearn.tree import DecisionTreeRegressor def get_mae(max_leaf_nodes, train_X, val_X, train_y, val_y): model = DecisionTreeRegressor(max_leaf_nodes=max_leaf_nodes, random_state=0) model.fit(train_X, train_y) preds_val = model.predict(val_X) mae = mean_absolute_error(val_y, preds_val) return(mae)
  • 이 데이타는 여러분이 본(그리고 이미 써본) 코드를 사용하여 train_X, val_X, train_y, val_y로 저장됩니다.
  • 우리는 for-루프를 이용하여 max_leaf_nodes에 따라 다른 값으로 만들어진 모델의 정확도를 비교해볼 수 있습니다.
# compare MAE with differing values of max_leaf_nodes for max_leaf_nodes in [5, 50, 500, 5000]: my_mae = get_mae(max_leaf_nodes, train_X, val_X, train_y, val_y) print("Max leaf nodes: %d \t\t Mean Absolute Error: %d" %(max_leaf_nodes, my_mae))
Max leaf nodes: 5 Mean Absolute Error: 347380 Max leaf nodes: 50 Mean Absolute Error: 258171 Max leaf nodes: 500 Mean Absolute Error: 243495 Max leaf nodes: 5000 Mean Absolute Error: 254983
  • 목록의 옵션에 따르면, 500이 최적화된 잎의 개수임을 알 수 있습니다.

Conclusion

  • 결론적으로:모델은 다음과 같은 문제를 겼을 수 있습니다:
    • 오버피팅 : 앞으로 일어나지 않거나, 덜 정확한 예측으로 이끄는 가짜 패턴을 잡는 경우 혹은
    • 언더피팅 : 연관된 패턴을 잡는데 실패하여, 덜 정확한 예측으로 가는 경우
  • 우리는 모델 학습에 사용되지 않은, 검증 데이터를 사용하여, 후보 모델의 정확도를 측정합니다. 이를 통해 우리가 많은 후보 모델을 시도해보고 가장 좋은 하나를 선택할 수 있습니다.
728x90
728x90
What is Model Validation
  • 우리는 모델을 만들었습니다. 하지만 그게 얼마나 좋은 걸까요?

  • 이번 수업에서는, 여러분은 여러분의 모델의 질을 측정하기 위한 모델 검증(model validation)을 사용하는 법을 배울 것입니다. 모델의 질을 측정하는 것은 여러분의 모델을 반복해서 향상시키기 위한 핵심입니다.

What is Model Validation

  • 여러분은 여러분이 만드는 거의 모든 모델의 가치를 평가하고 싶을 것입니다. 대부분의(비록 모든 것은 아니지만) 어플리케이션의 경우, 모델의 질에 대한 적절한 측정 방법은 예측의 정확도입니다. 다시 말해, 모델의 예측이 실제로 일어나는 것과 유사한가를 보는 것입니다.

  • 많은 사람들은 정확도 예측에 있어 큰 실수를 하곤 합니다. 그들은 그들의 학습 데이터를 이용해 예측을 한 뒤 학습 데이터의 목표값과 비교합니다. 이러한 접근법에 대한 문제점과 해결법은 잠시 후 알게 되겠지만, 먼저 어떻게 해야 할 지에 대해 알아보도록 합시다.

  • 여러분은 먼저 이해할 수 있는 방식으로 모델의 질을 요약할 필요가있습니다. 만약 10000가구에 대한 예측과 실제 집값을 비교한다고 할 때, 여러분은 아마 좋거나 나쁜 예측의 혼합을 보게 될 것입니다. 10000개의 예측과 실제 값을 보는 것에는 핵심을 볼 수 없습니다. 우리는 이것을 하나의 계측값으로 요약할 필요가 있습니다.

  • 모델의 질을 요약하기 위한 많은 계측법이 있지만, 우리는 Mean Absolute Error(평균 절대 오차 - MAE라고도 불리는) 것으로 시작해볼 것입니다. 마지막 단어인, 오차로부터 시작해봅시다.

  • 각 집값의 예측되는 오차는 :

error=actual−predicted
  • 그래서, 만약 집값이 $150000이고, 여러분이 예측이 $100000이라면 오차는 $50000이 됩니다.

  • MAE 계량을 통해, 우리는 각 오차의 절대값을 얻을 수 있습니다. 이 방법은 각 오차를 양수로 변환해줍니다. 우리는 그 뒷 각 오차의 평균값을 계산합니다. 이 방법이 모델의 질을 측정하기 위한 우리의 계량법입니다. 순수하게 영어로 표현하면,

On average, our predictions are off by about X.

  • MAE를 계산하기 위해서는, 먼저 모델이 필요합니다.(코드 중략) 일단 모델을 생성하고 나면, 평균절대오차를 계산하는 방법은 다음과 같습니다.
from sklearn.metrics import mean_absolute_error predicted_home_prices = melbourne_model.predict(X) mean_absolute_error(y, predicted_home_prices)
434.71594577146544

The Problem with "In-Sample" Scores

  • 우리가 계산한 측정값은 표본 내 성적("In-Sample" Scores)이라고 부를 수 있습니다. 우리는 모델을 구축하고 평가하기 위해 집들에 대한 하나의 "샘플"을 사용했습니다. 이게 왜 좋지 않은가에 대해 알아봅시다.

  • 생각해봅시다, 거대한 부동산 시장에서, 문 색깔은 집값과 그다지 연관이 없습니다.

  • 하지만, 여러분이 모델을 만들때 쓴 샘플에서, 녹색의 문을 갖는 모든 집들은 매우 비싼 것으로 나타났습니다. 이 모델의 역할은 집값을 예측하기 위해 패턴을 찾는 것이고, 그래서 이러한 패턴을 찾아내어, 녹색의 집이 매우 비쌀 것이라는 예측을 할 것입니다.

  • 이러한 패턴이 학습 데이터에서 나타났기 때문에, 학습 데이터에서 이 모델은 정확할 것으로 나타날 것입니다.

  • 하지만 모델이 새 데이터를 볼 때 이러한 패턴이 잡히지 않는다면, 이 모델은 연습때보다 매우 부정확할 것입니다.

  • 모델의 실험값은 새 데이터에 대한 예측에서 오기 때문에, 우리는 모델을 만들 때 쓰이지 않은 데이터를 성능 측정에 사용합니다. 이를 위한 가장 직접적인 방법은 모델 제작 시 일부 데이터를 제외하고, 이전에 보이지 않은 데이터를 정확도 측정 테스트에 사용하는 것입니다. 이 데이터를 검증 데이터(Validation data)라고 부릅니다.

Coding It

  • scikit-learn 라이브러리는 데이터를 둘로 나누기 위해 train_test_split이라는 함수를 갖고 있습니다. 우리는 이 데이터중 일부를 모델 피팅을 위한 학습 데이터로 사용하고, 나머지 데이터를 mean_absolute_error를 계산하기 위한 검증 데이터로 사용할 것입니다.

  • 코드는 다음과 같습니다:

from sklearn.model_selection import train_test_split # split data into training and validation data, for both features and target # The split is based on a random number generator. Supplying a numeric value to # the random_state argument guarantees we get the same split every time we # run this script. train_X, val_X, train_y, val_y = train_test_split(X, y, random_state = 0) # Define model melbourne_model = DecisionTreeRegressor() # Fit model melbourne_model.fit(train_X, train_y) # get predicted prices on validation data val_predictions = melbourne_model.predict(val_X) print(mean_absolute_error(val_y, val_predictions))
260991.8108457069
728x90
728x90
Selecting Data for Modeling

Selecting Data for Modeling

  • 여러분의 데이터셋의 변수는 머릿속으로만 생각하거나, 멋지게 출력하기에는 너무 많이 있습니다. 어떻게 이해하기에 과도한 양의 데이터를 줄일 수 있을까요?
  • 우리의 직관을 이용하여 몇 가지 변수를 고르는 것으로 시작해봅시다. 나중의 수업에서는 변수의 우선 순위를 자동으로 매기는 통계학적 기술에 대해 알아볼 것입니다.
  • 변수/열을 선택하기 위해, 우리는 데이터셋의 모든 열을 볼 필요가 있습니다. DataFrame의 Column 특성을 통해 알 수 있습니다(아래에 코드가 있습니다.)
melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv' melbourne_data = pd.read_csv(melbourne_file_path) melbourne_data.columns
Index(['Suburb', 'Address', 'Rooms', 'Type', 'Price', 'Method', 'SellerG', 'Date', 'Distance', 'Postcode', 'Bedroom2', 'Bathroom', 'Car', 'Landsize', 'BuildingArea', 'YearBuilt', 'CouncilArea', 'Lattitude', 'Longtitude', 'Regionname', 'Propertycount'], dtype='object')
# The Melbourne data has some missing values (some houses for which some variables weren't recorded.) # We'll learn to handle missing values in a later tutorial. # Your Iowa data doesn't have missing values in the columns you use. # So we will take the simplest option for now, and drop houses from our data. # Don't worry about this much for now, though the code is: # dropna drops missing values (think of na as "not available") melbourne_data = melbourne_data.dropna(axis=0)
  • 데이터의 하위 집합(subset)을 선택하기 위한 여러 가지 방법이 있습니다. Pandas Micro-course는 이런 것들을 더 깊이 다루지만, 우리는 두 가지 접근법에 집중해볼 것입니다.
  1. "예측 타겟"을 선택하는, Dot notation
  2. "특징"을 선택하는, Column list 선택

Selecting The Prediction Target

  • 여러분은 dot-notation으로 변수를 추출할 수 있습니다. 이 하나의 열은 일럴로 저장되며, 1개 열을 갖는 DataFrame과 유사합니다.
  • 우리는 Prediction target이라고 하는, 예측하고자 하는 열을 선택할 때 dot notation을 사용할 것입니다. 편의를 위해, prediction target은 y라고 부릅니다. 그렇기 때문에 멜버른의 데이타에서 집값을 저장하기 위한 코드는 다음과 같습니다.
y = melbourne_data.Price

Choosing "Features"

  • 우리의 모델(나중에는 예측에 사용될)에 입력된 열은 "특성(features)"라고 불립니다. 이 경우, 집값을 판단하기 위해 사용되는 열이 될 것입니다. 때때로, 여러분은 타겟을 제외한 모든 열을 특성으로 활용할 것입니다. 다른 경우 더 적은 특성을 이용하는 것이 더 나을 것입니다.
  • 이번에는, 우리는 몇 가지 특성을 이용하여 모델을 구성할 것입니다. 나중에 어떻게 다른 특성을 갖는 모델을 순회하고 비교하는지에 대해 배우게 될 것입니다.
  • 우리는 브래킷 내에 제공되어 있는 열 이름을 특성으로 선택합니다. 이 리스트 내의 각 아이템은 문자열로 되어 있습니다.
  • 예시는 다음과 같습니다:
melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']
  • 편의를 위해, 이 데이터를 X라고 부릅니다.
X = melbourne_data[melbourne_features]
  • 가장 위의 몇 개의 열을 보여주는 describe 메소드와 head 메소드를 이용해서 집값을 예측하기 위해 데이터를 빠르게 확인해봅시다.
X.describe() X.head()
  • 이 명령어로 시각적으로 데이터를 확인하는 것은 데이터 사이언티스트들의 중요한 업무 중 일부입니다. 여러분은 더 많은 직관을 제공하는 데이터셋에 종종 놀라게 될 것입니다.

Building Your Model

  • 여러분은 모델을 만들기 위해 scikit-learn 라이브러리를 사용하게 될 것입니다. 코딩할 때, 샘플 코드에서 볼 수 있듯 종종 sklearn라고도 쓰입니다. Scikit-learn은 보통 Dataframe에 저장된 데이터들을 모델링하는데 가장 유명한 라이브러리입니다.
  • 모델을 구성하고 사용하는 단계는 다음과 같습니다:
    • 정의 : 어떠한 모델이 될 것인가? 결정 트리? 다른 형태의 모델인지? 모델 타입의 다른 몇몇 파라미터들 역시 명시되어야 합니다.
    • 피팅 : 제공된 데이터에서 패턴을 확인합니다. 이것이 모델링의 핵심입니다.
    • 예측 : 말 그대로의 의미입니다.
    • 가치 판단 : 얼마나 모델이 정확한지 판단합니다.
  • 여기 scikit-learn을 이용한 결정 트리 모델과 특성과 타겟 변수를 이용한 예시가 있습니다.
# Define model. Specify a number for random_state to ensure same results each run melbourne_model = DecisionTreeRegressor(random_state=1)
# Fit model melbourne_model.fit(X, y) DecisionTreeRegressor(criterion='mse', max_depth=None, max_features=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, presort=False, random_state=1, splitter='best')
  • 많은 머신 러닝 모델들은 모델 학습에 임의성을 이용합니다. random_state로 숫자를 명시하는 것은 여러분이 각 단계마다 같은 결과를 얻도록 합니다. 이는 좋은 시도일 수 있습니다. 어떠한 숫자를 사용하면, 모델의 질은 어떠한 값을 고르더라도 의미 있게 관련되지는 않을 것입니다.
  • 우리는 이제 결정을 할 수 있는 피팅된 모델을 갖고 있습니다.
  • 실제로, 여러분은 우리가 가격을 이미 알고 있는 집보다는 시장에 나타나는 새로운 집에 대해 결정을 내리고자 할 것입니다.하지만 우리는 얼마나 예측 함수가 잘 동작하는지 보기 위해 처음의 몇 개 열에 대해 결정을 내릴 것입니다.
print("Making predictions for the following 5 houses:") print(X.head()) print("The predictions are") print(melbourne_model.predict(X.head()))
Making predictions for the following 5 houses: Rooms Bathroom Landsize Lattitude Longtitude 1 2 1.0 156.0 -37.8079 144.9934 2 3 2.0 134.0 -37.8093 144.9944 4 4 1.0 120.0 -37.8072 144.9941 6 3 2.0 245.0 -37.8024 144.9993 7 2 1.0 256.0 -37.8060 144.9954 The predictions are [1035000. 1465000. 1600000. 1876000. 1636000.]
728x90
728x90
Using Pandas to Get Familiar With Your Data

Using Pandas to Get Familiar With Your Data

  • 어떠한 머신 러닝 프로젝트를 위한 첫 단계는 데이터에 친숙해지는 것입니다. 이를 위해 Pandas 라이브러리를 사용할 것입니다. Pandas는 데이터를 분석하고 조작하기 위해 데이터 사이언티스트들이 사용하는 주된 도구입니다. 대부분의 사람들이 그들의 코드에서 Pandas를 pd.로 줄여 씁니다. 우리는 다음 명령어를 사용합니다.
import pandas as pd
  • Pandas 라이브러리의 가장 중요한 부분은 DataFrame입니다. 데이터프레임은 여러분이 표로 생각하는 데이터를 다룹니다. 이는 엑셀의 시트나, SQL 데이터베이스의 표와 유사합니다.
  • 판다스는 이러한 종류의 데이터를 다루고자 할 때 강력한 도구가 됩니다.
  • 예를 들어, 우리는 오스트레일리아 멜버른의 집값 데이터를 보고자 합니다. 이번 예시에서, 여러분은 아이오와의 집값을 이용하여 새로운 데이터셋에 같은 절치를 진행하게 될 것입니다.
  • (멜버른의) 예시 데이터는 ../input/melbourne-housing-snapshot/melb_data.csv에 존재합니다.
  • 우리는 데이터를 불러온 후 다음 명령어로 분석합니다.
# save filepath to variable for easier access melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv' # read the data and store data in DataFrame titled melbourne_data melbourne_data = pd.read_csv(melbourne_file_path) # print a summary of the data in Melbourne data melbourne_data.describe()

Interpreting Data Description

  • 원래의 데이터셋에서 각 열은 8개의 숫자를 보여줍니다. 첫 번째, Cound는 얼마나 많은 행이 non-missing values를 갖는지 보여줍니다.
  • Missing Value는 여러 가지 이유로 발생합니다. 예를 들면, 2번째 침실의 크기는 침실이 1개뿐인 집을 조사할 때는 수집되지 않습니다. missing data에 대한 주제는 곧 다시 알아볼 것입니다.
  • 두번째 값은 평균입니다. 여기서, std는 표준편차를 의미하며, 수치적으로 값들이 얼마나 분포했는지를 나타냅니다.
  • min, 25%, 50%, 75%, 그리고 max값이 의미하는 것은, 각 열을 최저에서 최고값으로 분류하는 것을 생각해보면 됩니다. 첫 번째(최소) 값이 min입니다. 만약 리스트에서 1/4만큼 진행하면 값들 중 25%보다 크고 75%보다 작은 값을 보면 됩니다. 이 값을 25% 값이라고 하며, 50, 75퍼센트 값은 이와 같이 정의되며, max는 가장 큰 값이 됩니다.
728x90

+ Recent posts