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

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' 옵션을 사용하여 기존값/추가값 선택 가능

 

 

 

 

 

 

 

 

 

+ Recent posts