<｜begin▁of▁sentence｜>### Instruction:
Suppose you have a dataset represented by a NumPy array `X` of shape (300, 3), where each row corresponds to a sample with 3 features, and you want to cluster the data using a Gaussian Mixture Model. You aim to select the best model based on a criterion (AIC or BIC) automatically and want to try different numbers of components, affinities, linkages, and covariance types in the process. How can you use the `AutoGMMCluster` class from graspologic to fit the GMM model, predict the clusters, and obtain the number of clusters chosen along with the ARI (Adjusted Rand Index) score if labels are known?
### Response:
import numpy as np
from graspologic.cluster import AutoGMMCluster

# Generate synthetic data
n_samples = 300
n_features = 3
np.random.seed(42)
X = np.random.normal(0, 1, (n_samples, n_features))

# Fit the GMM model
agmm = AutoGMMCluster(min_components=2, max_components=10, affinity='all', linkage='all', covariance_type='all')
agmm.fit(X)

# Fetch the labels
labels = agmm.predict(X)

# Print the number of clusters selected and the ARI score
print(f'Number of clusters: {agmm.n_components_}')
print(f'ARI Score: {agmm.ari_}')
<|EOT|>
