본문 바로가기

KT AIVLE SCHOOL

[12주차] 5차 미니프로젝트

목차

1. AICE시험 대비 공부

2. 스마트폰 센서 데이터 기반 모션 분류

 

 

1. AICE 시험 대비 공부

5차 프로젝트의 1-2일차는 AICE시험을 준비하는 수업과 프로젝트를 진행했다. 오픈북으로 진행되는 시험이지만 시간제한이 있고 적어놓은 교안은 참고하지 못하고 구글링만 가능하기 때문에 간단한 딥러닝 층 쌓기나 머신러닝 모델 사용하기, 특히 전처리 과정에서 자주 쓰이는 코드들은 능숙히 사용해야 된다고 생각한다.

 

# 자주 쓰이는 코드

df.isnull().sum() # nan개수 확인
df1[df1['TotalCharges'] == ' '] # Boolean값을 이용한 공백 찾기
df.replace(' ',0) # 공백을 0으로 변환, df.replace(['Yes','No'],[1,0],inplace=True)
df[].astype() # df[]컬럼의 타입변경
df[].value_counts() # []컬럼의 데이터별 개수 확인
df.groupby('A')['B'].mean() # 'A'의 각 고유값에 따른 'B'열의 평균값을 반환
df.columns[df.dtypes == 'object'] # df에서 타입이 object인 컬럼 추출
pd.get_dummies(df,columns='',drop_first=True) # 원핫인코딩
df = df.rename(columns={'old_name': 'new_name'}) # 컬럼 이름 변경
df = df.rename(columns={'old_name1': 'new_name1', 'old_name2': 'new_name2', ...}) # 동시에 이름변경
.index # 고유한 값 반환, 앞의 컬럼에 0과 1의 값이 있다면 [0,1] 또는 [1,0] 반환
.values # 각 값의 등장 횟수 반환

# 데이터 프레임 생성_1
data = {
    '컬럼1': [값1, 값2, 값3, ...], # 리스트로 된 변수가 있다면 변수명을 넣어도 됨
    '컬럼2': [값1, 값2, 값3, ...],
    ...
}

df = pd.DataFrame(data)

# 데이터 프레임 생성_2
data = [
    [행1_값1, 행1_값2, ...],
    [행2_값1, 행2_값2, ...],
    ...
]
컬럼명 = ['컬럼1', '컬럼2', ...]

df = pd.DataFrame(data, columns=컬럼명)

# 데이터 프레임 생성_3
df = pd.read_csv('파일경로.csv')
df = pd.read_excel('파일경로.xlsx')
df = pd.read_json('파일경로.json')

 

# 조건에 맞는 딥러닝 모델 구현
# Tensoflow framework를 사용하여 딥러닝 모델을 만드세요.
# 히든레이어(hidden layer) 2개이상으로 모델을 구성하세요.
# dropout 비율 0.2로 Dropout 레이어 1개를 추가해 주세요.
# 하이퍼파라미터 epochs: 30, batch_size: 16으로 설정해주세요.
# 각 에포크마다 loss와 metrics 평가하기 위한 데이터로 X_valid, y_valid 사용하세요.
# 학습정보는 history 변수에 저장해주세요
model = Sequential()
model.add(Dense(64, activation='relu', input_shape=(X_train.shape[1],)))
model.add(Dropout(0.2))
model.add(Dense(32, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.summary()

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history = model.fit(X_train_s, y_train, validation_data=(X_valid_s, y_valid), epochs=30, batch_size=16)

# 학습 mse와 검증 mse를 그래프로 시각화
plt.figure(figsize=(10, 6))
plt.plot(history.history['accuracy'], label='acc')
plt.plot(history.history['val_accuracy'], label='val_acc')
plt.title('Accuracy')
plt.xlabel('Epochs')
plt.ylabel('Acc')
plt.legend()
plt.show()

머신러닝, 스케일링, 평가는 https://datalamjwi.tistory.com/30 참고

 

1) 통신 서비스 이용 고객의 이탈 여부 예측 문제, 2) VOC를 제기한 고객의 해지 여부 예측 문제, 3) 네비게이션 주행데이터를 이용한 도착시간 예측 문제 를 각자 시험보는것 처럼 풀어보고 조원끼리 피드백을 해주는 방식으로 진행되었다.

 

2. 스마트폰 센서 데이터 기반 모션 분류

스마트폰 센서 데이터를 가지고 6가지 행동으로 분류하는 프로젝트.

다양한 관점에서 뽑고 분석을 진행해 보고 분류 모델을 합치는 함수를 만들어 보았다.

마지막날엔 새로운 데이터가 주어지고 개인별 Kaggle Competition을 통해 순위가 나온다.

관련 코드는 깃허브에 업로드.