[kotlin] 코틀린을 이용한 비지도 학습 기법
비지도 학습은 레이블이 지정되지 않은 데이터에서 패턴이나 트렌드를 발견할 수 있는 기술적 접근법 중 하나입니다. 즉, 데이터셋에서 미리 정의된 출력 레이블이나 명시적인 피드백 없이 알고리즘 모델링을 수행하는 방식을 말합니다.
클러스터링
클러스터링은 비지도 학습의 대표적인 예시로, 데이터를 서로 유사한 그룹으로 분류합니다. 각 그룹은 클러스터라고 하며, 데이터 간의 유사성을 기반으로 클러스터를 형성합니다. k-평균 알고리즘은 클러스터링을 수행하기 위한 인기 있는 알고리즘 중 하나입니다.
import org.apache.spark.ml.clustering.KMeans
import org.apache.spark.ml.evaluation.ClusteringEvaluator
import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.ml.feature.StandardScaler
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().appName("KMeansExample").getOrCreate()
val dataset = spark.read.format("libsvm").load("data/mllib/sample_kmeans_data.txt")
val assembler = new VectorAssembler()
.setInputCols(Array("f1", "f2", "f3", "f4"))
.setOutputCol("features")
val features = assembler.transform(dataset)
val scaler = new StandardScaler()
.setInputCol("features")
.setOutputCol("scaledFeatures")
.setWithStd(true)
.setWithMean(false)
val scaledData = scaler.fit(features).transform(features)
val kmeans = new KMeans().setK(2).setSeed(1L)
val model = kmeans.fit(scaledData)
val predictions = model.transform(scaledData)
val evaluator = new ClusteringEvaluator()
val silhouette = evaluator.evaluate(predictions)
println(s"Silhouette with squared euclidean distance = $silhouette")
주성분 분석
주성분 분석(PCA)은 데이터의 주요 특징이나 패턴을 파악하기 위해 고차원 데이터를 저차원 공간으로 변환하는 기술입니다. 이를 통해 데이터의 차원을 축소하고 주요 특징을 추출할 수 있습니다.
import org.apache.spark.ml.feature.PCA
import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().appName("PCAExample").getOrCreate()
val data = spark.read.format("libsvm").load("data/mllib/sample_lda_libsvm_data.txt")
val assembler = new VectorAssembler()
.setInputCols(Array("features"))
.setOutputCol("assembled")
val output = assembler.transform(data)
val pca = new PCA()
.setInputCol("assembled")
.setOutputCol("pcaFeatures")
.setK(3)
.fit(output)
val result = pca.transform(output).select("pcaFeatures")
비지도 학습을 활용하여 데이터의 패턴 및 특성을 탐색하는 과정은 데이터 과학 분야에서 중요한 부분을 차지합니다. 클러스터링이나 주성분 분석을 비롯한 다양한 비지도 학습 알고리즘을 활용하여 데이터를 탐색하고 관계를 파악함으로써 데이터를 더 잘 이해할 수 있습니다.
참고문헌:
- https://spark.apache.org/docs/latest/ml-clustering.html
- https://spark.apache.org/docs/latest/ml-features.html#pca