#### Overview of this book

This book will teach you about popular machine learning algorithms and their implementation. You will learn how various machine learning concepts are implemented in the context of Spark ML. You will start by installing Spark in a single and multinode cluster. Next you'll see how to execute Scala and Python based programs for Spark ML. Then we will take a few datasets and go deeper into clustering, classification, and regression. Toward the end, we will also cover text processing using Spark ML. Once you have learned the concepts, they can be applied to implement algorithms in either green-field implementations or to migrate existing systems to this new platform. You can migrate from Mahout or Scikit to use Spark ML. By the end of this book, you will acquire the skills to leverage Spark's features to create your own scalable machine learning applications and power a modern data-driven business.
Preface
Math for Machine Learning
Obtaining, Processing, and Preparing Data with Spark
Building a Recommendation Engine with Spark
Building a Classification Model with Spark
Building a Regression Model with Spark
Building a Clustering Model with Spark
Dimensionality Reduction with Spark
Real-Time Machine Learning with Spark Streaming
Pipeline APIs for Spark ML

# Bisecting KMeans

It is a variation of generic KMeans.

Reference: http://www.siam.org/meetings/sdm01/pdf/sdm01_05.pdf

The steps of the algorithm are:

1. Initialize by randomly selecting a point, say then compute the centroid w of M and compute:

The centroid is the center of the cluster. A centroid is a vector containing one number for each variable, where each number is the mean of a variable for the observations in that cluster.
1. Divide M =[x1, x2, ... xn] into two, sub-clusters ML and MR, according to the following rule:

1. Compute the centroids of ML and MR, wL and wR, as in step 2.
1. If wL = cL and wR = cR, stop.
Otherwise, let cL= wL cR = wR , go to step 2.