Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
ecsimsw committed Aug 16, 2023
2 parents fca6e2a + 98fd329 commit b03a54c
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 37 deletions.
33 changes: 19 additions & 14 deletions ml/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@ def __init__(self, input_size, hidden_size, num_layers, output_size):
super(LSTMModel, self).__init__()
self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)
self.fc = nn.Linear(hidden_size, output_size)

def forward(self, x):
out, _ = self.lstm(x)
out = self.fc(out)

return out

input_size = 13
input_size = 12
hidden_size = 64
num_layers = 2
output_size = 4
Expand All @@ -46,21 +46,26 @@ async def predict(input_data: str = Form(...),type_num: int = Form(...)):


# 모델에 대한 타입 지정을 num 에 해줘야함
# 모델의 타입은 직렬 정보에 따라서 1 = 2 = 3 = 4 = 5 = 6 =




# 모델의 타입은 직렬 정보에 따라서 1 = 2 = 3 = 4 = 5 = 6 =
model.load_state_dict(torch.load('lstm_model_'+str(type_num)+'.pth'))
model.eval()

input_data = ast.literal_eval(input_data)
filtered_values = [value for value in input_data if value != -1]
mean_value = np.mean(filtered_values)

input_data = [mean_value if value == -1 else value for value in input_data]
input_data.append(sum(input_data))

# 모두 0이면 리스트에 0 추가
if all(value == 0 for value in input_data):
input_data.append(0)
else:
# 0 값을 제외한 리스트 생성
filtered_values = [value for value in input_data if value != 0]

# 0이 없을 때만 평균값 계산 및 처리
if filtered_values:
mean_value = np.mean(filtered_values)
input_data = [mean_value if value == 0 else value for value in input_data]
input_data.append(sum(input_data))
else:
input_data.append(sum(input_data))

print(f"model input data is {input_data}")

result = predict_single_input(input_data)
Expand Down
53 changes: 30 additions & 23 deletions ml/train.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,12 @@ def data_preprocess(df):
df=data_preprocess(df)



type_1_df=df[df['applicationType']=='경찰직공무원(여)']
type_2_df=df[df['applicationType']=='경찰직공무원(남)']
type_1_df=df[df['applicationType']=='경찰직공무원(남)']
type_2_df=df[df['applicationType']=='경찰직공무원(여)']
type_3_df=df[df['applicationType']=='소방직공무원(남)']
type_4_df=df[df['applicationType']=='교정직공무원(남)']
type_5_df=df[df['applicationType']=='소방직공무원(여)']
type_6_df=df[df['applicationType']=='교정직공무원(여)']
type_4_df=df[df['applicationType']=='소방직공무원(여)']
type_5_df=df[df['applicationType']=='경호직공무원(남)']
type_6_df=df[df['applicationType']=='경호직공무원(여)']

type_1_df=type_1_df.drop('applicationType',axis=1)
type_2_df=type_2_df.drop('applicationType',axis=1)
Expand All @@ -50,7 +49,7 @@ def data_preprocess(df):
type_5_df=type_5_df.drop('applicationType',axis=1)
type_6_df=type_6_df.drop('applicationType',axis=1)


print(type_3_df)
def convert(df):

data = {
Expand All @@ -62,15 +61,15 @@ def convert(df):

# 피벗 테이블 생성
pivot_table = df.groupby(['member_id', 'month'])['score'].sum().unstack()

return pivot_table

type_1_df=convert(type_1_df)
type_2_df=convert(type_2_df)
type_3_df=convert(type_3_df)
type_4_df=convert(type_4_df)
type_5_df=convert(type_5_df)
type_6_df=convert(type_6_df)
type_1_df=convert(type_1_df)
type_2_df=convert(type_2_df)
type_3_df=convert(type_3_df)
type_4_df=convert(type_4_df)
type_5_df=convert(type_5_df)
type_6_df=convert(type_6_df)


type_1_df=type_1_df.fillna(type_1_df.mean())
Expand Down Expand Up @@ -106,24 +105,32 @@ def set_label(df):
type_6_df = set_label(type_6_df)


type_1_df=type_1_df.drop("total_score",axis=1)
type_2_df=type_2_df.drop("total_score",axis=1)
type_3_df=type_3_df.drop("total_score",axis=1)
type_4_df=type_4_df.drop("total_score",axis=1)
type_5_df=type_5_df.drop("total_score",axis=1)
type_6_df=type_6_df.drop("total_score",axis=1)




class LSTMModel(nn.Module):
def __init__(self, input_size, hidden_size, num_layers, output_size):
super(LSTMModel, self).__init__()
self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)
self.fc = nn.Linear(hidden_size, output_size)

def forward(self, x):
out, _ = self.lstm(x)
out,_= self.lstm(x)
out = self.fc(out) # Remove this line

return out

df_list=[type_1_df,type_2_df,type_3_df,type_4_df,type_5_df,type_6_df]
num=1
for i in df_list:

# Convert the DataFrame to PyTorch tensors
data_tensor = torch.tensor(i.drop(columns=['label']).values, dtype=torch.float32)
label_tensor = torch.tensor(i['label'].values, dtype=torch.long) # Change dtype to long
Expand All @@ -138,7 +145,7 @@ def forward(self, x):
test_labels = label_tensor[train_size:]

# Create an instance of the LSTMModel
input_size = 13
input_size = 12
hidden_size = 64
num_layers = 2
output_size = 4
Expand All @@ -153,13 +160,13 @@ def forward(self, x):
for epoch in range(num_epochs):
model.train()
optimizer.zero_grad()

outputs = model(train_data)
loss = criterion(outputs.squeeze(), train_labels) # Remove the dimension from outputs

loss.backward()
optimizer.step()

if (epoch + 1) % 10 == 0:
print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')

Expand Down
Binary file modified redis/data/dump.rdb
Binary file not shown.

0 comments on commit b03a54c

Please sign in to comment.