What is SMOTE and why is it used in machine learning for handling imbalanced datasets? How does SMOTE generate synthetic samples for minority classes? What are the advantages of using SMOTE in classification problems? How does SMOTE improve the performance of machine learning models on imbalanced data? What are the limitations and challenges associated with using SMOTE?