Files
Introduction-to-Artificial-…/code/main.py
2025-11-08 21:44:50 +01:00

377 lines
14 KiB
Python

from NewtonUTSVM import NewtonUTSVM
from S3VM_unconstrained import S3VM_Unconstrained
from S3VM_constrained import S3VM_Constrained
import time
from utils import load_dataset, calculate_accuracy, move_labels_to_last_column
import pandas as pd
from MC_NDCC import MC_NDCC
import random
if __name__ == "__main__":
# print('---------- diabetes Dataset ----------')
# csv_file = "data/diabetes.csv"
# X, y, x_test, y_test, U = load_dataset(csv_file)
# y = y.reshape(y.shape[0], 1)
# start = time.time()
# nutsvm = NewtonUTSVM(X, y, U, C=[0.1, 0.1, 0.1, 0.1, 0.3, 0.3] , eps=1e-4)
# nutsvm.fit()
# nutsvm.predict(x_test=x_test)
# pt = nutsvm.get_preds()
# nutsvm_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("Newton Accuracy: ", nutsvm_acc)
# print("Newton Time: ", round(end - start, 2), "sec")
# # --------------------------------------------------
# start = time.time()
# lmbda = 0.001
# l, k = X.shape[0], U.shape[0]
# s3vm_con = S3VM_Constrained(C=(1 - lmbda)/(lmbda * (l + k)), M=1e5, eps=1e-4)
# s3vm_con.fit(X, y, U)
# pt = s3vm_con.predict(x_test)
# s3vm_con_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("S3VM Constrained Accuracy: ", s3vm_con_acc)
# print("S3VM Constrained Time: ", round(end - start, 2), "sec")
# start = time.time()
# lmbda = 0.001
# l, k = X.shape[0], U.shape[0]
# s3vm_con = S3VM_Unconstrained(C=(1 - lmbda)/(lmbda * (l + k)), eps=1e-4)
# s3vm_con.fit(X, y, U)
# pt = s3vm_con.predict(x_test)
# s3vm_con_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("S3VM Unconstrained Accuracy: ", s3vm_con_acc)
# print("S3VM Unconstrained Time: ", round(end - start, 2), "sec")
# print('--------------------------------------')
# print('---------- ionosphere Dataset ----------')
# csv_file = "data/ionosphere.csv"
# X, y, x_test, y_test, U = load_dataset(csv_file)
# y = y.reshape(y.shape[0], 1)
# start = time.time()
# nutsvm = NewtonUTSVM(X, y, U, C=[0.1, 0.1, 0.1, 0.1, 0.3, 0.3] , eps=1e-4)
# nutsvm.fit()
# nutsvm.predict(x_test=x_test)
# pt = nutsvm.get_preds()
# nutsvm_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("Newton Accuracy: ", nutsvm_acc)
# print("Newton Time: ", round(end - start, 2), "sec")
# # --------------------------------------------------
# start = time.time()
# lmbda = 0.001
# l, k = X.shape[0], U.shape[0]
# s3vm_con = S3VM_Constrained(C=(1 - lmbda)/(lmbda * (l + k)), M=1e5, eps=1e-4)
# s3vm_con.fit(X, y, U)
# pt = s3vm_con.predict(x_test)
# s3vm_con_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("S3VM Constrained Accuracy: ", s3vm_con_acc)
# print("S3VM Constrained Time: ", round(end - start, 2), "sec")
# start = time.time()
# lmbda = 0.001
# l, k = X.shape[0], U.shape[0]
# s3vm_con = S3VM_Unconstrained(C=(1 - lmbda)/(lmbda * (l + k)), eps=1e-4)
# s3vm_con.fit(X, y, U)
# pt = s3vm_con.predict(x_test)
# s3vm_con_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("S3VM Unconstrained Accuracy: ", s3vm_con_acc)
# print("S3VM Unconstrained Time: ", round(end - start, 2), "sec")
# print('----------------------------------')
# print('---------- Musk Dataset ----------')
# csv_file = "data/musk.csv"
# X, y, x_test, y_test, U = load_dataset(csv_file)
# y = y.reshape(y.shape[0], 1)
# start = time.time()
# nutsvm = NewtonUTSVM(X, y, U, C=[0.1, 0.1, 0.1, 0.1, 0.3, 0.3] , eps=1e-4)
# nutsvm.fit()
# nutsvm.predict(x_test=x_test)
# pt = nutsvm.get_preds()
# nutsvm_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("Newton Accuracy: ", nutsvm_acc)
# print("Newton Time: ", round(end - start, 2), "sec")
# # --------------------------------------------------
# start = time.time()
# lmbda = 0.001
# l, k = X.shape[0], U.shape[0]
# s3vm_con = S3VM_Constrained(C=(1 - lmbda)/(lmbda * (l + k)), M=1e5, eps=1e-4)
# s3vm_con.fit(X, y, U)
# pt = s3vm_con.predict(x_test)
# s3vm_con_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("S3VM Constrained Accuracy: ", s3vm_con_acc)
# print("S3VM Constrained Time: ", round(end - start, 2), "sec")
# start = time.time()
# lmbda = 0.001
# l, k = X.shape[0], U.shape[0]
# s3vm_con = S3VM_Unconstrained(C=(1 - lmbda)/(lmbda * (l + k)), eps=1e-4)
# s3vm_con.fit(X, y, U)
# pt = s3vm_con.predict(x_test)
# s3vm_con_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("S3VM Unconstrained Accuracy: ", s3vm_con_acc)
# print("S3VM Unconstrained Time: ", round(end - start, 2), "sec")
# print('------------------------------------------------------------------')
# print('---------- Breast Cancer Wisconsin (Prognostic) Dataset ----------')
# csv_file = "data/wpbc.csv"
# X, y, x_test, y_test, U = load_dataset(csv_file)
# y = y.reshape(y.shape[0], 1)
# start = time.time()
# nutsvm = NewtonUTSVM(X, y, U, C=[0.1, 0.1, 0.1, 0.1, 0.3, 0.3] , eps=1e-4)
# nutsvm.fit()
# nutsvm.predict(x_test=x_test)
# pt = nutsvm.get_preds()
# nutsvm_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("Newton Accuracy: ", nutsvm_acc)
# print("Newton Time: ", round(end - start, 2), "sec")
# # --------------------------------------------------
# start = time.time()
# lmbda = 0.001
# l, k = X.shape[0], U.shape[0]
# s3vm_con = S3VM_Constrained(C=(1 - lmbda)/(lmbda * (l + k)), M=1e5, eps=1e-4)
# s3vm_con.fit(X, y, U)
# pt = s3vm_con.predict(x_test)
# s3vm_con_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("S3VM Constrained Accuracy: ", s3vm_con_acc)
# print("S3VM Constrained Time: ", round(end - start, 2), "sec")
# start = time.time()
# lmbda = 0.001
# l, k = X.shape[0], U.shape[0]
# s3vm_con = S3VM_Unconstrained(C=(1 - lmbda)/(lmbda * (l + k)), eps=1e-4)
# s3vm_con.fit(X, y, U)
# pt = s3vm_con.predict(x_test)
# s3vm_con_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("S3VM Unconstrained Accuracy: ", s3vm_con_acc)
# print("S3VM Unconstrained Time: ", round(end - start, 2), "sec")
# print('-------------------------------------------')
# print('---------- Sonar Dataset ----------')
# csv_file = "data/sonar.csv"
# X, y, x_test, y_test, U = load_dataset(csv_file)
# y = y.reshape(y.shape[0], 1)
# start = time.time()
# nutsvm = NewtonUTSVM(X, y, U, C=[1, 1, 0.1, 0.1, 2, 2] , eps=1e-4)
# nutsvm.fit()
# nutsvm.predict(x_test=x_test)
# pt = nutsvm.get_preds()
# nutsvm_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("Newton Accuracy: ", nutsvm_acc)
# print("Newton Time: ", round(end - start, 2), "sec")
# # --------------------------------------------------
# start = time.time()
# lmbda = 0.001
# l, k = X.shape[0], U.shape[0]
# s3vm_con = S3VM_Constrained(C=(1 - lmbda)/(lmbda * (l + k)), M=1e5, eps=1e-4)
# s3vm_con.fit(X, y, U)
# pt = s3vm_con.predict(x_test)
# s3vm_con_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("S3VM Constrained Accuracy: ", s3vm_con_acc)
# print("S3VM Constrained Time: ", round(end - start, 2), "sec")
# start = time.time()
# lmbda = 0.001
# l, k = X.shape[0], U.shape[0]
# s3vm_con = S3VM_Unconstrained(C=(1 - lmbda)/(lmbda * (l + k)), eps=1e-4)
# s3vm_con.fit(X, y, U)
# pt = s3vm_con.predict(x_test)
# s3vm_con_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("S3VM Unconstrained Accuracy: ", s3vm_con_acc)
# print("S3VM Unconstrained Time: ", round(end - start, 2), "sec")
# print('------------------------------------')
# print('---------- Gender Dataset ----------')
# csv_file = "data/gender.csv"
# X, y, x_test, y_test, U = load_dataset(csv_file)
# y = y.reshape(y.shape[0], 1)
# start = time.time()
# nutsvm = NewtonUTSVM(X, y, U, C=[1.0, 1.0, 0.1, 0.1, 0.05, 0.0] , eps=1e-4)
# nutsvm.fit()
# nutsvm.predict(x_test=x_test)
# pt = nutsvm.get_preds()
# nutsvm_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("Newton Accuracy: ", nutsvm_acc)
# print("Newton Time: ", round(end - start, 2), "sec")
# # --------------------------------------------------
# start = time.time()
# lmbda = 0.001
# l, k = X.shape[0], U.shape[0]
# s3vm_con = S3VM_Constrained(C=(1 - lmbda)/(lmbda * (l + k)), M=1e5, eps=1e-4)
# s3vm_con.fit(X, y, U)
# pt = s3vm_con.predict(x_test)
# s3vm_con_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("S3VM Constrained Accuracy: ", s3vm_con_acc)
# print("S3VM Constrained Time: ", round(end - start, 2), "sec")
# start = time.time()
# lmbda = 0.001
# l, k = X.shape[0], U.shape[0]
# s3vm_con = S3VM_Unconstrained(C=(1 - lmbda)/(lmbda * (l + k)), eps=1e-4)
# s3vm_con.fit(X, y, U)
# pt = s3vm_con.predict(x_test)
# s3vm_con_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("S3VM Unconstrained Accuracy: ", s3vm_con_acc)
# print("S3VM Unconstrained Time: ", round(end - start, 2), "sec")
# # Initialize an instance
# ndcc = MC_NDCC()
# # Get the dataset as a Numpy matrix
# ds_mat = ndcc.get_matrix()
# # Save the dataset as a csv file
# ndcc.get_csv('data/1000_100_ndcc.csv')
# print('------------------------------------')
# print('---------- NDCC Dataset ----------')
# csv_file = "data/100_10_ndcc.csv"
# X, y, x_test, y_test, U = load_dataset(csv_file)
# y = y.reshape(y.shape[0], 1)
# start = time.time()
# nutsvm = NewtonUTSVM(X, y, U, C=[2, 0.1, 1, 1, 0.1, 0.1] , eps=1e-4)
# nutsvm.fit()
# nutsvm.predict(x_test=x_test)
# pt = nutsvm.get_preds()
# nutsvm_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("Newton Accuracy: ", nutsvm_acc)
# print("Newton Time: ", round(end - start, 2), "sec")
# # --------------------------------------------------
# start = time.time()
# lmbda = 0.001
# l, k = X.shape[0], U.shape[0]
# s3vm_con = S3VM_Constrained(C=(1 - lmbda)/(lmbda * (l + k)), M=1e5, eps=1e-4)
# s3vm_con.fit(X, y, U)
# pt = s3vm_con.predict(x_test)
# s3vm_con_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("S3VM Constrained Accuracy: ", s3vm_con_acc)
# print("S3VM Constrained Time: ", round(end - start, 2), "sec")
# start = time.time()
# lmbda = 0.001
# l, k = X.shape[0], U.shape[0]
# s3vm_uncon = S3VM_Unconstrained(C=(1-lmbda)/(lmbda * (l + k)), eps=1e-4)
# s3vm_uncon.fit(X, y, U)
# pt = s3vm_uncon.predict(x_test)
# s3vm_uncon_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
# end = time.time()
# print("S3VM Unconstrained Accuracy: ", s3vm_uncon_acc)
# print("S3VM Unconstrained Time: ", round(end - start, 2), "sec")
# print('------------------------------------')
# print('---------- NDCC Dataset ----------')
# csv_file = "data/100_10_ndcc.csv"
# X, y, x_test, y_test, U = load_dataset(csv_file)
# y = y.reshape(y.shape[0], 1)
print('------------------------------------')
print('---------- NDCC Dataset ----------')
csv_file = "data/100_100_ndcc.csv"
X, y, x_test, y_test, U = load_dataset(csv_file)
y = y.reshape(y.shape[0], 1)
param_space = [0.01, 0.1, 1, 2, 4, 8]
best_acc = 0
best_time = 0
best_params = None
for i in range(1000):
C = [random.choice(param_space) for _ in range(6)]
start = time.time()
nutsvm = NewtonUTSVM(X, y, U, C=C, eps=1e-4)
nutsvm.fit()
nutsvm.predict(x_test=x_test)
pt = nutsvm.get_preds()
acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
end = time.time()
elapsed_time = round(end - start, 2)
if acc > best_acc:
best_acc = acc
best_time = elapsed_time
best_params = C
if (i + 1) % 100 == 0:
print(f"Completed {i + 1}/1000")
print("Best Accuracy:", best_acc)
print("Best Time:", best_time, "sec")
print("Best C Parameters:", best_params)
# --------------------------------------------------
start = time.time()
lmbda = 0.001
l, k = X.shape[0], U.shape[0]
s3vm_con = S3VM_Constrained(C=(1 - lmbda)/(lmbda * (l + k)), M=1e5, eps=1e-4)
s3vm_con.fit(X, y, U)
pt = s3vm_con.predict(x_test)
s3vm_con_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
end = time.time()
print("S3VM Constrained Accuracy: ", s3vm_con_acc)
print("S3VM Constrained Time: ", round(end - start, 2), "sec")
start = time.time()
lmbda = 0.001
l, k = X.shape[0], U.shape[0]
s3vm_uncon = S3VM_Unconstrained(C=(1-lmbda)/(lmbda * (l + k)), eps=1e-4)
s3vm_uncon.fit(X, y, U)
pt = s3vm_uncon.predict(x_test)
s3vm_uncon_acc = calculate_accuracy(true_labels=y_test, predicted_labels=pt)
end = time.time()
print("S3VM Unconstrained Accuracy: ", s3vm_uncon_acc)
print("S3VM Unconstrained Time: ", round(end - start, 2), "sec")