▶ 로지스틱 회귀 정의 & 비용함수 & 학습

1) 정의

→ 샘플이 특정 클래스에 속할 확률을 추정하는 것

→ binary(0 or 1)한 문제일 경우 주로 사용

 

2) 확률을 추정하는 법

입력 변수의 가중치 합을 계산

 

3) 로지스틱 함수

p는 f(x) 값의 산출물

p < 0.5 이면 y = 0

 p >= 0.5 이면 y = 1

 

4) 로지스틱 회귀 모델의 훈련

→ y = 1인 샘플은 높은 확률로, y = 0인 샘플은 낮은 확률로 추정하게 하는 최적의 가중치를 찾는 것이 목적

 

5) 로지스틱 회귀의 비용 함수

→ 비용함수는 p가 0에 가까워질수록 -log 값이 매우 커지고 1에 가까워질수록 0에 가까워진다.

positive한 샘플은 최대한 p를 1에 가깝게 만들어야 하고, negative한 샘플은 최대한 p를 0에 가깝게 만들어야 한다.

비용함수는 2차함수(볼록함수)이므로 경사하강법 혹은 다른 최적화 알고리즘을 통해 전역 최소값을 찾을 수 있다.

 

6) 실습

 

- 붓꽃 데이터 사용

 세 개의 품종 (Setosa, Versicolor, Virginica), 150개의 데이터 수, Petal(꽃잎) Sepal(꽃받침)의 너비와 길이를 가짐

 

위와 같이 iris 데이터 로드

 

x : 콜론을 하나 더 찍어서 2차원 배열로 만들어주기

y : versicolor가 뜨면 1, 아니면 0을 출력

 

위와 같이 defualt 값으로 모델의 데이터 학습

 

linspace() : 0~3 사이의 1000개 데이터 임의로 생성해주는 함수

 

위에서 학습시켰던 모델을 예측해본 것 

 

x_new.shape은 (1000,1)인데 y_proba.shape은 (1000,2)가 나옴

 

결과를 보면 [Versicolor가 아닐 확률, Versicolor일 확률]을 출력

→ 앞쪽데이터는 Versicolor가 아닐 것이라고 예측, 뒤로 갈수록 Versicolor일 것이라고 예측

 

시각화한 결과 Virginica는 너비가 약 1.4~2.5에 분포하고 있음을 알 수 있다.

 

▶ 소프트맥스 회귀

1) 정의

→ categorical(여러 클래스 분류)한 문제일 경우 주로 사용

 

2) 소프트맥스 함수

 

3) 소프트맥스 회귀 분류기의 예측

→ 여러 클래스 중에서 확률 값이 가장 높은 것을 실제 클래스라고 예측

 

4) 크로스 엔트로피

 추정된 클래스의 확률이 목표 클래스에 얼마나 잘 맞는지 판단하는 용도로 사용

 

5) 실습

multinomial을 표시하여 소프트맥스 회귀 사용 가능

solver: ibfgs -> 기본적으로 머신러닝 분야에서 많이 사용

C : L2 규제화 -> weight 값에 square 값을 해준 것

 

가장 큰 인덱스 값을 출력했을 때 위와 같이 virginica가 나오는 것을 확인할 수 있다.

 

위와 같이 predict_proba를 이용하여 값을 확인하는 것도 가능하다.

 

▶ 서포트 벡터 머신

1) 정의

→ 매우 강력하고 선형, 비선형 분류, 회귀 이상치 탐색에 사용할 수 있는 다목적 머신러닝 모델

→ 복잡한 분류 문제에 잘 들어맞고, 작거나 중간 크기의 데이터셋에 적합

→ 특성 스케일에 아주 민감

 

2) 서포트 벡터 머신의 분류

→ 첫번째 그림의 두 분류기는 정확히 분류는 하고 있으나 모델 분류기의 선이 훈련 데이터와 너무 가까워서 새로운 데이터가 들어왔을 때 정확히 분류하지 못할 수 있다.

