Генератор потока SEA.
Этот генератор представляет собой реализацию потока данных с резким дрейфом концепции, впервые описанную Стритом и Кимом в «Алгоритме потокового ансамбля (SEA) для крупномасштабной классификации». Он генерирует 3 числовых атрибута, которые варьируются от 0 до 10, где только 2 из них имеют отношение к задаче классификации. Выбирается классификационная функция из четырех возможных. Эти функции сравнивают сумму двух релевантных атрибутов с пороговым значением, уникальным для каждой из функций классификации. В зависимости от сравнения генератор классифицирует экземпляр как одну из двух возможных меток.
Дрейф концепции можно ввести, изменив функцию классификации. Это можно сделать вручную или с помощью ConceptDriftStream.
Этот поток данных имеет два дополнительных параметра, первый — балансировать классы, что означает, что распределение классов будет стремиться к равномерному, и возможность добавления шума, который с некоторой вероятностью изменит выбранную метку для экземпляра.
Параметры
Функция_классификации: int (по умолчанию: 0). Какую из четырех функций классификации использовать для генерации - это значение может варьироваться от 0 до 3, а пороговые значения: 8, 9, 7 и 9,5. random_state: int, экземпляр RandomState или None, необязательно (по умолчанию = None)
Random_state: int, экземпляр RandomState или None, необязательно (по умолчанию = None)
Если int, random_state — это начальное число, используемое генератором случайных чисел;
Если экземпляр RandomState, random_state является генератором случайных чисел;
Если None,генератором случайных чисел является экземпляр RandomState, используемый np.random.
Балансировать классы или нет. Если сбалансировано, распределение классов будет сходиться к равномерному распределению. Noise_percentage: число с плавающей запятой (по умолчанию: 0,0)
Вероятность появления шума в генерации. При каждой новой сгенерированной выборке генерируется случайная вероятность, и если эта вероятность выше, чем уровень шума, выбранная метка будет переключена. От 0,0 до 1,0.
(.env) boris@boris-All-Series:~/RANDOMSEARCH$ cat seaGenerator.py
from skmultiflow.data import SEAGenerator
from skmultiflow.evaluation import EvaluatePrequential
from skmultiflow.trees import HoeffdingTreeClassifier
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
stream = SEAGenerator() # create a stream
stream.prepare_for_use() # prepare the stream for use
X,Y = stream.next_sample()
tree = HoeffdingTreeClassifier()
nb_iters = 30000
correctness_dist = []
for i in range(nb_iters):
X, Y = stream.next_sample() # get the next sample
prediction = tree.predict(X) # predict Y using the tree
if Y == prediction: # check the prediction
correctness_dist.append(1)
else:
correctness_dist.append(0)
tree.partial_fit(X, Y) # update the tree
time = [i for i in range(1, nb_iters)]
accuracy = [sum(correctness_dist[:i])/len(correctness_dist[:i]) \
for i in range(1, nb_iters)]
plt.plot(time, accuracy)
evaluator=EvaluatePrequential(show_plot=True,pretrain_size=200,max_samples=nb_iters)
evaluator.evaluate(stream=stream, model=tree)
No comments:
Post a Comment