Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 헤드퍼스트 디자인패턴
- 백준
- Python
- 기초100제
- 기초
- 공공데이터
- pypy3
- programmers
- 기본
- 이론
- 단계별로 풀어보기
- 명품 자바 프로그래밍
- GROUP BY 절
- SELECT 절
- Java11
- HAVING 절
- 코딩테스트
- 자바
- 개념
- 파이썬
- Python 3
- Codeup
- java
- 응용
- Codeforces Round #802 (Div. 2)
- BOJ
- JAVA 11
- level1
- baekjoon
- SQLD / SQLP
Archives
- Today
- Total
Development Project
[ 2021 NIPA AI - 응용 ] 1. 머신러닝 시작하기 (01~05) + α 본문
00 인공지능/머신러닝 개론
- 도입
- BIG DATA를 다루기 위한 방법으로 IoT, 클라우드, 머신러닝 기술 등이 있음
- 머신러닝
- 개념
- 기존 통계학 및 시각화 방법의 한계를 해결함
- 명시적으로 프로그래밍을 하지 않고도 컴퓨터가 학습할 수 있는 능력을 갖게 하는 것
- 머신러닝 학습방법
- 지도학습 (입력과 결과를 이용) => 데이터가 무엇인지 알려주고(예시를 줌) 맞추라고 함
- 회귀분석, 분류 존재
- 비지도 학습 (입력만을 이용)
- 군집화, 압축 존재
- 강화학습 (결과값 대신 보상이 주어짐)
- Action Selection, Policy Learning
- 지도학습 (입력과 결과를 이용) => 데이터가 무엇인지 알려주고(예시를 줌) 맞추라고 함
- 개념
01 자료 형태의 이해
- 자료형태 구분
- 수치형 자료 (Numerical data)
- 개념
- 양적 자료 (Quantitative data)
- 수치로 측정이 가능한 자료
- 수치형 자료를 구간화 하면 범주형 자료
- 구분
- 연속형 자료 (Continuous data)
- 연속적인 관측값을 가짐
- ex) 원주율, 시간
- 이산형 자료 (Discrete data)
- 셀 수 있는 관측값을 가짐
- ex) 주문 상품 개수
- 연속형 자료 (Continuous data)
- 자료 요약
- 필요성
- 많은 양의 자료를 의미 있는 수치로 요약하여 대략적인 분포상태를 파악 가능
- 방법
- 평균 (m)
-
import numpy as np np.mean()
- 관측값들을 대표할 수 있는 통계값
- 수치형 자료의 통계값 중 가장 많이 사용되는 방법
- 극단적으로 큰 값이나 작은 값의 영향을 많이 받음
-
- 분산 (v)
-
from statistics import variance variance()
- 자료의 평균으로 부터 떨어진 정도를 숫자로 표현한 것
-
- 표준편차 (s)
-
from statistics import stdev stdev()
- 분산의 양의 제곱근
-
- 평균 (m)
- 그래프 표현 방식
- 히스토그램
-
# X축 : 계급 / Y축 : 빈도 import matplotlib.pyplot as plt plt.hist()
- 수치형 자료를 일정한 범위를 갖는 범주로 나누고 막대그래프와 같은 방식으로 나타냄
-
- 히스토그램
- 필요성
- 개념
- 범주형 자료 (Categprocal data)
- 개념
- 질적 자료 (Qualitative data)
- 수치로 측정이 불가능한 자료
- 범주형자료를 숫자로 표현할 수 있지만, 숫자로 표현되었다해서 무조건 수치형 자료인것은 아님!
- 구분
- 순위형 자료 (Ordinal data)
- 범주 사이의 순서에 의미가 있음
- ex) 학점
- 명목형 자료 (Norminal data)
- 범주 사이의 순서에 의미가 없음
- ex) 혈액형
- 순위형 자료 (Ordinal data)
- 자료 요약
- 필요성
- 다수의 범주가 반복해서 관측되므로, 각 범주에 속하는 관측값의 개수를 측정
- 관측값의 크기보다 포함되는 범주에 관심 多 => 전체에서 차지하는 각 범주의 비율 파악 필요
- == 효율적으로 범주간의 차이점을 비교 가능
- 방법
- 도수분포표(Frequency Table)
- 범주형 자료에서 범주와 그 범주에 대응하는 도수, 상대도수를 나열해 표로 만든것
- 도수(Frequency)
- 각 범주에 속하는 관측값의 개수
- value_counts()
- 상대도수(Relatice Frequency)
- 도수를 자료의 전체개수로 나눈 비율
- value_counts(normalize=True)
- 도수분포표(Frequency Table)
- 그래프 표현 방식
- 막대그래프
-
# X축 : 범주의 나열 / Y축 : 도수에 대한 눈금 import matplotlib.pyplot as plt plt.bar()
- 각 범주가 가지는 도수의 크기차이를 비교하기 쉬움
- 단, 각 범주가 차지하는 비율의 비교는 어려움
-
- 막대그래프
- 필요성
- 개념
- 수치형 자료 (Numerical data)
02 데이터 전 처리하기
- 데이터 전처리의 필요성
- 대부분의 머신러닝 모델은 숫자 데이터를 입력받지만, 실제 데이터는 여러 형태로 존재
- 전처리를 통하여
- 머신러닝 모델이 이해할 수 있는 수치형 자료로 변환
- 결측값 및 이상치를 처리하여 데이터 정제
- 학습용 및 평가용 데이터 분리
- 전처리 방법
- 수치형 자료의 전처리
- 자료 변환 방식
- 스케일링(Scaling) - 정규화(Normalization) - 표준화(Standardization)
- 스케일링(Scaling)
- 변수 값의 범위 및 크기를 변환하는 방식
- 변수 간의 범위 차이가 나면 사용
- 정규화(Normalization)
- X' = ( X - X_min ) / ( X_max - X_min )
- 표준화(Standardization)
- X' = ( X - 평균 μ ) / 표준편차 σ
- 스케일링(Scaling)
- 범주화
- 변수의 값보다 범주가 중요한 경우 사용
- 스케일링(Scaling) - 정규화(Normalization) - 표준화(Standardization)
- 자료 변환 방식
- 범주형 자료의 전처리
- 범주의 크기가 의미 없다면 명목형 자료, 크기가 의미 있다면 순서형 자료로 구분
- 명목형 자료의 전처리
- 수치 맵핑 방식
- 2개라면 (0, 1)로 맵핑 / 3개 이상인 경우, 수치의 크기 간격을 같게 하여 수치 맵핑
- 더미(Dummy) 기법
-
# 혈액형 데이터를 더미변수로 바꾸는 예시 from pasty import dmatrix df = pd.DataFrame(["A", "B", "AB", "O"], column=["x"]) # 문자열에 0을 추가하는 이유 : 상수항이 생기지 않도록 dmatrix("x + 0", df)
- 더미 기법을 사용하여 각 범주를 0또는 1로 변환
- 수치 맵핑 방식
- 순서형 자료의 전처리
- 수치 맵핑 방식
- 수치에 맵핑하여 변환하지만, 수치 간 크기 차이는 커스텀 가능
- 단, 크기 차이가 머신러닝 결과에 영향을 끼칠 수 있음
- 수치 맵핑 방식
- 공통 처리
- 결측값(missing data)
- = Null, None, NaN 값
- 처리 방법
- 결측값이 존재하는 샘플 삭제
- 결측값이 많이 존재하는 변수 삭제
- 결측값을 다른 값으로 대체
- 처리 방법
- = Null, None, NaN 값
- 이상치(Oulier) 처리
- 이상치가 있으면, 모델의 성능을 저해할 수 있음
- 이상치는 일반적으로 전 처리 과정에서 제거하며, 어떤값이 이상치인지 판단하는 기준이 중요
- 처리 방법
- 데이터 분포를 보고 직접 판단
- 통계 지표(카이제곱검정, IQR 지표 등)를 사용하여 판단
- 머신러닝 기법을 사용하여 이상치 분류
- 처리 방법
- 데이터 분리
- 머신러닝 모델을 평가하기 위해서는 학습에 사용하지 않은 평가용 데이터가 필요
- 학습데이터 : 평가용 데이터 = 7 : 3 or 8 : 2 사용
- 지도학습의 경우 Feature 데이터와 Label 데이터로 구분
- Feature 데이터 : label을 예측하기 위한 입력 값
- Label 데이터 : 예측해야 할 대상이 되는 데이터
- 결측값(missing data)
- 수치형 자료의 전처리
03 지도학습 - 회귀
- 데이터를 가장 잘 설명하는 모델을 찾아 입력값에 따른 미래 결과값을 예측하는 알고리즘
- 종류
- 단순 선형 회귀
- 입력값이 1개인 경우에만 적용 가능
- 데이터를 설명하는 모델을 직선형태 [ Y = β_0 + β_1 * X ]로 가정
- 실제값과 예측값의 차이의 제곱의 합으로 비교
- Loss함수
- 실제값과 예측값의 차이를 제곱하여 평균을 구한 함수
- β_0( y절편 ), β_1( 기울기 ) 값을 조절하여 Loss 함수의 크기 조절 가능
- Loss 함수가 작을 수록 좋은 모델
- Loss함수의 크기를 작게할 수 있는 방법
- Gradient descent (경사하강법)
- β_0, β_1값을 랜덤하게 초기화
- 현재 β_0, β_1값으로 Loss 값 계산
- 현재 β_0, β_1값을 어떻게 변화해야 Loss값이 작아지는지 알수있는 Gradient값 계산
- Gradient값을 활용하여 β_0, β_1값 업데이트
- Loss 값의 차이가 거의 없을때까지 위의 과정을 2~4번 반복
- Normal equation (least squares)
- Brute force search
- ..etc
- Gradient descent (경사하강법)
- Loss함수
- 다중 선형 회귀
- 여러개의 입력값과 결과값간의 관계 확인 가능
- but) 여러개의 입력값 사이 간의 상관 관계가 높을 경우, 결과에 대한 신뢰성을 잃을 가능성이 있음
- 데이터를 설명하는 모델을 [ Y = β_0 + β_1 * X_1 + β_2 * X_2 + β_3 * X_3 + ... + + β_m * X_m ]로 가정
- 실제값과 예측값의 차이의 제곱의 합으로 비교
- Loss함수
- 실제값과 예측값의 차이를 제곱하여 평균을 구한 함수
- β_0, β_1, β_2, ..., β_m 값을 조절하여 Loss 함수의 크기 조절 가능
- Loss 함수가 작을 수록 좋은 모델
- Loss함수의 크기를 작게할 수 있는 방법
- Gradient descent (경사하강법)
- β_0, β_1, β_2, ..., β_m값을 랜덤하게 초기화
- 현재 β_0, β_1, β_2, ..., β_m값으로 Loss 값 계산
- 현재 β_0, β_1, β_2, ..., β_m값을 어떻게 변화해야 Loss값이 작아지는지 알수있는 Gradient값 계산
- Gradient값을 활용하여 β_0, β_1, β_2, ..., β_m값 업데이트
- Loss 값의 차이가 거의 없을때까지 위의 과정을 2~4번 반복
- Gradient descent (경사하강법)
- Loss함수
- 단순 선형 회귀
- 회귀 알고리즘 평가
- 목표를 얼마나 잘 달성했는지 정도를 알아야 어떤 모델이 좋은 모델인지 평가가 가능함
- 평가지표(실제 값과 모델이 예측하는 값 차이에 기반한 평가방법) 종류
- RSS (단순오차) ==실제값과 예측값의 단순 오차 제곱의 합
- 값이 작을수록 모델의 성능이 높음
- 가장 간단한 평가 방법으로 직관적인 해석이 가능
- but) 오차를 그대로 이용 => 입력값의 크기에 의존적
- 절대적인 값과의 비교는 불가능
- MSE(Mean Squared Error) == 평균 제곱 오차
- RSS에서 데이터의 수만큼 나눈 값
- 값이 작을수록 모델의 성능이 높음
- but) 평균값을 그대로 이용 => 입력값의 크기에 의존적
- 절대적인 값과 비교가 불가
- 이상치에 민감
- MAE(Mean Absolute Error) == 평균 절댓값 오차
- 실제 값과 예측값 오차의 절대적인 평균
- 값이 작을수록 모델의 성능이 높음
- 변동성이 큰 지표와 낮은 지표를 같이 예측시 유용한 지표
- but) 평균값을 그대로 이용 => 입력값의 크기에 의존적
- 절대적인 값과 비교가 불가
- R² (결정계수) == 회귀 모델의 설명력을 표현하는 지표
-
- TSS == 데이터 평균값과 실제값 차이의 제곱
- TSS == 데이터 평균값과 실제값 차이의 제곱
- 1에 가까울수록 높은 성능의 모델
- 값이 0인 경우 데이터의 평균 값을 출력하는 직선 모델을 의미
- 음수 값이 나온 경우, 평균값 예측 보다 성능이 좋지 않음
-
- MAPE
- RSS (단순오차) ==실제값과 예측값의 단순 오차 제곱의 합
04 지도학습 - 분류
- 주어진 입력 값이 어떤 클래스에 속할지에 대한 결과 값을 도출하는 알고리즘
- 종류
- 트리 구조 기반
- 의사결정나무
- 개념
- 스무고개와 같이 특정 질문들을 통해 정답을 찾아가는 모델
- 최상단의 뿌리 마디에서 마지막 끝 마디까지 아래방향으로 진행
- 좋은 분리기준 찾기
- 불순도 ==다른 데이터가 섞여 있는 정도
- 지니 불순도 (Gini Impurity)
- Gini Impurity = ( n_1 / N ) * Gini_Index_1 + ( n_2 / N ) * Gini_Index_2
- n_i = i번째 자식 마디의 데이터 개수 / N : 부모 마디의 데이터 개수
- 지니계수 (Gini Index)
- 해당 구역 안에서 특정 클래스에 속하는 데이터의 비율을 모두 제외한 값 => 다양성을 계산
- Gini Index = 1 - (yes의 확률)² - (no의 확률)²
- 지니계수 (Gini Index)
- 가장 낮은 Gini Impurity를 갖는 기준을 선택
- 지니 불순도 (Gini Impurity)
- trade-off
- 의사결정나무의 깊이가 깊어질수록 세분화해서 나눌 수 있으나, 너무 깊은 모델은 과적합(Overfitting)을 야기 (지양)
- 불순도 ==다른 데이터가 섞여 있는 정도
- 의사결정나무의 특징
- 결과가 직관적이며, 해석 용이
- 학습이 끝난 트리의 작업속도는 매우 빠름
- 깊이가 깊어질수록 과적합( Overfitting )문제 발생 가능성 높음
- 개념
- 랜덤포레스트
- 의사결정나무
- 확률 모델 기반
- 나이브 베이즈 분류기
- 결정 경계 기반
- 선형분류기
- 로지스틱 회귀 분류기
- SVM
- 신경망
- 퍼셉트론
- 딥러닝 모델
- 트리 구조 기반
- 적합한 모델인지를 판단하는 평가지표
- 요약
- 혼동행렬 (Confusion Matrix) : 분류 결과를 전체적으로 보고 싶을 때
- 정확도 (Accuracy) : 정답을 얼마나 잘 맞췄는지
- 정밀도 (Precision) : FP의 중요도가 높을 때
- 재현율 (Recall) : FN의 중요도가 높을 때
- 혼동행렬(Confusion Matirx)
- TP (True Positive) : 실제 Positive인 값을 Positive라고 예측 == 정답
- TN (True Negative) : 실제 Negative인 값을 Negative라고 예측 == 정답
- FP (True Positive) : 실제 Negative인 값을 Positive라고 예측 == 1형 오류
- FN (True Negative) : 실제 Positive인 값을 Negative라고 예측 == 2형 오류
- 정확도(Accuracy)
- 일반적으로 분류 모델의 주요 평가 방법으로 사용됨
- 전체 데이터 중에서 제대로 분류된 데이터의 비율로, 모델이 얼마나 정확히 분류하는지 나타냄
- but) 클래스 비율이 불균형 할 경우, 평가 지표의 신뢰성을 잃을 가능성 있음
- 정밀도(Precision) => Negative가 중요한 경우 사용
- 모델이 Positive라고 분류한 데이터 중에서 실제로 Positive인 데이터의 비율
- 즉, 실제로 Negative인 데이터를 Positive로 판단하면 안되는 경우 사용되는 지표
- ex) 스팸 메일이면 Positive, 일반 메일이면 Negative라 했을 때
- 재현율(Recall, TPR) => Positive가 중요한 경우 사용
- 실제로 Positive라고 분류한 데이터 중에서 모델이 Positive인 데이터의 비율
- 즉, 실제로 Positive인 데이터를 Negative로 판단하면 안되는 경우 사용되는 지표
- ex) 악성 종양이면 Positive, 양성 종양이면 Negative라 했을 때
- 요약
'AI > Edu' 카테고리의 다른 글
[ 2021 NIPA AI - 기본 ] 3. 공공데이터를 활용한 파이썬 데이터분석 프로젝트 - 2. 지하철 승하차 인원 정보를 활용한 역별 혼잡도 분석 (0) | 2021.12.16 |
---|---|
[ 2021 NIPA AI - 기본 ] 3. 공공데이터를 활용한 파이썬 데이터분석 프로젝트 - 1. 코로나 데이터 분석하기 (0) | 2021.12.16 |
[ 2021 NIPA AI - 응용 ] 2. 딥러닝 시작하기 (01~05) + α (0) | 2021.12.13 |
[ 2021 NIPA AI - 기본 ] 2. 데이터 분석을 위한 라이브러리 (01~05) + α (0) | 2021.10.22 |
[ 2021 NIPA AI - 기본 ] 1. 핵심 파이썬 기초 프로그래밍 (01~05) + α (0) | 2021.10.19 |
Comments