Task for Lab 5
One file for training model, second one to test it
This commit is contained in:
parent
a3c433f999
commit
391b74a662
15
model_test.py
Normal file
15
model_test.py
Normal file
@ -0,0 +1,15 @@
|
||||
import pandas as pd
|
||||
import tensorflow as tf
|
||||
|
||||
df = pd.read_csv('data_test.csv')
|
||||
|
||||
df.drop(['zwyciezca'], axis=1, inplace=True)
|
||||
|
||||
model = tf.keras.models.load_model('model_election.h5')
|
||||
|
||||
predictions = model.predict(df).flatten()
|
||||
|
||||
output = pd.DataFrame({'predicted': predictions})
|
||||
output.loc[output['predicted'] <= 0.5, 'predicted'] = 0
|
||||
output.loc[output['predicted'] > 0.5, 'predicted'] = 1
|
||||
output.to_csv('election_predictions.csv', index=False)
|
113
model_train.py
Normal file
113
model_train.py
Normal file
@ -0,0 +1,113 @@
|
||||
import tensorflow as tf
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
import sklearn
|
||||
|
||||
#Wczytanie i obróbka całości danych
|
||||
|
||||
big_dataset = pd.DataFrame()
|
||||
|
||||
#Trzeba wczytać każdy z 13 arkuszy z danymi dla poszczególnych okręgów wyborczych
|
||||
for i in range(1,14):
|
||||
filename = '2019-european-parliament-election-in-poland-data\wyniki_gl_na_kand_po_obwodach_sheet_'+str(i)+'.csv'
|
||||
data_district = pd.read_csv(filename)
|
||||
data_district['obwod'] = i
|
||||
df = data_district.copy()
|
||||
cols_to_remove = []
|
||||
for c in range(35,len(df.columns)):
|
||||
cols_to_remove.append(c)
|
||||
#Wycięcie nadmiarowych danych - szczegółowych informacji o głosach na poszczególnych kandydatów w poszczególnych komisjach
|
||||
df.drop(df.columns[cols_to_remove],axis=1,inplace=True)
|
||||
#Uwzględnienie w danych zbiorczych wyników komitetów wyborczych w poszczególnych komisjach
|
||||
df['Konfederacja'] = data_district['Lista nr 1 - KWW KONFEDERACJA KORWIN BRAUN LIROY NARODOWCY']
|
||||
df['Wiosna'] = data_district['Lista nr 2 - KW WIOSNA ROBERTA BIEDRONIA']
|
||||
df['Koalicja Europejska'] = data_district['Lista nr 3 - KKW KOALICJA EUROPEJSKA PO PSL SLD .N ZIELONI']
|
||||
df['Prawo i Sprawiedliwość'] = data_district['Lista nr 4 - KW PRAWO I SPRAWIEDLIWOŚĆ']
|
||||
df['Lewica Razem'] = data_district['Lista nr 5 - KKW LEWICA RAZEM - RAZEM, UNIA PRACY, RSS']
|
||||
df['Kukiz15'] = data_district['Lista nr 6 - KWW KUKIZ\'15']
|
||||
#Poniżej trzy komitety, które były zarejestrowane tylko w niektórych okręgach wyborczych
|
||||
if 'Lista nr 7 - KWW POLSKA FAIR PLAY BEZPARTYJNI GWIAZDOWSKI' in data_district.columns:
|
||||
df['Polska Fair Play'] = data_district['Lista nr 7 - KWW POLSKA FAIR PLAY BEZPARTYJNI GWIAZDOWSKI']
|
||||
else:
|
||||
df['Polska Fair Play'] = 0
|
||||
if 'Lista nr 9 - KKW POLEXIT - KOALICJA' in data_district.columns:
|
||||
df['POLEXIT'] = data_district['Lista nr 9 - KKW POLEXIT - KOALICJA']
|
||||
else:
|
||||
df['POLEXIT'] = 0
|
||||
if 'Lista nr 10 - KW JEDNOŚĆ NARODU' in data_district.columns:
|
||||
df['Jedność Narodu'] = data_district['Lista nr 10 - KW JEDNOŚĆ NARODU']
|
||||
else:
|
||||
df['Jedność Narodu'] = 0
|
||||
#Dodanie kolumny przechowującej informację o tym, w którym okręgu znajduje się dana komisja
|
||||
df['obwod'] = i
|
||||
|
||||
df['zwyciezca'] = 0
|
||||
df.loc[ df['Prawo i Sprawiedliwość'] > df['Koalicja Europejska'], 'zwyciezca'] = 1
|
||||
|
||||
#Doklejenie wczytanych dla okręgu i obrobionych danych do głównego zbioru
|
||||
big_dataset = pd.concat([big_dataset,df])
|
||||
|
||||
#print(big_dataset)
|
||||
|
||||
features = big_dataset.copy()
|
||||
features['typ obszaru'] = 0
|
||||
features.loc[ features['Typ obszaru'] == 'miasto', 'typ'] = 1
|
||||
features['liczba uprawnionych'] = features['Liczba wyborców uprawnionych do głosowania']
|
||||
features['liczba glosow'] = features['Liczba kart wyjętych z urny']
|
||||
features['liczba glosow niewaznych'] = features['Liczba kart wyjętych z urny'] - features['Liczba głosów ważnych oddanych łącznie na wszystkie listy kandydatów']
|
||||
features['wojewodztwo'] = 0
|
||||
wojewodztwa = ['mazowieckie', 'małopolskie', 'wielkopolskie', 'zachodniopomorskie', 'pomorskie', 'warmińsko-mazurskie', 'lubuskie',
|
||||
'dolnośląskie', 'śląskie', 'łódzkie', 'opolskie', 'kujawsko-pomorskie', 'podlaskie', 'świętokrzyskie', 'lubelskie',
|
||||
'podkarpackie']
|
||||
for i in range(len(wojewodztwa)):
|
||||
features.loc[ features['Województwo'] == wojewodztwa[i], 'wojewodztwo'] = i
|
||||
|
||||
cols_to_remove = []
|
||||
for c in range(0,44):
|
||||
cols_to_remove.append(c)
|
||||
#cols_to_remove.append(45)
|
||||
cols_to_remove.append(47)
|
||||
#Wycięcie nadmiarowych danych - szczegółowych informacji o głosach na poszczególnych kandydatów w poszczególnych komisjach
|
||||
features.drop(features.columns[cols_to_remove],axis=1,inplace=True)
|
||||
|
||||
#Wyodrębnienie z danych zbioru testowego
|
||||
from sklearn.model_selection import train_test_split
|
||||
data_train, data_test = sklearn.model_selection.train_test_split(features, test_size=2700, random_state=1)
|
||||
|
||||
#Wyodrębnienie zbioru walidacyjnego z pozostałego zbioru treningowego
|
||||
data_train, data_val = sklearn.model_selection.train_test_split(data_train, test_size=2700, random_state=1)
|
||||
|
||||
data_test.to_csv('data_test.csv', index = False)
|
||||
|
||||
train_labels = np.array(data_train['zwyciezca'])
|
||||
val_labels = np.array(data_test['zwyciezca'])
|
||||
|
||||
data_train.drop(['zwyciezca'], axis=1, inplace=True)
|
||||
data_val.drop(['zwyciezca'], axis=1, inplace=True)
|
||||
|
||||
model = tf.keras.models.Sequential([
|
||||
tf.keras.layers.Dense(128, activation='relu', input_shape=[len(data_train.keys())]),
|
||||
tf.keras.layers.Dense(64, activation='relu'),
|
||||
tf.keras.layers.Dense(64, activation='relu'),
|
||||
tf.keras.layers.Dense(1)
|
||||
])
|
||||
|
||||
model.compile(optimizer=tf.keras.optimizers.RMSprop(),
|
||||
loss='mse',
|
||||
metrics=['mae', 'mse'])
|
||||
|
||||
#model.compile(optimizer='adam',
|
||||
#loss='binary_crossentropy',
|
||||
#metrics=['accuracy'])
|
||||
|
||||
#model.summary()
|
||||
|
||||
history = model.fit(tf.convert_to_tensor(data_train), tf.convert_to_tensor(train_labels), epochs=50, batch_size = 32,
|
||||
validation_data=(tf.convert_to_tensor(data_val), tf.convert_to_tensor(val_labels)))
|
||||
#callbacks=[tensorboard_callback])
|
||||
|
||||
train_loss = history.history['loss']
|
||||
val_loss = history.history['val_loss']
|
||||
|
||||
# Zapisanie modelu do pliku
|
||||
model.save('model_election.h5')
|
Loading…
Reference in New Issue
Block a user