→ SVM의 목적은 classfier를 할 때 클래스를 나누는 결정경계가 훈련샘플로부터 최대한 멀리 떨어뜨려 놓는 것이다.

→ 즉, SVM 분류기는 클래스 사이의 가장 폭이 넓은 구간을 찾는 것으로 이해할 수 있다

SVM은 특성 스케일에 민감하므로, 보통 사이킷런의 StandardScaler을 사용하면 결정경계의 명확성을 높일 수 있다.

 

3) 실습

① 선형 SVM 분류

pipeline은 데이터 스케일과 모델 적합을 한 번에 할 수 있다.

LinearSVC를 통해 SVM을 사용할 수 있다.

 

C는 규제항, loss는 hingeloss를 의미한다.

위와 같이 예측값이 1로 잘 나오는 것을 확인할 수 있다.

 

② 비선형 SVM 분류

위와 같은 경우에 비선형 SVM을 사용할 수 있다.

 

 

 

비선형 SVM은 Polynomial라는 변수 변환을 통해 할 수 있다.

 

※ SVM Hinge Loss

SVM에서 사용하는 기본적인 hinge loss 값은 위와 같다.

 

커널 서포트 벡터 머신

▷ 다항식 커널

다항식 특성을 추가하는 것처럼 간단하고 모든 머신러닝 알고리즘에서 잘 동작한다.

SVM 사용 시 kernel trick이라는 수학적 기교를 사용하여 실제로 특성을 추가하지 않았음에도 불구하고 다항식 특성을 많이 추가한 것과 같은 결과를 얻을 수 있다.

 

▷ 가우시안 RBF 커널

  다항 특성 방식과 마찬가지로 유사도 특성 방식을 모델에 적용할 수 있다.

▶ 시각화 라이브러리

1. Matplotlib

→ 파이썬으로 기본적인 차트들을 쉽게 그릴 수 있도록 도와주는 시각화 라이브러리

2. Seabor

→ matplotlib 기반으로 만들어진 통계 데이터 시각화 라이브러리

기본 설정

 

▶ Bar 차트 이해 및 제작

위와 같이 데이터를 불러올 수 있다.

len() 함수를 통해 배열 길이 할당

위와 같이 다양한 옵션을 추가할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

▶ Colab 

- 코드 셀 위에 삽입 : Ctrl + M A

- 코드 셀 아래에 삽입 : Ctrl + M B

- 코드 셀을 마크다운 셀로 : Ctrl + M M

- 마크다운 셀을 코드 셀로 : Ctrl + M Y

- 되돌리기 : Ctrl + M Z

- 셀 삭제 : Ctrl + M D

- 실행 및 출력 : Ctrl/Shift/Alt + Enter

- 전체 셀 실행 : Ctrl + F9

 

▶ Pandas란?

→ 데이터 분석을 위한 핵심 라이브러리

→ Series와 DataFrame을 활용 →  numpy(선형대수)dml 1차원, 2차원 array와 유사

→ array에 index가 있는 형태

 

▷ Pandas 라이브러리를 활용한 데이터 전처리

위와 같이 new_friend.csv라는 파일이 잘 생성된 것을 확인할 수 있다.

index=False를 해주지 않으면 위와 같이 출력된다.

 

▶ Series 및 DataFrame

※ 인덱스 사용 이유 : 조회, 데이터 정렬

sort_values() 함수는 시각화할 때 많이 사용

오름차순: ascending=True, 내림차순: ascending=False

단, 변수로 할당해주어야만 다음 값에도 적용됨

위와 같이 Dataframe을 딕셔너리 형태로 넣을 수 있다.

위와 같이 대괄호를 이용하여 DataFrame 생성 시 row 방향으로 데이터가 생성되는 것을 확인할 수 있다.

 

▶ DataFrame 행, 열 필터링 & 삭제 & 수정

위와 같이 하나의 row만 가져오는 경우 series 형태가 되는 것을 확인할 수 있다.

