class_docstr: Encapsulate features, labels, and metadata for a given dataset.
  
  Parameters
  ----------
  name : str
      The name of this feature set.
  
  ids : Union[List[str], numpy.ndarray]
      Example IDs for this set.
  
  labels : Optional[Union[List[str], numpy.ndarray], default=None
      Labels for this set.
  
  features : Optional[Union[:class:`skll.types.FeatureDictList`, :class:`numpy.ndarray`]], default=None
      The features for each instance represented as either a
      list of dictionaries or a numpy array (if ``vectorizer`` is
      also specified).
  
  vectorizer : Optional[Union[:class:`sklearn.feature_extraction.DictVectorizer`, :class:`sklearn.feature_extraction.FeatureHasher`], default=None
      Vectorizer which will be used to generate the feature matrix.
  
  Warnings
  --------
  FeatureSets can only be equal if the order of the instances is
  identical because these are stored as lists/arrays. Since scikit-learn's
  ``DictVectorizer`` automatically sorts the underlying feature matrix
  if it is sparse, we do not do any sorting before checking for equality.
  This is not a problem because we _always_ use sparse matrices with
  ``DictVectorizer`` when creating FeatureSets.
  
  Notes
  -----
  If ids, labels, and/or features are not None, the number of rows in
  each array must be equal.
docstr: Subset ``FeatureSet`` instance by removing all features from ``other`` instance.
  
  Parameters
  ----------
  other : :class:`skll.data.featureset.FeatureSet`
      The other ``FeatureSet`` containing the features that should
      be removed from this ``FeatureSet``.
  
  Returns
  -------
  :class:`skll.data.featureset.FeatureSet`
      A copy of ``self`` with all features in ``other`` removed.
docstr_tok: ["Subset","``","FeatureSet","``","instance","by","removing","all","features","from","``","other","``","instance",".","Parameters","--","--","--","--","--","other",":",":","class",":","`","skll.data.featureset.FeatureSet","`","The","other","``","FeatureSet","``","containing","the","features","that","should","be","removed","from","this","``","FeatureSet","``",".","Returns","--","--","--","-",":","class",":","`","skll.data.featureset.FeatureSet","`","A","copy","of","``","self","``","with","all","features","in","``","other","``","removed","."]
code: def __sub__(self, other: "FeatureSet") -> "FeatureSet":
      """
      Subset ``FeatureSet`` instance by removing all features from ``other`` instance.
  
      Parameters
      ----------
      other : :class:`skll.data.featureset.FeatureSet`
          The other ``FeatureSet`` containing the features that should
          be removed from this ``FeatureSet``.
  
      Returns
      -------
      :class:`skll.data.featureset.FeatureSet`
          A copy of ``self`` with all features in ``other`` removed.
      """
      new_set = deepcopy(self)
      if other.vectorizer:
          new_set.filter(
              features=other.vectorizer.feature_names_, inverse=True
          )
      return new_set
  
imports: from copy import deepcopy
  from typing import Collection, List, Optional, Tuple, Union
  import numpy
  import scipy.sparse
  from pandas import DataFrame
  from sklearn.feature_extraction import DictVectorizer, FeatureHasher
  from skll.data.dict_vectorizer import DictVectorizer
  from skll.types import FeatGenerator, FeatureDictList, IdType, LabelType, SparseFeatureMatrix
label_desc: Use image node_id 9 for calling the FeatureSet obj's underlying member method code with example usage: obj.__sub__(other) and returns: new_set