소개 클러스터링 알고리즘은 K-수단

k 번째 수단 알고리즘은 클러스터링 알고리즘을 기반으로 분할하고,이 파라미터 (K)이고, 그 클러스터가 높은 유사성을 가질 수 있도록 상기 N 개의 데이터는, K 개의 클러스터로 객체, 클러스터들 사이의 유사도는 낮다.

1. 기본 개념

k 번째 수단 알고리즘은 클러스터의 파티션을 구성하는 k는 n 개의 데이터 객체들의 집합에있어서 소정의 데이터이며, 분할 된 각 클러스터는 클러스터이다. 하나의 클러스터가 속하는 N 개의 클러스터로 데이터를 분할하는 방법은, 적어도 하나의 데이터 오브젝트를 갖는 각각의 클러스터, 각 데이터 객체는 속해야. 높은 유사성 동일한 클러스터의 데이터 오브젝트를 충족시키면서, 데이터는 작은 유사도 상이한 클러스터의 개체. 각 클러스터의 유사성을 이용하여 클러스터링을 계산 대상으로 의미한다.

알고리즘은 다음과 같이 처리 흐름은 K-는 것을 의미한다. 우선, 임의로 선택된 데이터 객체들을 K, 각 데이터 즉 클러스터 중심 선택된 K의 초기 중심 나타내는 개체는 각각의 클러스터 중심 (거리)과의 유사성에 따라 각 오브젝트에 대한 나머지를, 그것은 할당 될 클러스터의 중심에 대응하는 가장 유사한 클러스터 후 각 클러스터의 모든 목적, 새로운 클러스터 중심의 평균값을 다시 계산합니다.

컨버전스 기준 기능까지 위의 과정을 반복, 즉, 클러스터 센터는 크게 변경되지 않습니다. 즉, 일반적으로 거리의 제곱과 가장 가까운 클러스터 중심을 최소화하기 위해 각 점의 평균 제곱 오차 기준의 함수로서.

새 클러스터 중심의 평균을 계산하는 방법, 즉 각 클러스터의 됨으로써 중심점 모든 오브젝트의 각 차원의 값을 평균 클러스터의 모든 오브젝트에 대해 계산된다. 예를 들어, 세 개의 데이터 객체를 포함하는 클러스터 {(6,4,8)를 (8,2,2)가 (4,6,2)를}, 클러스터의 중심점이다 ((6 + 4 + 8 ) / 3 (2 + 6 + 4) / 3 (2 + 2 + 8) / 3) = (6,4,4).

알고리즘은 두 개의 오브젝트 간의 거리 데이터의 유사도를 이용하여 설명-수단 케이. 그램에서 명나라 스타일, 유클리드 거리, 및 말 타입의 거리에서 거리 기능은 가장 일반적으로 사용되는 유클리드 거리입니다.
기준 함수 또는 최대 반복 횟수를 종료 할 때 알고리즘이 최적-수단 케이. 때 유클리드 거리 기준 기능하는 클러스터 중심의 거리의 제곱과 데이터 오브젝트 일반적 최소화하기 .
이고, K는 클러스터의 수는  i 번째 클러스터 DIST (중심점된다 는 X로, X)  의 거리.

2. 스파크 MLlib K 용 수단 알고리즘

MLlib KMeans는 다음과 같은 매개 변수를 가지고있는 스파크의 알고리즘 구현 클래스를 K는-의미한다.

클래스 KMeans 개인 (
개인 var에 K : INT,
개인 var에 maxiterations : INT,
개인 VAR 실행 : INT,
개인 var에 initializationMode 문자열
개인 var에 initializationStep : INT,
개인 var에 엡실론 : 더블,
개인 var에 씨앗 : 롱) 확장 : 로깅과 직렬화

1) K-수단 생성자 MLlib

MLlib 인터페이스의 일례로서 K-수단의 디폴트 값으로 설정.

{K : 2, maxIterations : 20, 실행 : 1 initializationMode는 : KMeans.K_MEANS_PARALLEL, InitializationSteps : 5, 엡실론 르 -4- 종자 : 랜덤}.

매개 변수의 의미는 아래에 설명되어 있습니다.

