[go] Go 언어로 데이터 분류를 위한 KNN 알고리즘 구현하기

KNN 알고리즘은 데이터 분류와 회귀 분석에 사용되는 간단하면서도 효과적인 지도 학습 알고리즘입니다. 이번에는 Go 언어를 사용하여 KNN 알고리즘을 구현해보겠습니다.

KNN 알고리즘 개요

KNN 알고리즘은 주어진 데이터를 특정 카테고리로 분류하는 데 활용됩니다. 이 알고리즘은 입력 데이터와 가장 가까운 k개의 이웃을 찾아 다수결 투표를 통해 데이터를 분류합니다.

KNN 알고리즘 구현

다음은 Go 언어를 사용하여 간단한 KNN 알고리즘을 구현한 예시입니다.

package main

import (
	"fmt"
	"math"
)

// 데이터 포인트 구조체
type DataPoint struct {
	x float64
	y float64
	category string
}

// 두 데이터 포인트 간의 거리 계산
func distance(p1, p2 DataPoint) float64 {
	return math.Sqrt(math.Pow(p2.x-p1.x, 2) + math.Pow(p2.y-p1.y, 2))
}

// KNN 분류 함수
func classifyKNN(data []DataPoint, newPoint DataPoint, k int) string {
	// 거리를 기준으로 데이터를 오름차순으로 정렬
	sortByDistance(data, newPoint)

	// 가장 가까운 k개의 이웃 찾기
	nearestNeighbors := data[:k]

	// 다수결 투표를 통해 분류
	categoryCount := make(map[string]int)
	for _, neighbor := range nearestNeighbors {
		categoryCount[neighbor.category]++
	}

	var maxCategory string
	maxCount := 0
	for category, count := range categoryCount {
		if count > maxCount {
			maxCount = count
			maxCategory = category
		}
	}

	return maxCategory
}

// 데이터를 주어진 점에 대한 거리에 따라 오름차순으로 정렬
func sortByDistance(data []DataPoint, newPoint DataPoint) {
	sort.Slice(data, func(i, j int) bool {
		return distance(data[i], newPoint) < distance(data[j], newPoint)
	})
}

func main() {
	// 테스트 데이터
	data := []DataPoint{
		{3, 5, "A"},
		{1, 4, "A"},
		{4, 2, "B"},
		{4, 5, "B"},
	}

	// 새로운 데이터 포인트
	newDataPoint := DataPoint{2, 4, ""}

	// KNN 알고리즘을 사용하여 분류
	k := 3
	category := classifyKNN(data, newDataPoint, k)
	fmt.Println("New point belongs to category:", category)
}

위의 예제는 DataPoint 구조체를 통해 데이터를 표현하고, 주어진 데이터를 기반으로 새로운 데이터 포인트를 분류하는 classifyKNN 함수를 구현하였습니다.

결론

Go 언어를 활용하여 KNN 알고리즘을 구현하는 방법을 살펴보았습니다. KNN은 간단하면서도 강력한 분류 알고리즘이며, 이를 구현함으로써 데이터 분류 문제에 대한 솔루션을 구축할 수 있습니다.

더 많은 정보를 원하시는 경우, 다음 링크를 참조해주세요.