DataFrame 형태로 가져오고 싶다면 위와 같이 대괄호를 하나 더 써주면 된다.

위와 같이 job이라는 행에 해당하는 데이터를 모두 가져올 수 있다.

iloc는 인덱스 기준, loc는 데이터프레임의 형태 그대로를 가져온다.

- iloc는 인덱스와 컬럼을 리스트 배열로 선택하는 것

- loc는 인덱스와 컬럼을 문자로 선택하는 것

인덱스를 변경한 후 실행한 결과는 위와 같다.

 

★ 데이터 값이 비어 있는 경우 대체값 처리가 중요하다.

ex) 평균값, 최빈값, 삭제기법, 분포를 확률적으로 랜덤 샘플링→시각화(EDA) 등으로 처리

arange(n) 함수는 0~n-1의 수를 생성해줌, reshape(m,n) 함수는 데이터의 차원을 바꿔줌(m행 n열)

axis=1은 열 삭제, axis=0은 행 삭제, axis의 default 값은 0이다. 

inplace 옵션은 변수 할당 역할을 해준다.

df[]로 한번 더 묶어주기, 안묶어주면 True/False 형태로 출력됨

조건 필터링할 때는 괄호를 주의하자!

and : & , or : |  → 조건마다 괄호로 묶어주기!

apply() 함수를 통해 위와 같이 포함 조건 필터링을 할 수 있다.

 

▶ DataFrame 그룹 생성(groupby)

→ pandas의 groupby() 연산자를 사용하여 집단, 그룹별로 데이터 집계 및 요약 가능

→ dataframe을 지정한 그룹으로 나누고, 그룹별로 집계함수를 적용하고, 그룹별 집계 결과를 하나로 합치는 과정

위와 같이 abalone 데이터를 불러올 수 있다.

위와 같이 shape를 통해 row와 columns 수를 확인할 수 있다.

isnull() 함수를 통해 결측값 여부(T/F)를 확인할 수 있고, sum() 함수를 통해 (1/0)을 확인할 수 있다.

한번 더 sum()을 해주면 위와 같이 정확한 개수를 파악할 수 있다.

sex와 같은 카테고리컬한 변수는 describe()에서 확인할 수 없다.

성별을 기준으로 평균집계 groupby를 해준 것이다.

위와 같이 간단하게 표현해도 같은 결과를 확인할 수 있다.

위와 같이 length_bool이라는 새로운 변수가 추가된 것을 확인할 수 있다.

위와 같이 groupby() 활용 가능하다.

위와 같이 원하는 컬럼의 집계 결과를 출력하도록 하는 것도 가능하다.

 

▶ DataFrame에서 자주 사용하는 전처리 기법

abalone_df.duplicated().sum()으로 간단하게도 확인 가능

중복데이터 생성 후 duplicated()를 해보면 위와 같은 결과를 확인할 수 있다.

삭제는 drop_duplicates()를 이용

keep='last' 옵션을 사용하여 기존값/추가값 선택 가능

 

 

 

 

 

 

 

 

 

▶ 군집화 알고리즘

→ 주어진 데이터들의 유사성을 분석하여 적절한 개수의 클러스터로 만드는 알고리즘

→ 점들 간의 거리와 밀집도를 종합적으로 판단

 

▷ K-Means 알고리즘

→ 데이터에서 초기 k개의 점을 선정하여 무작위 휴리스틱 기법

→ 어떤 점이 특정 영역 안에 들어올 확률을 가지고 군집을 만들 수 있음

1) 아무렇게나 그리기

2) 정답 비교하기

3) 영역 조정하기

4) 학습 완료

 

▷ 차원의 저주(Curse of Dimensionality)

→ 차원(특징 개수)이 증가할 수록 데이터의 분포 분석 또는 모델 추정에 필요한 샘플 데이터 수가 기하급수적으로 증가

 

☆ 군집화는 비지도 알고리즘이다!

