[머신러닝] 논리회귀

Yungsang Hwang·2022년 5월 14일
0

파이썬 머신러닝

목록 보기
1/7
post-thumbnail

✏️ 실전 머신러닝 기초 공부자료

👀 논리회귀

👓 논리 회귀 (Logistic Regression) 란?

성공/실패 와 같이 이진 클래스(Binary Class)로 나뉘는 출력 값을 예측하기 위해 사용하는 머신러닝 방법
실제 자연/사회 현상에서 예측값이 선형이 아닌 S커브로 이루어지는 경우가 많다고 함
시그모이드 함수 사용

📌 시그모이드 함수 (Sigmoid Function)

출력 값이 0이나 1로 구분하고 싶을 때, 임계치를 기점으로 0과 1로 가까워지게 만들어주는 논리 함수

📌 Cross Entropy

논리 회귀에서의 손실 함수. 원래의 가설대로 Cost Function이 최소화 될 수 있도록 맞추려고 노력하는 역할을 한다

👀 다항 논리 회귀

👓 다항 논리 회귀란?

다항 분류에 속함
소프트맥스 사용

📌 원핫 인코딩(One-Hot Encoding)

다항 논리 회귀 문제를 풀 때, 그래프를 예쁘게 표현하기 위한 방법
✍️ 클래스 개수만큼 배열을 0으로 채우고 각 클래스에 해당하는 인덱스에 1넣기

📌 Softmax

✍️ 선형 회귀 모델을 사용할 때, 연속적인 숫자의 값의 크기를 비교하여 규칙대로 숫자를 변경하고 합이 1이되도록 만드는 함수

예제_선형 회귀 출력값 2 / 1 / 0.1 을 소프트맥스 함수 사용하기

소프트맥스를 사용하면, 값을 0,7 / 0,2 / 0.1 로 변경한다. 세 값을 합치면 1이 되고, 임계점을 기준으로 논리 회귀를 통해 출력하면 1 / 0 / 0 이 된다.

📌 SVM (Support Vector Machine)

분류 모델을 푸는 분류기
특성으로 나뉘어진 요소 사이에 서포트벡터를 그려 요소와 벡터 사이의 거리, 마진을 확인해서 학습시키는 머신러닝 방법

👀 전처리 (Pre-Processing)

👓 전처리란?

데이터 정제 작업을 의미하며, 정규화/표준화가 있음
✍️ 머신러닝 개발에서 80%를 차지할 정도로 굉장히 중요한 부분이다

예제_100점 만점의 시험, 500점 만점의 시험에서 50점을 맞았는데 그 실력이 동일하다고 학습해버린다면?

👓 정규화(Normalization)란?

✍️ 데이터를 0과 1사이의 범위를 가지도록 만드는 것

예제_100점과 500점의 시험에서 성적을 정규화하면?

  • 👑 풀이_100점은 0.5 / 500점은 0.1 로 정규화

👓 표준화(Standardization)란?

✍️ 데이터의 평균이 0이 되도록하고 표준편차가 1이되도록 만듦
0을 기준으로 편차가 생김

🕵️‍♀️ 이진 논리 회귀 실습

🚩 라이브러리 임포팅

전처리 과정을 수행하기 위해 sklearn의 preprocessing 임포트

from sklearn.preprocessing import StandardScaler

🚩 csv 칼럼 추출

데이터 테이블 중 원하는 필드만 사용하기 위해 pandas 라이브러리를 사용하여 추출하기

df = pd.read_csv('train_and_test2.csv', usecols=[
  'Age', # 나이
  'Fare', # 승차 요금
  'Sex', # 성별
  'sibsp', # 타이타닉에 탑승한 형제자매, 배우자의 수
  'Parch', # 타이타니게 탑승한 부모, 자식의 수
  'Pclass', # 티켓 등급 (1, 2, 3등석)
  'Embarked', # 탑승국
  '2urvived' # 생존 여부 (0: 사망, 1: 생존)
])

👨‍💻 전처리_비어있는 값

비어있는 값(null/na)을 확인하고 해당하는 행을 제거해야 함

print(df.isnull().sum())
df = df.dropna()

🚩 데이터 분할

데이터 모델에 필요한 X, Y 값을 테이블에서 각각 분리하기
분리된 데이터를 모델에 사용하기 위해서 np.float32 타입정의 또한 필요함

# 2urvived 필드만을 제외하기
x_data = df.drop(columns=['2urvived'], axis=1)
x_data = x_data.astype(np.float32)

👨‍💻 전처리_표준화

데이터를 0을 기준으로 크거나 작은 형식으로 통일하게 만듦

scaler = StandardScaler()
x_data_scaled = scaler.fit_transform(x_data)

🎯 Sigmoid function

이진 논리 회귀 사용을 위한 Sigmoid function 사용 및 이진 크로스엔트로피 사용

model = Sequential([
  Dense(1, activation='sigmoid')
])

model.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.01), metrics=['acc'])

🕵️‍♀️ 다항 논리 회귀 실습

🚩 라이브러리 임포팅

다항 논리 회귀에 사용되는 OneHot Encoding 라이브러리 임포트

from sklearn.preprocessing import OneHotEncoder

🚩 테이블 필드 이름 변경하기

데이터 중 필드 이름이 정확하지 않아 가독성이 떨어질 때 사용함

df = pd.read_csv('Wine.csv', names=[
  'name'
  ,'alcohol'
  ,'malicAcid'
  ,'ash'
])

👨‍💻 One-hot Encoding

다항 논리 회귀에서 컴퓨터가 잘 볼 수 있도록 원-핫 인코딩을 통해서 각 Y값의 인덱스 넘버를 행렬로 달아줌

encoder = OneHotEncoder()
y_data_encoded = encoder.fit_transform(y_data).toarray()

👨‍💻 데이터셋 분할 - 전처리 데이터 적용

전처리를 진행한 데이터를 넣어 데이터 셋을 분할함

x_train, x_val, y_train, y_val = train_test_split(x_data_scaled, y_data_encoded, test_size=0.2, random_state=2021)

👨‍💻 다항논리회귀-모델 학습

Dense Layer, softmax, loss=categorical_crossentropy 사용

model = Sequential([
  Dense(3, activation='softmax')
])

model.compile(loss='categorical_crossentropy', optimizer=Adam(lr=0.02), metrics=['acc'])
profile
하루종일 몽상가

0개의 댓글