What is t-SNE (t-Distributed Stochastic Neighbor Embedding) and how is it used in machine learning? How does t-SNE reduce high-dimensional data into lower dimensions for visualization? What are the key steps and concepts involved in the t-SNE algorithm? In which scenarios is t-SNE most effective for data analysis? What are the limitations and challenges of using t-SNE in real-world applications?