def __init__(self, modelname): self.svm_classifier = SVMClassifier() self.svm_classifier.loadSvmModel("../SVM_models/"+modelname) self.g_means = gm.GMeans()
class HeartBeatClassifier(object): def __init__(self, modelname): self.svm_classifier = SVMClassifier() self.svm_classifier.loadSvmModel("../SVM_models/"+modelname) self.g_means = gm.GMeans() def classify(self, package_number=101): # number_of_clusters = 2 normalized_data = self.getQrsComplexDataFromFile(package_number, 'ConvertedQRSRawData.txt') # print('TEST OF IMPORT:', normalized_data[0]) # print('TEST OF TO_NDARRAY CONVERSION:', normalized_data[0].to_ndarray()) centroids, labels_dict = self.g_means.cluster_data(normalized_data) K = max(labels_dict.values()) + 1 self.update_data_list(normalized_data, labels_dict) self.svm_classifier.predict(normalized_data) return K @staticmethod def update_data_list(data_list, labels_dict): for i, element in enumerate(data_list): element.class_id = labels_dict[i] @staticmethod def array_to_qrs_data(data_array, labels_dict): # THIS METHOD IS DEPRECATED. I thought that we'll pass data in numpy.ndarrays but it's not the case. qrs_data_list = [] for i, element in enumerate(data_array): qrs = QRSData(element) qrs.class_id = labels_dict[i] qrs_data_list.append(qrs) return qrs_data_list def getQrsComplexDataFromFile(self, package_number, filename): dir_to_cpp_signals = os.path.dirname(os.path.dirname(__file__)) dir_to_cpp_signals = os.path.join('..', 'ReferencyjneDane', str(package_number)) filename = os.path.join(dir_to_cpp_signals, filename) with open(filename, "r") as ins: qrs_data_list = [QRSData([float(x) for x in line.split()]) for line in ins] min_max_scaler = MinMaxScaler() r_peak_values = [item.r_peak_value for item in qrs_data_list] p_onset_values = [item.p_onset_val for item in qrs_data_list] p_peak_values = [item.p_peak_val for item in qrs_data_list] p_end_values = [item.p_end_val for item in qrs_data_list] qrs_onset_values = [item.qrs_onset_val for item in qrs_data_list] qrs_end_values = [item.qrs_end_val for item in qrs_data_list] t_peak_values = [item.t_peak_val for item in qrs_data_list] t_end_values = [item.t_end_val for item in qrs_data_list] scaled_r_peak_values = min_max_scaler.fit_transform(r_peak_values) scaled_p_onset_values = min_max_scaler.fit_transform(p_onset_values) scaled_p_peak_values = min_max_scaler.fit_transform(p_peak_values) scaled_p_end_values = min_max_scaler.fit_transform(p_end_values) scaled_qrs_onset_values = min_max_scaler.fit_transform(qrs_onset_values) scaled_qrs_end_values = min_max_scaler.fit_transform(qrs_end_values) scaled_t_peak_values = min_max_scaler.fit_transform(t_peak_values) scaled_t_end_values = min_max_scaler.fit_transform(t_end_values) data = [] for i in range(len(qrs_data_list)): tmp = QRSData([qrs_data_list[i].r_peak, scaled_r_peak_values[i], qrs_data_list[i].rr_pre_interval, qrs_data_list[i].rr_post_interval, qrs_data_list[i].p_onset, scaled_p_onset_values[i], qrs_data_list[i].p_peak, scaled_p_peak_values[i], qrs_data_list[i].p_end, scaled_p_end_values[i], qrs_data_list[i].qrs_onset, scaled_qrs_onset_values[i], qrs_data_list[i].qrs_end, scaled_qrs_end_values[i], qrs_data_list[i].t_peak, scaled_t_peak_values[i], qrs_data_list[i].t_end, scaled_t_end_values[i] ]) data.append(tmp) return data def run(self): pass