이름 설명
케이 이는 클러스터의 수를 나타낸다.
maxIterations 단일 실행의 반복 표현의 최대 수.
실행 이 알고리즘이 실행되는 횟수를 나타냅니다. 케이 - 수단 알고리즘은 글로벌 최적의 클러스터링 결과를 반환 보장되지 않습니다, 많은 시간은 최고의 클러스터링 결과를 반환 할 수 있도록 설정 대상 데이터에 대한 알고리즘을 K는-의미 달렸다.
initializationMode 선택 방법은 초기 클러스터 센터는 현재 임의 선택 또는 K_MEANS_PARALLEL 모드를 지원 나타내며, 기본은 K_MEANS_PARALLEL입니다.
initializationsteps K_MEANS_PARALLEL은 방법의 단계들의 수를 나타낸다.
엡실론 이는 K-수단 알고리즘 수렴 반복 임계치를 나타낸다.
이 클러스터가 초기화되는 임의의 씨앗을 나타냅니다.

일반적으로 응용 프로그램이 첫 훈련 데이터 집합을 클러스터링을위한 KMeans.train의 메소드를 호출,이 방법은 새로운 데이터 객체가 KMeansModel.predict 클러스터링 방법을 속한 이용하여 예측 될 수있다 KMeansModel 클래스의 인스턴스를 반환합니다.

2) MLlib은 교육 기능은 K-수단

가장 파라미터 전체를 설명하는 방법 KMeans.train MLlib 많은 오버로드 된 메소드 K-수단 교육 기능이있다. KMeans.train은 다음과 같습니다.

데프 기차 (
자료 : RDD [벡터],
K : 지능
maxIterations : 지능이
실행 : 지능
initializationMode : 문자열,
씨앗 : 롱) : KMeansModel = {
. 새로운 KMeans () setK (K) -
.setMaxIterations (maxIterations)
.setRuns (실행 )
.setInitializatinMode (initializationMode)
.setSeed (시드)
.RUN (데이터)
}
)

각 매개 변수의 생성자 메소드와 동일한 의미 여기서 반복하지 않는다.

MLlib에서 K-수단 3) 예측 함수

K 용 수단 방법 KMeansModel.predict MLlib 예측 함수는, 데이터 입력 매개 변수의 상이한 형식으로 수신 벡터 또는 RDD 수 있고, 입력 파라미터가 클러스터 인덱스를 반환 속한다. 다음과 같이 API KMeansModel.predict 방법이다.

DEF (: 벡터 포인트) : 예측 지능은
DEF 예측 (점수 RDD [벡터]) RDD [INT]

제 예측 방법은 단지 하나의 포인트를받을 수 있고, 클러스터의 인덱스를 반환 번째 예측 방법은, 포인트들의 세트 및 값이 RDD 클러스터 방식으로 리턴되는 각 포인트를 수신 할 수있다.

알고리즘의 실시 예 K-3 수단에 MLlib

예 : 사용 오기 트레이닝 데이터 세트는 파라미터로서 알고리즘에 전달되는 클러스터의 노드의 수 중에서 두 개의 클러스터들로 클러스터링 된 데이터의 알고리즘 k는-의미하고 증가시킴으로써, 클러스터 내에서의 평균 제곱 오차 (WSSSE)의 합을 계산 k는 에러를 감소시키기 클러스터의 개수이다.

이 예에서는 스텝은 클러스터링 알고리즘은 다음과 K-수단을 사용한다.

①  로드 데이터는 데이터를 텍스트 파일에 저장됩니다.

 데이터 클러스터의 수를 2 내지 20의 반복에 대한 클래스를 설정, 모델 트레이닝 데이터 모델을 형성한다.

 데이터 모델의 인쇄 중심점.

 데이터 모델의 제곱의 에러 합계를 사용하여 평가합니다.

 단일 포인트 데이터를 테스트 할 모델을 사용합니다.

 가교 2를 평가하고, 결과 데이터를 반환 설정 십자 평가 1의 결과를 반환한다.

이 예는 다음의 데이터에 나타내는 바와 같이, 문서 kmeans_data.txt에 저장된 데이터는 공간적 위치는 6 점의 좌표를 사용한다.

0.0 0.0 0.0
0.1 0.1 0.1
0.2 0.2 0.2
9.0 9.0 9.0
9.1 9.1 9.1
9.2 9.2 9.2

