오늘의 목표 : 2장 끝내기! 아자아자!
특징 공학 단계를 통해 선별한 특징 조합 데이터를 분석해 최적의 모델을 찾는 단계
' 모델 구축 - 모델 평가 및 최적화 단계 '로 구분된다.
목적 : 데이터를 가장 잘 표현해주는 선을 찾는다 = 데이터를 대표하는 하나 이상의 함수를 찾는다 = 일반화를 한다.
머신러닝 모델 성능 개선 방법 : 데이터와 모델을 나누는 방법을 개선
1. Bagging (배깅) : 전체 데이터를 여러 개의 샘플 데이터로 나누어 여러 번 학습한 뒤 전체 결과를 집계해 판단하는 방법
2. Boosting (부스팅) : 각 샘플 데이터로 모델을 학습하고 최종 판단은 각 모델의 판단 결과를 더해 많은 쪽에 손을 들어주는 (가중치 부여) 방식
3. Stacking (스태킹) : 서로 다른 모델을 조합해 최고의 성능을 내는 모델을 만드는 방식
무조건 복잡한 모델을 사용한다고 해서 성능이 좋아진다고 보장할 수 없다
모델 평가를 할 때에는 이 세상 어디에도 완벽한 모델은 존재 하지 않는다는 사실을 받아들여야 하며, 항상 만든 모델이 정확하지 않을 수도 있다는 전제하에 모델을 평가해야 한다.
정보 보안 영역에서는 분류 알고리즘이 가장 많이 사용된다.
모델 정확도 측정 기준 : 혼돈 행렬 (Confusion Matrix)
Actual : 실제 정답 값 // Predicted : 모델 예측 값

ex ) 악성코드와 정상 프로그램을 분류하는 모델
False Negative : 정상으로 판단한 것(Negative)이 틀렸다(False) : 오탐(재현율)
False Positive : 악성코드로 판단한 것(Positive)이 틀렸다(False) : 과탐(정밀도)
정확도 (Accuracy) : TP + TN / TP + FN + FP + TN
재현율 (Recall) : TP / TP + FN
정밀도 (Precision) : TP / TP + FP
모델 성능 평가 후 개선 방법
모델 실전 배치 방식
통계학 : 데이터에서 의미를 찾아내는 학문
머신러닝 : 데이터에서 찾은 의미를 활용하기 위한 학문
평균
중간값
최빈값
범위 정보
사분위 수
머신러닝에서 확률을 크게 2가지 관점에서 사용한다. 분포 & 조건부 확률
조건부 확률 : 어떤 사건 B가 일어났을 때, 사건 A가 일어날 확률
이를 공식으로 잘 정리한 것 : Bayes Therorem (베이즈 정리)
대표적인 예시에는 스팸 메일 분류기가 있다.
데이터의 평균을 기준으로 넓게 퍼져 있는 경우 : 분산이 크다
데이터가 평균을 기준으로 밀집되어 있는 경우 : 분산이 작다
데이터의 분포는 수치상으로 판단이 어려운 정보도 쉽게 식별해낼 수 있도록 도와준다.
(참고로 이거 지금 머신러닝 시간에 배우고 있는거당 ㅎㅎ 반갑구만~)
뉴럴 네트워크


뉴럴 네트워크 기반 모델은 퍼셉트론의 개수, 레이어의 개수, 네트워크 구조, 가중치를 계산하는 방식, 학습을 하는 방식, 성능 개선 방식 등 모든 것을 다 분석가가 직접 설계해야 한다.
레이어가 추가되고, 퍼셉트론이 추가된다는 것은 학습 데이터에만 딱 들어맞는 모델이 만들어질 가능성이 크다는 것 = 신규 데이터를 잘 판단하지 못하는 overfitting(오버피팅) 현상 발생 가능
이렇게만 보면, 딥러닝 모델이 매우 좋아보이지만, 정보 보안 분야에서는 널리 활용되지 못한다.
왜냐! 딥러닝 모델을 사용하면 특징과 모델의 결과값 사이의 인과 관계를 파악할 수 없다.
책에서는 활용성과 정보 보안 특수성을 고려해 모든 실습을 파이썬으로 진행한다.
머신러닝 모델링 시 모든 데이터는 테이블 형태로 존재한다는 가정으로 처리한다.
= 모든 데이터는 관계형 데이터베이스에 저장되는 형식을 가진다고 보면 된다.
필요에 따라 데이터의 특정 요소 또는 범위 데이터에 접근하고, 데이터를 분할, 병합, 수정할 수 있어야 한다.
이제! 환경 구축을 해보겠습니다~ 저는 M2 맥을 사용하기 때문에, UTM을 사용합니다.
기존에 사용하고 있던 Ubuntu(UTM Gallery를 이용한, Ubuntu 22.04)가 있기 때문에, 이를 활용한다.
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install vm
를 완료했으면, ubuntu 내의 firefox에 들어가 아나콘다를 다운로드 받아준다.
나는 아래의 사진에서 가운데에 있는 ARM64용을 다운받아주었다.
(Velog 사진크기 줄이는 방법이 뭘까..?)

cd Desktop
chmod 755 ./Anaconda3-2024.10-1-Linux-aarch64.sh
sudo ./Anaconda3-2024.10-1-Linux-aarch64.sh
라이선스를 열람하라는 말 > yes > Enter 누르고 한참 있다가 > yes > 아나콘다 설치 경로 확인후 > Enter

설치 후 이런게 뜨길래, 항상 anaconda를 사용할 건 아니라서 no를 했다.
터미널 재실행 후, 매번 anaconda 파일로 가기 귀찮아서
echo "source ~/Downloads/anaconda/etc/profile.d/conda.sh" >> ~/.bashrc
source ~/.bashrc
코드를 입력해 주었다.
conda -V
명령어 사용시, conda 24.9.2 가 뜨면, 설치 완료!
아나콘다를 이용해 가상환경을 만들어보자. 책에서는 파이썬 2.7 버전을 주로 사용할 예정이라고 하지만, 최신버전 아나콘다에서는 파이썬 2.7이 안되기 때문에, 나는 파이썬 3.9를 사용하겠다.

# To activate this environment, use
#
# $ conda activate mlsec_27
#
# To deactivate an active environment, use
#
# $ conda deactivate
주피터는 코드, 공식, 시각화 기능을 포함한 문서를 지원하는 오픈소스 웹 애플리케이션
일반적으로는, 아나콘다 설치 시 기본적으로 설치된다고 하지만, 나는 안되었기에 따로 설치했다ㅠ
conda install -c conda-forge notebook
~$ which python
home/ubuntu/.conda/envs/mlsec_27/bin/python
~$ pip install ipykernel
~$ sudo mkdir Downloads/anaconda/share/jupyter/kernels/mlsec_27
~$ sudo vi Downloads/anaconda/share/jupyter/kernels/mlsec_27/kernel.json
# kernel.json 파일 내용
{
"argv": ["/home/ubuntu/.conda/envs/mlsec_27/bin/python", "-m", "ipykernel", "-f", "{connection_file}"],
"display_name": "mlsec_27",
"language": "python"
}
# ESC -> :wq -> Enter
jupyter notebook --ip=0.0.0.0
# 나가고 싶을 땐, Ctrl + C

mlsec_27 가상환경 등록 성공!!!