상세 컨텐츠

본문 제목

[국비지원무료교육][머신러닝] 파이썬- 머신러닝 두 번째 수업: 비지도 학습 개념, bmi-500 data, pandas와 pyplot으로 시각화 하기

Python

by Sam_Park 2022. 3. 8. 00:57

본문

- 본 글은 스마트 인재개발원 서포터즈 활동으로 작성한 글입니다

 

(딱딱 노잼... )

2022.03.07(월) 수업 내용 정리

데이터 파이썬 코드

 

2022.03.07(월) 수업 내용 정리
- 머신러닝의 종류
  - 지도학습(Supervised Learning) : 명시적인 답이 주어진 상태 (예시- 미스터리 사인) 
    - 분류(Clasification): 미리 정의된  여러 정답 중 하나를 예측하는 것 ( 혈액형)
      - 미리 정의된 여러 클래스 레이블 중 하나를 예측하는 것
      - 속성 값(문제)을 입력, 클래스 값(답, 클래스 레이블)을 출력으로 하는 모델
      - 붓꽃(iris)의 세 품종 중 하나로 분류, 암 분류
      - 이진 분류(둘 중 하나를 예측- 생/사 예측), 다중 분류(혈액형 분류) 등이 있음
    회귀( Regression) : 연속적인 숫자를 예측하는 것
      - 속성값을 입력, 연속적인 실수 값을 출력으로 하는 모델
      - 어떤 사람의 교육 수준, 나이 , 주거지를 바탕으로 연간 소득 예측
      - 예측 값의 미묘한 차이가 크게 중요하지 않다.
  
  비지도학습 (Unsupervised Learning) : 데이터에 대한 Label( 명시적인 답) 이 없는 상태에서 컴퓨터를 학습시키는 방법
    - 데이터의 숨겨진 특징, 구조, 패턴을 파악하는 데 사용
    - 데이터를 비슷한 특성끼리 묶는 클러스터링(Clustering) 과 차원축소(Dimensionality Reduction) 등이 있다.
      - 데이터가 가진 여러 차원의 특성을 가지고 있는 채로, 차원을 줄여서 판단하기 쉽게 해줌.
        - 데이터의 특성 수를 줄이는 것으로 상관관계가 있는 여러 특성을 하나로 합치는 과정 [출처: https://ittrue.tistory.com/35 [IT is True]]
      - 군집=클러스터링(Clustering) : 특성이 비슷한 것을 묶어줌
        - 3차원 분포 데이터를 2차원 또는 1차원으로 표현이 가능
        - 사례: 이미지 감색 처리 / 소비자 그룹 발견을 통한 마케팅 / 손 글씨 숫자 인식
          - 라벨링이 굳이 필요가 없는 경우,
          - 데이터 중에서 사람의 기준으로 집단화가 어려운 경우,
  - 강화학습( Reinforcement Learning ) : 중간과정이 중요한 학습에서 사용
    - 지도학습과 비슷하지만 완전한 답(Label) 을 제공하지 않는 특징이 있다.
    - 기계는 더 많은 보상을 얻을 수 있는 방향으로 행동을 학습
    - 주로 게임이나 로봇을 학습 시키는데 많이 사용

 

- 머신 러닝 활용 분야
  - 기존 솔루션으로는 많은 수동 조정과 규칙이필요한 문제
  - 전통적인 방식으로는 전혀 해결방법이 없는 복잡한 문제
  - 새로운 데이터에 적응해야하는 유동적인 환경
  - 대량의 데이터에서 통찰을 얻어야 하는 문제
- scikit- learn 
  - 파이썬에서 쉽게 사용할 수 있는 머신러닝 프레임워크, 라이브러리
  - 회귀 분류 군집 차원 
- 순서
  - 1. 문제정의 (pro..)
    - 비즈니스 목적 정의- 모델을 어떻게 하면 이익이 될까
    - 솔루션의 구성 파악
    - 지도/비지도/강화 선택
    - 분류, 회귀 선택
  - 2. DATA COLLECT( 데이터 수집)
    - 정리된 data file
    - DataBase의 data
    - WebCrawler(뉴스, sns,blog)
    - IoT 센서를 통한 수집
    - Survey
  - 3. DataPreprocessing 데이터 전처리
    - 결측치 처리-삭제 or 대체, 
    - 이상치 처리
    - cleaning 오류 수정
    - Feature Engineering 특성 공학
  - 4.  탐색적 데이터 분석(EDA)
    - 기술통계, 변수간 상관관계
    - 시각화
    - Feature Selection(사용할 특성 선택)
    - 단변수 시각화: Histogram(빈도수) / Boxplot( 평균, 중간값 등)
    - 이변수 시각화: Scatter plot (수치, 상관관계)/ 누적막대그래프( 범주, 독립성 분석)/ 범주별 Histogram
    - 다변수 시각화: Violin plot/ 3차원 그래프 등
  - 5. 모델 선택, Hyper Parameter 조정
    - 목적에 맞느 적절한 모델 선택
    - KNN, SVM, Linear Regression, Ridge, Lasso, Decision Tre, Random forest, CNN, RNN,...
    - Hyper Parameter:  모델의 성능을 개선하기 위해 사람이 직접 넣는 파라미터
      - 모델 함수의 default 값을 조정하기
  - 6. 학습(Model Training)
    - model.fit( x_train, y_train ) 
      - Train Data : 예측하기 전 모델의 학습을 위한 -학습용 데이터
      - Test Data : 예측이 잘 되는지 확인하기 위한 -평가용 데이터
      - 주로 7: 3 정도로 나눔
    - model.predict( x ) 
- 7. 평가( eveluation )
    - accuracy -정확도
    - recall - 재현율
    - precision - 정밀도
    - f1 score
  - 순서
    - 문제 정의 - raw data 수집 - data 전처리 - 정제된 data set ( EDA -+ 전처리 확인)  -  모델 선택, Hyper Parameter 조정 - 모델 학습  - 모델 평가 - 서비스화 또는 의사결정 보고서 (시각화)

 

 

--- 

 

 

# 문제정의
- 비만을 판단하는 모델 만들기
- 분류 문제로 접근 

# 데이터 수집
- csv 파일로 데이터 수집
- 500 명에 대한 성별, 키, 몸무게, Label 이 있음

import pandas as pd 
bmi = pd.read_csv('./data/bmi_500.csv')
bmi.head()


# 데이터 전처리
- 사전 데이터 확인하기 
- info() : 데이터 수, 인덱스 번호, 결측치 여부 확인
- describe() : 이상치 확인 

## 결측치 확인
- info(): 데이터 수, 인덱스 번호, 결측치 여부 확인

bmi.info()



## 이상치 확인 
- describe()
  1. std : 표준 편차 - 데이터의 범위 
      - 클수록 이상치가 있을 가능성을 염두에 둬야 함.
  2. mean 과 50%(중앙값) 을 통해 데이터를 이해하기 
      - 평균이 중앙값 오른쪽, 왼쪽인지에 따라 데이터 편중(?)을 볼 수 있음. 
      - 비슷한 경우 이상치가 없을 가능성이 큰 것
  3. 4분위수( min/25%/50%/75%/max ) 간의 범위 차이를 보기   

bmi.describe()


# 탐색적 데이터 분석 (EDA)
- 시각화를 통해서 원하는 정보를 한 눈에 보기
- 비만도별로 데이터가 잘 나오는지 확인하기

## 비만도 등급 확인
- .unique() : 중복을 제거하고 값을 출력 

bmi['Label'].unique()  # 중복을 제거하고 값을 출력


## Weak 인 사람들을 그래프로 확인해보기
- boolean indexing 으로 전체 중에서 label 이 weak 인 사람만

# boolean indexing 으로 전체 중에서 Label 이 Weak 인 사람만
bmi[bmi['Label'] == 'Weak']
import matplotlib.pyplot as plt

# 산점 도표를 볼 데이터를 scatter_data 라는 이르믕로 저장
scatter_data = bmi[bmi['Label'] == 'Weak']
plt.scatter( scatter_data['Height'], scatter_data['Weight'], 
            color = 'blue', label= 'Weak')
plt.legend()  # 라벨 출력
plt.show()



## Overweight 그래프 그리기

scatter_data = bmi[ bmi['Label']=='Overweight']
plt.scatter( scatter_data['Height'], scatter_data['Weight'], 
            color = 'red', label= 'Overweight')
plt.legend()  
plt.show()


## 전체 그래프 그리기
- 데이터 별로 색깔 줘서 구분하기 위해 각각의 케이스 별로 plt에 그리고 합치기

### 반복되는 부분 함수로 만들기

# 전체 케이스가 반복되기 때문에 각 케이스별로 함수 만들기

def myScatter(label, color):
    scatter_data = bmi[ bmi['Label']==label]
    plt.scatter( scatter_data['Height'], scatter_data['Weight'], 
            color = color, label= label)
    plt.legend()
plt.figure(figsize = (12,8))
myScatter('Extremely Weak','black')
myScatter('Weak','blue')
myScatter('Normal','green')
myScatter('Overweight','pink')
myScatter('Obesity','purple')
myScatter('Extreme Obesity','red')

plt.show()

 

 

 

 

 

 

- 스마트인재개발원 홈페이지 https://www.smhrd.or.kr/
- 스마트인재개발원 네이버블로그 https://blog.naver.com/jang0_0yw

 

스마트인재개발원 : 네이버 블로그

빅데이터, 인공지능, 사물인터넷, SW 전문 취업연계 무료교육기관‍♀️ 교육은 무료로! 취업은 당당하게!

blog.naver.com

 

관련글 더보기

댓글 영역