데이터의 각 행은, 각 점은 3 차원 공간에 설명 된 세 가지 디지털 좌표 값을 가지며, 하나 개의 점을 설명한다. 각 열은 특징적인 인덱스 데이터, 데이터 세트 클러스터링 분석으로 간주한다. 코드 구현은 다음과 같습니다.

  1. 수입 org.apache.log4j. {수준, 로거}
  2. 수입 org.apache.spark. SparkConf {} SparkContext
  3. 수입 org.apache.spark.mllib.clustering.KMeans
  4. 수입 org.apache.spark.mllib.linalg.Vectors
  5.  
  6. 객체 Kmeans {
  7. 메인 DEF (인수 : 배열 [문자열]) {
  8. 운영 환경을 설정 //
  9. 브로 conf의 새로운 SparkConf = (). setAppName ( "Kmeans"). setMaster ( "로컬 [4]")
  10. 발 캐롤라이나 = 새로운 SparkContext (conf의)
  11. //로드 데이터 세트
  12. 발 데이터 = sc.textFile ( "/ 홈 / 하둡 / 운동 / kmeans_data.txt", 1)
  13. 브로 parsedData data.map = (S => Vectors.dense (s.split ( "). 맵 (_. toDouble)))
  14. 데이터 모델 // 데이터를 클러스터링 번호를 형성, 클래스 2, 20 반복, 전차 모델로 설정
  15. 브로 numClusters = 2
  16. numIterations = 20 웨이브
  17. 발 모델 = KMeans.train (parsedData, numClusters, numIterations)
  18. // 중심점의 데이터 모델을 인쇄
  19. 삭제 프린트 ( "클러스터 센터")
  20. 대 (<C - model.clustercenters) {
  21. 삭제 프린트 ( ""+ c.toString)
  22. }
  23. // 제곱 오차의 합을 평가하기 위해 데이터 모델을 사용하여
  24. 발 비용 = model.computeCost (parsedData)
  25. 삭제 프린트 ( "제곱 오류의 설정 합 이내 ="+ 비용)
  26. // 단일 지점 데이터를 테스트 할 모델을 사용
  27. 삭제 프린트 ( "벡터 0.2 0.2 0.2이이 클러스터에 속하는"+ model.predict (Vectors.dense ( "0.2 0.2 0.2".split ( ")지도 (_ toDouble))).).
  28. 삭제 프린트 ( "벡터 0.25 0.25 0.25 클러스터에 속하는".. + model.predict에게 (Vectors.dense를 ( "0.25 0.25 0.25".split ( "))지도 (_ toDouble))))
  29. 삭제 프린트 ( "벡터 8 8 8 클러스터에 속하는". + model.predict에게 (Vectors.dense를 ( "8 8 8".split ( '') .MAP (_ toDouble))))
  30. 1 // 교차 평가, 결과 만
  31. 브로 testdata로 data.map = (S => Vectors.dense (s.split ( "). 맵 (_. toDouble)))
  32. 브로 결과 1 = model.predict (testdata로)
  33. result1.saveAsTextFile ( "/ 홈 / 하둡 / 업로드 / class8 / result_kmeans1")
  34. 2 크로스 @ 평가하고, 그 결과 데이터 세트를 리턴
  35. 브로 result2 = {data.map
  36. 광고 =>
  37. 발에 linevectore = Vectors.dense (line.split ( ").지도 (_. toDouble))
  38. 발 예측 = model.predict (linevectore) 라인 + ""+ 예측
  39. } .saveAsTextFile ( "/ 홈 / 하둡 / 업로드 / class8 / result_kmeans2")
  40. sc.stop ()
  41. }
  42. }

코드가 실행되면, 윈도우는 모델에 의해 산출 된 주행 데이터 볼과 식별 된 두 개의 클러스터의 중심점 될 수있다 : (9.1, 9.1, 9.1) 및 (0.1, 0.1, 0.1)과, 상기 모델을 사용하는 점을 테스트 분류가 클러스터에 속하는는 1,1,0를 얻을 수 있습니다.

한편, 두 개의 출력 대상 / 홈 / 하둡 / 스파크 / mllib / 운동 디렉토리가 있습니다 : result_kmeansl 및 result_kmeans2. 크로스 출력 클러스터에 속하는 여섯 0,0,0,1,1,1 점의 평가 상기 크로스 클러스터 평가에 설정된 제 2 출력 데이터의 각 점에 속한다.

4. 알고리즘의 장점과 단점

k 번째 수단 클러스터링 알고리즘 이해와 구현이 간단하고 효율적이며 용이 고전 알고리즘이며,이 알고리즘 낮은 시간 복잡도는 r은 반복 수이고, O (TKM)이며, k는 클러스터의 수이고, m은 상기 N-차원 레코드 번호, 및 t << MK << N.

많은 불충분있다,-K 수단 알고리즘.

추천

출처blog.csdn.net/yuyuy0145/article/details/92430077