- 영역을 나누는 기준이 필요

- 정답지 없이 학습하기 때문에 완전한 모델이 나오기 어려움

- 분류 알고리즘보다 결과가 더 좋은 경우도 있음

- 때로는 보조 지표로, 때로는 분류 알고리즘 대체용으로 쓰임

 

▶ 악성코드 분류 모델 구현

df.info() 결과

- 기본적으로 모든 머신러닝 모델은 피처를 숫자로만 받을 수 있다.

- object라고 되어 있는 것은 학습에 사용할 수 없다는 의미를 나타낸다.

→ 1) 제외시키고 학습하는 방법, 2) 수치형으로 변환해서 사용하는 방법이 있다.

 

 

 

 

 

 

 

 

 

☆ 최근 악성 코드는 실행되기까지의 과정이 정교해지고 탐지가 어려워지고 있다.

 

▶ 악성코드

- 최근 악성코드는 유형보다 군으로 분류하는 것이 의미가 있음

- 실행 파일 형식에 국한되지 않고 소프트웨어 취약점과 문서를 이용

 

▷ 악성코드 동향

- 랜섬웨어 급증

- IoT 디바이스를 악용한 DDoS 악성코드

- Fileless Malware

- 익스플로잇 킷과 함께 서비스 형태로 제공되는 악성코드(MaaS)

 

▷ 악성코드 유포 방법

- 이메일을 통한 유포(스피어 피싱)

- 제로데이 취약점을 이용한 유포

 

▷ 악성코드 동작 방식

- 실행 파일 형식을 가지는 악성코드

- 문서 형식을 가지는 악성코드

- 웹 기반 코드로 실행되는 악성코드

- 스크립트 기반 악성코드

 

▷ 악성코드 대응 절차

1) 신속한 정보 제공 

2) 공격 차단 및 분석

3) 긴급 백신 제작 및 배포

4) 패턴 및 시그니처 개발

5) 솔루션 개발

 

▷ 악성코드 분석

1) 자동화 분석

- Virustotal 사이트

2) 정적 분석

- 악성코드를 실행하지 않고 분석하는 방법

- 파일 문자열, 헤더 정보, 추가 리소스 등

3) 동적 분석

- 악성코드를 실행하면서 분석하는 방법

- 레지스트리, 파일시스템, 프로세스, 네트워크 등

 

▶ 분류 알고리즘

→ 데이터와 카테고리의 관계를 학습해 새로운 데이터의 카테고리를 판별하는 것

1) 나이브 베이즈

ex) 스팸 메일 분류와 이상 행동 검출

2) 의사 결정 트리

- 데이터 카테고리가 범주형일 때만 사용 가능

- 분석 결과가 트리 구조로 표현되어 결과를 쉽게 이해하고 설명할 수 있음

ex) ID3 알고리즘 → 데이터를 가장 잘 쪼개는 특성 선택

ex) 랜덤 포레스트 : 여러 개의 의사 결정 트리를 만들고 다수결로 결정

 

▷ 인스턴스 기반 학습

ex) K-NN(Nearst Neighbors) 

→ 데이터베이스에 데이터를 저장한 뒤 새로운 데이터와 유사한 값을 찾아내는 방법

1) 모델 기반 : 학습 데이터를 분석해 이를 분류 또는 회귀하는 최적의 함수를 찾아내는 방법

2) 인스턴스 기반 : 데이터베이스에 데이터를 저장한 뒤 새로운 데이터와 유사한 값을 찾아내는 방법

 

ex) 서포트 벡터 머신(SVM)

→ 데이터를 구분 짓는 선에 가장 가까운 점들의 거리를 최대화하는 방법

- kernel : 선형 함수를 쓸 것인가, 커널 함수를 쓸 것인가

- C : 선을 얼마나 부드럽게 그을 것인가

- Gamma : 단일 데이터의 영향이 얼마나 크게 미치는가

 

 

+ Recent posts