`DictVectorizer` doesn't raise `NotFittedError` when using transform without prior fitting

### Describe the bug

When trying to call the `transform` method of an unfitted DictVectorizer instance an `AttributeError` is raised instead of a `NotFittedError` .

Other transformers, such as StandardScaler, make use of `check_is_fitted` to raise a `NotFittedError`.

_I'm willing to make a PR to add `check_is_fitted` to DictVectorizer. Please let me know, if that's ok._

### Steps/Code to Reproduce

```python
from sklearn.exceptions import NotFittedError
from sklearn.feature_extraction import DictVectorizer

feat_dict = [{'col1': 'a', 'col2': 'x'},{'col1': 'b', 'col2': 'y'}]
dv = DictVectorizer()

try:
    dv.transform(feat_dict)
except NotFittedError as e:
    print("DictVectorizer is not fitted yet.")
```

### Expected Results

`NotFittedError` is raised, because `transform` method was called without prior fitting.

### Actual Results

```python
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In [4], line 8
      5 dv = DictVectorizer()
      7 try:
----> 8     dv.transform(feat_dict)
      9 except NotFittedError as e:
     10     print("DictVectorizer is not fitted yet.")

File ~/../lib/python3.11/site-packages/sklearn/feature_extraction/_dict_vectorizer.py:373, in DictVectorizer.transform(self, X)
    356 def transform(self, X):
    357     """Transform feature->value dicts to array or sparse matrix.
    358 
    359     Named features not encountered during fit or fit_transform will be
   (...)
    371         Feature vectors; always 2-d.
    372     """
--> 373     return self._transform(X, fitting=False)

File ~/.../lib/python3.11/site-packages/sklearn/feature_extraction/_dict_vectorizer.py:207, in DictVectorizer._transform(self, X, fitting)
    205     vocab = {}
    206 else:
--> 207     feature_names = self.feature_names_
    208     vocab = self.vocabulary_
    210 transforming = True

AttributeError: 'DictVectorizer' object has no attribute 'feature_names_'
```

### Versions

```shell
System:
    python: 3.11.0 (main, Oct 24 2022, 19:56:13) [GCC 11.2.0]
executable: /home/user/.cache/pypoetry/virtualenvs/sklean-dev-SgMhZBSc-py3.11/bin/python
   machine: Linux-5.10.102.1-microsoft-standard-WSL2-x86_64-with-glibc2.35

Python dependencies:
      sklearn: 1.1.3
          pip: 22.3
   setuptools: 65.5.0
        numpy: 1.23.4
        scipy: 1.9.3
       Cython: None
       pandas: 1.5.1
   matplotlib: 3.6.0
       joblib: 1.2.0
threadpoolctl: 3.1.0

Built with OpenMP: True
```

COMMENT:
Thank you for your feedback. I have created a PR for checking the state of a DictVectorizer instance using [`check_is_fitted()`](https://scikit-learn.org/stable/modules/generated/sklearn.utils.validation.check_is_fitted.html) from the utils package. 

I'm not quite sure how [`check_estimator()`](https://scikit-learn.org/stable/modules/generated/sklearn.utils.estimator_checks.check_estimator.html) could help. As far as I understand it would only check if the input is valid.

Labels: Bug, module:feature_extraction