В своем исследовании я пытаюсь сгенерировать данные из данных mam_cancer .В своем коде я попытался получить некоторые частичные данные из исходного и обучить его на one class svm
.Моя цель - генерировать синтетические данные, которые очень похожи на оригинальные.Таким образом, one class svm
не может различить разницу между оригинальной и сгенерированной.
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn.metrics import accuracy_score
from sklearn import preprocessing
DATA_FILE = "breastcancer.txt"
adversary_percentages = [0.01, 0.02, 0.04, 0.08, 0.16]
for adversary_percentage in adversary_percentages:
data = pd.read_csv(DATA_FILE, sep=",")
data = data.dropna(how='any', axis=0)
data = data.drop(data.columns[0], axis=1)
main_data, adversary_data = train_test_split(data, test_size=adversary_percentage, random_state=1234)
scaler = preprocessing.MinMaxScaler()
adversary_input = scaler.fit_transform(adversary_data)
svc = svm.OneClassSVM(nu=0.01, gamma=0.1).fit(adversary_input)
predicted = svc.predict(adversary_input)
print("accuracy: " + str(np.round(sum(predicted[predicted==1.0])/len(predicted),2)))
В конце кода я понял некоторую ненормальность, которую я не могу объяснить.Хотя процентное соотношение исходных данных, которое имеет one class svm
, увеличивается, меньшее количество данных помечается как выбросы, и точность увеличивается.Не могли бы вы помочь мне понять проблему?
percentage_of_data_one_class_has: 0.01 accuracy: 0.79
percentage_of_data_one_class_has: 0.02 accuracy: 0.78
percentage_of_data_one_class_has: 0.04 accuracy: 0.88
percentage_of_data_one_class_has: 0.08 accuracy: 0.94
percentage_of_data_one_class_has: 0.16 accuracy: 0.96