printf("ho_tari\n");
6일차 본문
2025.04.21
Matplotlib
파이썬에서 자료를 차트나 플롯으로 시각화하는 패키지로 파이썬 데이터 시각화의 가장 기본적인 라이브러리
유연하게 커스텀이 가능하나 코드가 길고 어렵다는 단점이 있음
- 라인 플롯
- 스캐터 플롯
- 컨투어 플롯
- 서피스 플롯
- 바 차트
- 히스토그램
- 박스 플롯
pylab 서브패키지
- pylab 서브패키지는 matlab이라는 수치해석 소프트웨어의 시가화 명령을 거의 그대로 사용할 수 있도록 Matplotlib의 하위 API를 포장한 명령어 집합을 제공
Matplotlib 패키지 불러오기
- import matplotlib as mpl
- import matplotlib.pylab as plt
라인 플롯
- 선을 그림
- 데이터가 시간, 순서 등에 따라 어떻게 변화하는지 보여주기 위해 사용
- 명령은 pylab 서브패키지의 plot 명령을 사용
기본 문법
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(가로길이, 세로길이)) #그래프 크기 설정
sns.000plot(data=데이터, x=X축 컬럼, y=Y축 컬럼, hue=범례 컬럼) #seaborn으로 그래프 그리기
plt.title(제목) #제목 설정
plt.xlabel(라벨) #x축 라벨 설정
plt.ylabel(라벨) #y축 라벨 설정
plt.legend(loc=범례 위치 설정)
plt.xticks(rotation=x축 각도 설정)
plt.yticks(rotation=y축 각도 설정)
plt.show() #그래프 출력
한글 폰트 사용
pip install koreanize-matplotlib
# 설치한 한글 matplotlib 가져오기
import koreanize_matplotlib
스타일 지정
색상, 마커, 선 순서로 지정하고 지정하지 않은 경우 디폴트 값이 적용됨
색상
- 색 이름 혹은 약자를 사용하거나 #문자로 시작하는 RGB 코드 사용
- blue : b
- green : g
- red : r
- black : k
- white : w
마커
- 스타 (*) 마커
- 플러스 (+) 마커
- 원 (o) 마커
선
- 실선 (-)
- 대시선 (--)
- 대시-점선 (-.)
- 점선 (:)
그림 범위 지정
- 그림의 범위를 수동으로 지정하려면 zlim 명령과 ylim 명령을 사용
- 이 명령은 x축, y축의 최소값과 최대값
여러 개의 선 그리기
- 선을 여러 개를 그리려면 x 데이터, y 데이터, 스타일 문자열을 반복하여 인수로 넘긴다.
- 이 경우에는 하나의 선을 그릴 때처럼 x 데이터나 스타일 문자열을 생략할 수 없다.
범례 나타내기
- 여러 개의 라인 플롯을 동시에 그리는 경우에는 각 선이 무슨 자료를 표시하는지를 보여주기 위해 legend 명령으로 범례를 추가함
- 범례의 위치는 자동으로 정해지지만 수동으로 설정하고 싶으면 loc인수를 사용
- 범례 위치 loc 문자열
- best : 0
- upper right : 1
- upper left : 2
- lower left : 3
- lower right : 4
x 축, y 축 라벨, 타이틀 나타내기
- 플롯의 x축 위치와 y축 위치에는 각각 그 데이터가 의미하는 바를 표시하기 위해 라벨 추가
- 라벨을 붙이려면 xlabel, ylabel 명령 사용
- 제목은 title 명령 사용
바 차트
- x 데이터가 카테고리 값인 경우에는 bar 명령과 barh 명령으로 바 차트 시각화
- 가로 방향으로 바 차트를 그리려면 barh 명령 사용
히스토그램
- 히스토그램을 그리기 위한 hist 명령 사용
- hist 명령은 bins 인수로 데이터를 집계할 구간 정보를 받고 반환값으로 데이터 집계 결과를 반환한다.
스캐터 플롯
- 2차원 데이터 즉, 두 개의 실수 데이터 집합의 상관관계를 살펴보려면 scatter 명령 사용
- 스캐터 플롯의 점 하나의 위치는 데이터 하나의 x, y 값
Seaborn
- matplotlib을 좀 더 쉽고 아름답게 시각화하는 라이브러리
- matplotlib을 함께 사용하여 시각화하는 경우가 많음
스타일 설정하기
- sns.set_style(스타일)
- sns.set_palette(팔레트)
- 스타일 : darkgrid, whitegrid, dark, white
Scatter(산점도)
- sns.scatterplot(data=데이터, x=X축 컬럼, y=Y축 컬럼, hue=색) # 산점도 기본
- sns.lmplot(data=데이터, x=X축 컬럼, y=Y축 컬럼, hue=색) #산점도에 회귀선 추가
분포 관련 그래프
- sns.displot(data=데이터, x=X축 컬럼, hue=색) #히스토그램
- sns.displot(data=데이터, x=X축 컬럼, hue=색, kind='kde') #밀도 분포
- sns.boxplot(data=데이터, x=X축 컬럼, y=Y축 컬럼, hue=색) #상자 그림
- sns.pairplot(data=데이터, hue=색) #여러 컬럼들간의 분포
머신러닝 알고리즘
퍼셉트론(Perceptron: perception + neuron)
- 최초의 인공신경망(Artificial Neural Networks)은 1943년에 제안되고 로젠블렛의 퍼셉트론(1958) 프랭크 로젠블랫이 단층 신경망인 퍼셉트론 알고리즘을 개발함
- 모든 입력(요인/조건/형상) 추가
- 각 입력의 중요도에 대한 가중치 도입 (더 중요한 요소는 더 큰 가중치를 갖습니다.)
- 'YES' 또는 'NO' 결정을 내리기 위해 '바이어스' 도입 (퍼셉트론이 얼마나 쉽게 활성화 되는지의 정도)
- 결과값 (양수값 = YES, 음수값 = NO)
퍼셉트론 예시 (공원 가기)
인공신경망의 문제와 해결 (1960 ~ 1980)
MLP의 한계
머신러닝 지도학습의 대표적 기법
- 2000년대에 접어들면서 선형 함수뿐 아니라 비선형 함수(커널, 트리 구조 등)를 활용한 전통적인 머신러닝 알고리즘들이 활발히 연구되고 사용되었음
- 비교적 간단하고 명시적인 수학적 모델 (SVM, 결정 트리, 선형 회귀 등)
- 특정 문제에 맞게 설계된 알고리즘으로 입력 데이터와 출력 간의 관계를 명시적으로 학습
- 피처 엔지니어링(특징 추출)이 매우 중요
- 적은 양의 데이터로도 학습 가능하여 소규모, 저차원 데이터에서 우수한 성능
- 사람이 도메인 지식을 사용해 적절한 특징을 설계해야 성능이 좋음
- 더 적은 계산량, 비교적 단순한 모델, 고차원의 데이터에 더 효과적으로 대응하는 장점이 있음
머신러닝 지도학습의 대표적 기법
- 지도학습은 설명변수(혹은 독립변수, 특선 등으로 표현)와 목적변수(혹은 반응변수, 종속변수, 목표변수, 출력값 등으로 표현)간의 관계성을 표현해내거나 미래 관측을 예측해 내는 것에 초점이 있으며 주로 인식, 분류, 진단, 예측 등의 문제 해결에 적합함
이진 분류 (Binary Classification)
- 이진 분류란 규칙에 따라 입력된 값을 두 그룹으로 분류하는 작업으로 구분하려는 결과가 참 또는 거짓의 형태나 A 그룹 또는 B그룹으로 데이터를 나누는 경우를 의미함
다중 분류 (Multiclass Classification)
- 다중 분류란 규칙에 따라 입력된 값을 세 그룹 이상으로 분류하는 작업으로 구분하려는 결과가 A그룹, B그룹, C그룹 등으로 데이터를 나누는 경우를 의미함
- 하나의 특성이나 여러 개의 특성으로부터 나온 값을 계산해 각각의 클래스에 속할 확률을 추정함
- 다중 분류는 소프트맥스 함수를 활용해 클래스에 포함된 확률을 계산함
대표적인 분류 알고리즘 - 최근접 이웃 의미 이해하기
K-NN 알고리즘 알아보기
K-NN 알고리즘 특성 및 장단점
- 이웃으로 하는 K수를 다르게 하여 학습한 후 테스트하여 예측한 점이 속한 클래스에 따라 평면에 색을 칠한 그래프
- K-NN에서 가장 중요한 것은 K 수를 적절하게 정해 주는 것
K-NN 장점
- 특별히 훈련과정이 필요없이 훈련 데이터를 저장하는 것이 모델을 만드는 과정이므로 사용이 단순하고 이해하기 쉬움
- 제일 가까운 이웃이 누군지 찾고 분류하는데 모든 데이터를 사용하기 때문에 정보 손실이 없음
K-NN 단점
- 제일 가까운 것을 찾았는데 만약 잘못된 것이라면 예측이 틀려질 수 있음
- 데이터 수에 따라 K 만큼 찾아봐야 해서 훈련할 데이터가 많으면 시간이 굉장히 오래 걸려 예측하는 데 느려 많이 사용되지는 않음
K를 정하기 전에 처리해야 할 점
- 모든 데이터 지점을 동일한 범위로 두도록 초기에 데이터를 표준화
K-NN 알고리즘을 사용한 프로그래밍하기
1. 임의의 점 test(2, 5, 0)와 데이터셋을 다음과 같이 저으이하고 이웃과의 수 K를 5로 정하기
2. 임의의 점 test(2, 5) 위치에서 각 데이터셋의 점 사이와의 거리 측정하기
3. 측정한 거리가 작은 순으로 정렬한 후에 이웃의 수로 정한 만큼만 예측 대상에 포함하도록 neighbors 변수에 저장하기
4. K개 중 클래스별로 수를 세서 가장 많은 것을 예측 변수에 넣기
5. 임의의 점 원래 클래스와 K-NN 알고리즘을 사용하여 예측한 클래스가 무엇인지 확인해보기
머신러닝 패키지를 활용한 K-NN 알고리즘
- sklearn에서 제공하는 K-NN 분류기를 사용하면 K-NN 알고리즘을 적용해보기
분류 모델 대표적인 알고리즘 - Decision Tree
- 데이터를 분할해가며 결정 규칙을 학습하는 트리 기반 모델로 규칙 노드에서 규칙에 따라 분할되며 각각의 서브 트리를 생성함. 계속되는 규칙에 따라 노드가 분할되며 최종적으로 리프 노드에서는 클래스 값을 가지게 됨
장점
- 구조를 시각화하여 어떤 규틱에 따라 분류가 되는지 이해하기가 쉬움(해석력이 좋음)
- 비선형 관계 모델링 가능
단점
- 과도하게 학습하는 경향이 있어 새로운 데이터의 일반화 성능 저하 간으성(과적합 가능성이 있음)
- 작은 변화에도 큰 변동이 있을 수 있음
- 특성이 많은 고차원 데이터에서 성능 저하
- 일반적인 선형 관계를 모델링하기엔 어려운 경우가 있음
라이브러리
- from skelarn.tree import DecisionTreeClassifier
분류 모델 대표적인 알고리즘 - Random Forest
- 각 트리에 대해 데이터셋에서 무작위로 샘플링하여 훈련 데이터를 생성하며 각 트리의 예측 결과를 종합하여 최종 예측을 수행함. 대표적인 앙상블 모델임
장점
- 높은 정확도
- 다양한 데이터 유형 처리 가능
- 과적합 방지
단점
- 계산 비용과 메모리 사용량
- 해석력 넞을 수 있음
- 특성이 많은 고차원 데이터에서 성능 저하
라이브러리
- from sklearn.ensemble import RandomForestClassifier
평가 지표
정확도
- 모든 관찰 중 정확한 예측의 백분율
- 정확도 = (TP + TN) / (TP + FP + TN + FN) = (정확한 예측) / (모든 경우)
정밀도
- 양성(TP + FP)으로 예측되는 경우 중 진실 양성(TP)의 비율
- 정밀도 = (TP) / (TP + FP) = (진실 양성) / (총 예측 양성)
리콜 (Recall, 재현율)
- 양성 사례(TP + FN) 중 진실 양성(TP)의 비율
- Recall = (TP) / (TP + FN) = (진실 양성) / (총 실제 양성)
혼동 행렬 (cONFUSION mATRIX)
- 분류 모델의 성능을 평가하는데 사용
예시)
ROC (Receiver Operatina Characteristic) Curve
- X축 : False Positive Rate (FPR : 1-Specificity)
- Y축 : True Positive Rate (TPR : Sensitivity, Recall)
- Curve 시작 위치 : (TPR, FPR) = (0, 0), (TPR, 특이도) = (0, 1)
- Curve 끝 위치 : (TPR, FPR) = (1, 1), (TPR, 특이도) = (1, 0)
- TPR, FPR이 증가하는 방향으로 그려진 곡선 (양의 방향)
Perfect classifier : 긍정, 부정 모두 다 맞추는 위치로 classification 성능이 우수하다고 봄, FPR=0, TPR=1인 경우
- X축은 FP Rate(1-Specificity), Y축은 민감도(Sensitivity)를 나타내 이 두 평가 값의 관계로 모형을 평가함
- AUC(Area Under the Curve) : ROC 그래프의 밑부분의 면적으로 넓을수록 좋은 모형으로 평가함
- TPR, Recall, Sensitivity : 실제 값이 True인 것에 대해 예측 값이 True로 된 비율, TP / (TP + FN)
- FP-Rate : FP / (FP + TN), 1-특이도 : 실제가 False인데 예측이 True로 된 비율 (1종 오류 비율)
- FP-Rate 대신 Specificity(특이도)로 설명하는 문제가 있었음