K означает, что кластеризация - это метод векторного квантования, который используется для разделения n наблюдения на k кластер, в котором каждое наблюдение принадлежит кластеру с ближайшими средними значениями.

В этой статье мы продемонстрируем

  • Обучите модель кластера k с использованием mllib, которая разрабатывается как часть проекта apache spark.
  • Сохраните нашу обученную модель в HDFS.
  • Используйте эту обученную модель для прогнозирования.

K означает кластеризацию

Рассмотрим следующий пример

Для риэлторской фирмы нам необходимо разделить потенциальных клиентов на два разных класса.

класс A: готов заплатить большую сумму за недвижимость.

Класс B: вы не хотите платить за недвижимость большие суммы.

Чтобы решить указанную выше проблему (разделить всех клиентов на две группы), мы смогли собрать следующие данные.

  • Годовой доход членов семьи.
  • Размер дома.
  • Расстояние от городской зоны.

В зависимости от вышеуказанных характеристик (собранных данных) все клиенты попадут в один из двух классов A или B.

Кластеризация

Кластеризация - это метод обучения без учителя, при котором мы пытаемся найти связь между n наблюдениями. В приведенном выше примере мы пытаемся найти связь между тремя функциями, и на основе этих функций все клиенты попадут в одну из двух групп.

K означает алгоритм

K означает неконтролируемый алгоритм кластеризации, в котором заданные точки данных разделяются на кластер, в котором квадрат расстояния между точками данных и центроидом минимален.

Шаг в K означает кластеризацию

  • Инициализация

Инициализируйте любые случайные точки как центроид кластера.

  • Назначение кластера

После инициализации центроида назначьте точки данных таким образом, чтобы расстояние между центроидом и точками данных было минимальным.

  • Перемещение центроида

Теперь рассчитанный нами центриод не может быть оптимизирован. Вычислите среднее значение точек данных и переместите центр тяжести. Повторяйте назначение кластера до тех пор, пока центроид не перестанет перемещаться, если движение центруда остановилось, мы можем сказать, что наш алгоритм оптимизирован.

  • Конвергенция

Теперь можно сказать, что алгоритм сходимся и может дать наглядный результат.

Обучение и сохранение модели с помощью Spark и Mlllib

В тренировочных целях мы используем вышеупомянутые особенности. Примерный обучающий набор будет выглядеть так.

Алгоритм mllib принимает тип ввода как тип вектор, поэтому сначала нам нужно извлечь все необходимые функции.

После извлечения функций из вышеуказанного обучающего набора мы можем использовать данные для обучения нашей модели кластера K-средних. Здесь мы берем 2 в качестве количества кластеров.

import org.apache.spark.mllib.clustering.KMeans
import org.apache.spark.mllib.linalg.Vectors
object KMeansClustering {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local").setAppName("testApp")

    val sc = new SparkContext(conf)
    val rdd = sc.parallelize(List(
      Vectors.dense(Array(100000.0, 15000.0, 10.0)),
      Vectors.dense(Array(1500000.0, 30000.0, 2.0)),
      Vectors.dense(Array(1500000.0,  30000.0, 1.0))))
    val numClusters = 2
    val numIterations = 20
    val clusters = KMeans.train(rdd, numClusters, numIterations)
}

Пошаговое объяснение

  • Импорт К средствами из библиотеки mllib.
  • Преобразуйте извлеченные нами функции в набор данных Resilient Distributes Dataset (RDD).
  • Установите количество кластеров как два (во время обучения K означает, что алгоритм разделит обучающие данные на любой из этих двух кластеров).
  • обучить модель с помощью обучающего набора.

Запустите приведенный выше код с помощью spark-submit, наша модель будет обучена и готова к использованию. Теперь давайте посмотрим, что мы можем сделать с этой обученной моделью.

Применить примеры прогнозов

val testSet=Vectors.dense(Array(100000.0, 15000.0, 10.0))
val samplePrediction=clusters.predict(testSet)

Определите набор тестовых данных, содержащий образцы данных. Примените прогноз к этим выборочным данным.

Сохранение обученной модели в HDFS и загрузка для использования в будущем

clusters.save(sc,"sample_model")
  • функция сохранения принимает на вход два параметра
  • sc - контекст искры.
  • следующий параметр - путь HDFS
import org.apache.spark.ml.clustering.KMeansModel
val model=KMeansModel.load("sample_model")

Мы можем загрузить сохраненную модель, используя функцию загрузки, указав путь HDFS в качестве параметра.

Потоки Spark

Поток Spark используется для чтения потоковой передачи из самых разных источников данных, таких как apache kafka, HDFS, kinesis. Мы также можем использовать нашу обученную модель для прогнозирования потоковых данных.

val inputDF= spark.read.option("header",true).csv("/project/test/sample.csv").toDF()
val k=model.transform(inputDF)