AI 웹 개발 과정/개인 프로젝트

개인 프로젝트 05 : 타임어택 미션 - 머신러닝 타임어택미션 + 2주차 숙제

만 기 2022. 5. 15. 22:49
머신러닝 2주차 숙제

 

- import

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam, SGD
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import OneHotEncoder

 

- 데이터셋 로드

df = pd.read_csv('diabetes2.csv')

df.head(5)

 

- 전처리: 비어있는 행 확인

print(df.isnull().sum())

 

- x/y 데이터 분할

x_data = df.drop(columns=['Outcome'], axis=1)
x_data = x_data.astype(np.float32)

x_data.head(5)
y_data = df[['Outcome']]
y_data = y_data.astype(np.float32)

y_data.head(5)

 

- 전처리: 표준화

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

print(x_data.values[0])
print(x_data_scaled[0])

 

- 학습/검증 데이터 분할

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

print(x_train.shape, x_val.shape)
print(y_train.shape, y_val.shape)
 
- 학습
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 복수형으로 쓰기!
)

 

 

 

0513 - 타임어택 과제

 

** point

1. learning rate 변화시켜서 두번 학습시킨것

   : learning rate가 클때와 작을때의 장단점 생각해보기

2. optimizer

    SGD는 학습이 제대로 안됐지만 Adam 사용한 경우 잘됨
   : 각각 어떤 특징들이 있으며 어느경우에 어떤 것을 사용해야할까?
      -> 나중에 튜터님께 물어보기

3. 데이터 전처리

   : 이번에는 표준화(standardscaler)를 사용했는데 새로운 데이터를 넣을 때도  전처리를 시켜서 입력시킬 것

 

- code

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam, SGD
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt 
import seaborn as sns
from sklearn.model_selection import train_test_split

df = pd.read_csv('HappinessAlcoholConsumption.csv')
df.shape
df.head()

x_data = np.array(df[['Beer_PerCapita']], dtype=np.float32)
y_data = np.array(df['HappinessScore'], dtype=np.float32)

print(x_data.shape)
print(y_data.shape)

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
x_data_scaled = scaler.fit_transform(x_data)

print(x_data)
print(x_data_scaled[0])

x_data = x_data.reshape((-1, 1))
y_data = y_data.reshape((-1, 1))

print(x_data.shape)
print(y_data.shape)

x_train, x_val, y_train, y_val = train_test_split(x_data, y_data, test_size=0.2, random_state=2021)

print(x_train.shape, x_val.shape)
print(y_train.shape, y_val.shape)

model = Sequential([
  Dense(1)
])

model.compile(loss='mean_squared_error', optimizer=Adam(lr=0.1))

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


model.compile(loss='mean_squared_error', optimizer=Adam(lr=0.001))

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


y_pred = model.predict(x_val)

plt.scatter(x_val, y_val)
plt.scatter(x_val, y_pred, color='r')
plt.show()


# 맥주소비량 1000일 때 행복지수 예측값 알아보기
x_test = 1000

# 데이터 전처리 과정 - 표준화
# x = (x - 평균) / 표준편차

x_data = np.array(df[['Beer_PerCapita']], dtype=np.float32)
x_data_mean = x_data.mean()
x_data_std = x_data.std()

x_test = (x_test - x_data_mean ) / x_data_std

y_pred = model.predict([x_test])
print(y_pred)