성공/실패 와 같이 이진 클래스(Binary Class)로 나뉘는 출력 값을 예측하기 위해 사용하는 머신러닝 방법
실제 자연/사회 현상에서 예측값이 선형이 아닌 S커브로 이루어지는 경우가 많다고 함
시그모이드 함수 사용
출력 값이 0이나 1로 구분하고 싶을 때, 임계치를 기점으로 0과 1로 가까워지게 만들어주는 논리 함수
논리 회귀에서의 손실 함수. 원래의 가설대로 Cost Function이 최소화 될 수 있도록 맞추려고 노력하는 역할을 한다
다항 분류에 속함
소프트맥스 사용
다항 논리 회귀 문제를 풀 때, 그래프를 예쁘게 표현하기 위한 방법
✍️ 클래스 개수만큼 배열을 0으로 채우고 각 클래스에 해당하는 인덱스에 1넣기
✍️ 선형 회귀 모델을 사용할 때, 연속적인 숫자의 값의 크기를 비교하여 규칙대로 숫자를 변경하고 합이 1이되도록 만드는 함수
예제_선형 회귀 출력값 2 / 1 / 0.1 을 소프트맥스 함수 사용하기
소프트맥스를 사용하면, 값을 0,7 / 0,2 / 0.1 로 변경한다. 세 값을 합치면 1이 되고, 임계점을 기준으로 논리 회귀를 통해 출력하면 1 / 0 / 0 이 된다.
분류 모델을 푸는 분류기
특성으로 나뉘어진 요소 사이에 서포트벡터를 그려 요소와 벡터 사이의 거리, 마진을 확인해서 학습시키는 머신러닝 방법
데이터 정제 작업을 의미하며, 정규화/표준화가 있음
✍️ 머신러닝 개발에서 80%를 차지할 정도로 굉장히 중요한 부분이다
예제_100점 만점의 시험, 500점 만점의 시험에서 50점을 맞았는데 그 실력이 동일하다고 학습해버린다면?
✍️ 데이터를 0과 1사이의 범위를 가지도록 만드는 것
예제_100점과 500점의 시험에서 성적을 정규화하면?
✍️ 데이터의 평균이 0이 되도록하고 표준편차가 1이되도록 만듦
0을 기준으로 편차가 생김
전처리 과정을 수행하기 위해 sklearn의 preprocessing 임포트
from sklearn.preprocessing import StandardScaler
데이터 테이블 중 원하는 필드만 사용하기 위해 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 사용 및 이진 크로스엔트로피 사용
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'
])
다항 논리 회귀에서 컴퓨터가 잘 볼 수 있도록 원-핫 인코딩을 통해서 각 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'])