ium_487197/ium_predict.py
2023-05-12 01:16:44 +02:00

88 lines
3.0 KiB
Python

from keras.models import load_model
import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn import metrics
import math
import numpy as np
import os.path
import argparse
import matplotlib.pyplot as plt
import shutil
def write_list(names):
with open('listfile.txt', 'w') as fp:
fp.write("\n".join(str(item) for item in names))
def get_x_y(data):
lb = LabelEncoder()
data = data.drop(["Location 1"], axis=1)
data = data.drop(columns=["Longitude", "Latitude", "Location", "Total Incidents", "CrimeTime", "Neighborhood", "Post", "CrimeDate", "Inside/Outside"], axis=1)
for column_name in data.columns:
data[column_name] = lb.fit_transform(data[column_name])
x = data.drop('Weapon', axis=1)
y = data['Weapon']
return data, x, y
def predict():
parser = argparse.ArgumentParser(description='Pred')
parser.add_argument('-build', type=int, default=1)
args = parser.parse_args()
shutil.unpack_archive('baltimore.zip', 'baltimore_model', 'zip')
model = load_model('baltimore_model')
train = pd.read_csv('baltimore_train.csv')
baltimore_data_test = pd.read_csv('baltimore_test.csv')
baltimore_data_test.columns = train.columns
baltimore_data_test, x_test, y_test = get_x_y(baltimore_data_test)
scores = model.evaluate(x_test, y_test)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1] * 100))
y_predicted = model.predict(x_test)
y_predicted = np.argmax(y_predicted, axis=1)
test_results = {}
test_results['Weapon'] = model.evaluate(
x_test,
y_test, verbose=0)
write_list(y_predicted)
print('Accuracy : ', scores[1] * 100)
print('Mean Absolute Error : ', metrics.mean_absolute_error(y_test, y_predicted))
print('Root Mean Squared Error : ', math.sqrt(metrics.mean_squared_error(y_test, y_predicted)))
if os.path.exists("metrics.csv"):
df = pd.read_csv('metrics.csv')
data = {
'build': [args.build],
'mse': metrics.mean_squared_error(y_test, y_predicted),
'rmse': math.sqrt(metrics.mean_squared_error(y_test, y_predicted)),
'accuracy': scores[1] * 100
}
row = pd.DataFrame([data])
if df['build'].isin([int(args.build)]).any():
df[df['build'] == args.build] = row.iloc[0]
else:
df = pd.concat([df, row])
df['build'] = df['build'].astype('int')
df.to_csv('metrics.csv', index=False)
else:
data = {
'build': [args.build],
'mse': metrics.mean_squared_error(y_test, y_predicted),
'rmse': math.sqrt(metrics.mean_squared_error(y_test, y_predicted)),
'accuracy': scores[1] * 100
}
df = pd.DataFrame(data)
df['build'] = df['build'].astype('int')
df.to_csv('metrics.csv', index=False)
plt.plot(df['build'], df['mse'], label="mse")
plt.plot(df['build'], df['rmse'], label="rmse")
plt.plot(df['build'], df['accuracy'], label="accuracy")
plt.legend()
plt.show()
plt.savefig('metrics_img.png')
predict()