AI 웹 개발 과정/실전 머신러닝

04. 2주차 실습 : 이진논리회귀 / 다항논리회귀 / 전처리

만 기 2022. 5. 14. 21:15

 

 

이진논리회귀와 전처리 실습

 

from sklearn.preprocessing import StandardScaler

표준화 전처리에 필요한 싸이킷런의 StandardScaler 사용

 

 

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

필요한 데이터만 뽑아내는것도 전처리의 일부이다.

 

 

print(df.isnull().sum())    # 비어있는 데이터가 있는지 확인. isnull의 갯수

print(len(df))      # 지우기 전 데이터셋 길이

df = df.dropna()    # 지워주기 # .dropna()

print(len(df))      # 지운 후

전처리 : 비어있는 값 확인 후 지워주기.

 

 

x_data = df.drop(columns=['2urvived'], axis=1)    # 'survived'는 y데이터로 들어가기때문에 제외
x_data = x_data.astype(np.float32)    # astype : 열의 요소의 dtype을 변경하는함수
x_data.head(5)

y 데이터로 들어갈 survived 제외 시키고 저장.

 

 

scaler = StandardScaler()   # StandardScaler 사용한다
x_data_scaled = scaler.fit_transform(x_data)  # fit_transform method 호출  # x 데이터 단위 맞춰주기 위해서

print(x_data.values[0])   # 표준화 전
print(x_data_scaled[0])   # 표준화 후

standardization : StandardScaler() 사용. 

 

 

model = Sequential([
  Dense(1, activation='sigmoid')  # sigmoid function 사용   # linear regression 실행 후 sigmoid 실행
])

model.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.01), metrics=['acc'])   # 손실함수 binary_crossentropyh   # matrics: loss 값만 보기 어려울때, accuracy 정확도(0~1)
model.fit(
    x_train,
    y_train,
    validation_data=(x_val, y_val), # 검증 데이터를 넣어주면 한 epoch이 끝날때마다 자동으로 검증
    epochs=20 # epochs 복수형으로 쓰기!
)

모델 학습.

 

 

 

다항논리회귀 실습

 

from sklearn.preprocessing import OneHotEncoder

다항논리회귀 출력값을 분류할 OneHotEncoder 임포트

 

 

encoder = OneHotEncoder()   # 사이킷런의 OneHotEncoder() 클래스 사용
y_data_encoded = encoder.fit_transform(y_data).toarray()    # toarray()

print(y_data.values[0])   # encoding 전 # [1.]
print(y_data_encoded[0])  # encoding 후 # [1. 0. 0.]

출력값을 OneHotEncoding 작업.

 

 

model = Sequential([
  Dense(3, activation='softmax')  # 출력 3가지, # 다항논리회귀이므로 softmax함수 사용
])

model.compile(loss='categorical_crossentropy', optimizer=Adam(lr=0.02), metrics=['acc'])  # 다항논리회귀이므로 categorical_crossentropy 손실함수

model.fit(
    x_train,
    y_train,
    validation_data=(x_val, y_val), # 검증 데이터를 넣어주면 한 epoch이 끝날때마다 자동으로 검증
    epochs=20 # epochs 복수형으로 쓰기!
)

다항논리회귀 모델 학습시키기.