Tuesday, August 30, 2022

skmultiflow.data.SEAGenerator

 Генератор потока 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