NetworkML: train_OneLayerModel.py script and training samples errors

Hi, I am trying to create a model to be used in Poseidon #49. I captured traffic from raspberry pi and a laptop into two pcap files, then.

1- I added “IOT” into config.json labels list. 2- I added the two pcap files into pcap dir and edited label_assignments.json as below.

root@e0e996977e0e:/app/NodeClassifier/pcap# ls
BusinessWS-60m-mylaptop.pcap  label_assignments.json
IOT-260m-ibmwatsoniot.pcap

root@e0e996977e0e:/app/NodeClassifier/pcap# cat label_assignments.json
{
    "IOT": "IOT",
    "BusinessWS": "Business workstation"
}

When I run train script, I got “ValueError: This solver needs samples of at least 2 classes in the data, but the data contains only one class: 0”. What is wrong? I have already added two pcap files and labeled them in label_assignments.json.

rs/ot@e0e996977e0e:/app/NodeClassifier# python train_OneLayerModel.py pcap/ models
Reading data
Reading pcap/IOT-260m-ibmwatsoniot.pcap as IOT
Reading pcap/BusinessWS-60m-mylaptop.pcap as Business workstation
Making data splits
Normalizing features
Doing feature selection
Traceback (most recent call last):
  File "train_OneLayerModel.py", line 28, in <module>
    model.train(data_dir)
  File "/app/NodeClassifier/utils/OneLayer.py", line 153, in train
    self.feature_list = select_features(X_normed, y_train)
  File "/app/NodeClassifier/utils/training_utils.py", line 101, in select_features
    selection_model.fit(X, y)
  File "/usr/local/lib/python3.5/site-packages/sklearn/linear_model/randomized_l1.py", line 112, in fit
    sample_fraction=self.sample_fraction, **params)
  File "/usr/local/lib/python3.5/site-packages/sklearn/externals/joblib/memory.py", line 283, in __call__
    return self.func(*args, **kwargs)
  File "/usr/local/lib/python3.5/site-packages/sklearn/linear_model/randomized_l1.py", line 54, in _resample_model
    for _ in range(n_resampling)):
  File "/usr/local/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py", line 758, in __call__
    while self.dispatch_one_batch(iterator):
  File "/usr/local/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py", line 608, in dispatch_one_batch
    self._dispatch(tasks)
  File "/usr/local/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py", line 571, in _dispatch
    job = self._backend.apply_async(batch, callback=cb)
  File "/usr/local/lib/python3.5/site-packages/sklearn/externals/joblib/_parallel_backends.py", line 109, in apply_async
    result = ImmediateResult(func)
  File "/usr/local/lib/python3.5/site-packages/sklearn/externals/joblib/_parallel_backends.py", line 326, in __init__
    self.results = batch()
  File "/usr/local/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py", line 131, in __call__
    return [func(*args, **kwargs) for func, args, kwargs in self.items]
  File "/usr/local/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py", line 131, in <listcomp>
    return [func(*args, **kwargs) for func, args, kwargs in self.items]
  File "/usr/local/lib/python3.5/site-packages/sklearn/linear_model/randomized_l1.py", line 377, in _randomized_logistic
    clf.fit(X, y)
  File "/usr/local/lib/python3.5/site-packages/sklearn/linear_model/logistic.py", line 1186, in fit
    sample_weight=sample_weight)
  File "/usr/local/lib/python3.5/site-packages/sklearn/svm/base.py", line 875, in _fit_liblinear
    " class: %r" % classes_[0])
ValueError: This solver needs samples of at least 2 classes in the data, but the data contains only one class: 0

About this issue

  • Original URL
  • State: closed
  • Created 6 years ago
  • Comments: 24 (18 by maintainers)

Most upvoted comments

This error has been solved by following the naming pattern for pcap file like the same here