- 본 글은 스마트 인재개발원 서포터즈 활동으로 작성한 글입니다
(딱딱 노잼... )
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
[국비지원무료교육][머신러닝] 파이썬- 머신러닝 네 번째 수업: 과(대)적합, 과소적합, 일반화, KNN (0) | 2022.03.10 |
---|---|
[국비지원무료교육][머신러닝] 파이썬- 머신러닝 세 번째 수업: 모델 선택, 학습, 평가 (0) | 2022.03.10 |
[국비지원무료교육][머신러닝] 파이썬- 머신러닝 첫 수업: 사이킷런(scikitlearn) 랜덤포레스트(RandomForest) 사용해보기 (0) | 2022.03.06 |
pandas 기능 정리(1) (0) | 2021.12.30 |
파이썬 list 와 Numpy 배열, 자주쓰는 함수 요약 (0) | 2021.12.29 |
댓글 영역