반응형

안녕하세요


오늘은 R로 머신러닝하기 마지막 알고리즘, SVM에 대해 알아보겠습니다.


서포트 벡터 머신(SVM)이란,

 매우 강력하고 선형이나 비선형 분류, 회귀, 이상치 탐색에도 사용할 수 있는 다목적 머신러닝 모델입니다!



SVM 알고리즘 아이디어는 다음과 같습니다.




다차원 공간을 초평면이라고 하는 경계를 사용하여 데이터를 양쪽에 유사한 클래스 값들의 그룹으로 분할합니다.



[ 용어 설명 ]


경계에 가장 가까운 값들을 support vectors라고 합니다.


예를 들어 위의 이차원 그래프에서의 초평면은 직선(w*x - b = 0)입니다.




여기서 아래의 검정색 원과 흰색 원을 분할하는 직선은 하나이상 존재합니다.




그렇다면 알고리즘은 어떻게 선택해야 할까요?



답은 두 클래스 사이를 가장 멀리 분리하는 최대 마진 초평면(MMH, Maximum Margin Hyperplane)을 찾는 것입니다.




R로 알아보는 SVM 알고리즘

# 1. 데이터 로드

# 데이터출처: "R을 활용한 머신러닝-브레트 란츠"


letters <- read.csv("letterdata.csv")

str(letters) # 2. 훈련 데이터와 테스터 데이터 구분 letters_train <- letters[1:16000, ] letters_test <- letters[16001:20000, ] # 3. 데이터로 모델 훈련 ---- # 단순 선형 SVM을 훈련으로 시작 # install.packages("kernlab") library(kernlab) # knn와 svm과 섞임 # vanilladot letter_classifier <- ksvm(letter ~ ., data = letters_train, kernel = "vanilladot") # 4. 모델에 대한 기본 정보 확인

# C 하이퍼 파라미터를 사용하여 MMH과 support vectors의 폭을 조절할 수 있습니다. # SV type: C-svc (classification)

# parameter : cost C = 1 letter_classifier # 5..모델 성능 평가 ---- # 테스트 데이터셋에 대한 예측 letter_predictions <- predict(letter_classifier, letters_test) head(letter_predictions) table(letter_predictions, letters_test$letter) # 6. 일치/불일치 예측을 표시하는 TRUE/FALSE 벡터 생성 agreement <- letter_predictions == letters_test$letter table(agreement) prop.table(table(agreement))



오늘은 여기까지~


보다 자세한 부분은 python에서 알아보겠습니다~

반응형
반응형

안녕하세요~


너무 오랜만이네요ㅜㅜ


정보처리기사 실기시험등 다양한 이유로

이제야 돌아왔습니다!ㅋㅋ


관련 포스팅은 궤도에 오르다에서!


사설은 여기까지!




오늘은 비지도학습, 클러스터링 알고리즘 중

K-means 알고리즘에 대해 알아보도록 하겠습니다.



우선 클러스터링이란 무엇일까요?


클러스터링(군집화)이란, 

데이터를 클러스터(또는 유사한 아이템의 그룹)로 자동 분리하는 비지도학습(unsupervised) 머신러닝 방법입니다.


군집화는 예측보단 데이터 안에서 발견되는 그 그룹에 대한 패턴, 즉 통찰력을 제공합니다.


군집화의 기본 아이디어: 클러스터 안에 있는 아이템들은 서로 아주 비슷해야하지만 클러스터 밖에 있는 아이템은 아주 달라야한다.




K-means 알고리즘 이란?


가장 일반적으로 사용되는 군집화 방법으로,

특징 공간에서 주어진 데이터를 k개의 클러스터로 묶는 알고리즘입니다.




그렇다면 knn과 k-means는 어떻게 다를까요?


공통점


거리함수를 이용하여 중심에 가까운 거리에 있는 데이터를 클러스터링합니다.


차이점


knn알고리즘은 label이 있는 지도학습이지만, k-means는 앞에서 언급했듯이 비지도학습 방법입니다.




k, 클러스터의 개수 선택하는 방법


k 값을 너무 작게 설정하면 분류를 잘 하지 못하고,

k 값을 너무 크게 설정하면 그룹내의 동질성이 올라가 과적합이 일어날 수 있습니다.


1. k = sqrt(n/2) : k를 (n/2)의 제곱근과 동일하게 설정


2. elbow point: 클러스터 내의 동질성과 이질성의 변화를 측정하여 특정 포인트를 넘으면 결과가 약화되는 k를 찾는 방법




R 코드로 알고리즘 설명하기



1. k-means 알고리즘

# 1. 기본 데이터 셋을 만든다. 무조건 수치형 데이터여야한다. c <- c(3,4,1,5,7,9,5,4,6,8,4,5,9,8,7,8,6,7,2,1) row <- c("A","B","C","D","E","F","G","H","I","J") col <- c("X","Y") data <- matrix( c, nrow= 10, ncol=2, byrow=TRUE, dimnames=list(row,col)) data # 데이터 확인하기1 # 2. plot 그래프를 그린다 plot(data) # 데이터 확인하기2 # 3. stats 패키지를 설치한다. # install.packages("stats") library(stats) # 4. kmeans 함수로 데이터를 분류한다. # k개 구하는 공식: k = sqrt(n/2) k = round(sqrt(length(data)/2)) km <- kmeans(data,2) kc <- km$centers cbind(data,km$cluster) # 5. 분류한 파라미터 값을 가지고 다시한번 시각화 한다. plot(round(kc), col = kc2, pch=22, bg=kc2+1, xlim = range(0:10), ylim = range(0:10)) par(new=T) plot(data, col =km$cluster+1, xlim=range(0:10), ylim = range(0:10))


2. 시각화하기

# install.packages("factoextra") library(factoextra) fviz_cluster(km, data = data, stand = F)


[결과]





kmeans 알고리즘의 장점: 간단한 원리, 매우 유연


kmeans 알고리즘의 단점: 임의의 우연(random chance) 요소를 사용하기 때문에 최적의 클러스터 집합을 찾는 것이 보장되지 않는다.

데이터에 존재하는 자연스런 클러스터 개수에 대한 합리적인 추측이 필요하다.

반응형
반응형

안녕하세요


오늘은 연관규칙 Apriori 알고리즘에 대해 알아보도록 하겠습니다!



Q1. Apriori 알고리즘 이란?


A1. 간단한 성능 측정치를 이용해 거대한 데이터베이스에서 데이터간의 연관성을 찾는 알고리즘



Q2. 그래서 어떤 패턴을 찾는데?


A2. 연관규칙은 장바구니 분석에 가장 많이 사용됩니다. 하지만 잠재적인 패턴을 찾을 때 또한 유용합니다.



예시: "기저귀를 살 때 맥주를 함께 산다"


그림출처: 사람과 디지털연구소


연관 규칙을 통해 맥주와 기저귀라는 별 상관없어 보이는 상품의 동시 구매 패턴을 발견하였습니다.



Q3. 굳이 왜 ML(머신러닝)으로 패턴을 찾아야해?


A3. k개의 아이템으로 2개씩 아이템을 묶어 연관패턴을 찾으려면 평가해야할 2^k개의 아이템 집합을 갖습니다.

만약 아이템이 100개면 2의 100승개의 아이템 집합이 생기므로 사람이 그 많은 데이터를 직접분석하기는 어렵습니다.




연관규칙에서 사용하는 두가지 통계척도


1. 지지도: 데이터에서 발생하는 빈도

count(x)

support(x) = ----------------------

N


2. 신뢰도: 예측능력이나 정확도의 측정치

support(x,y)

confidence(x -> y) = ------------------------------

support(x)




기저귀와 맥주의 예시 코드를 생성하여 연관규칙 알고리즘에 대해 알아봅시다!


# 1. 데이터 로드 x <- data.frame( beer=c(0,1,1,1,0), bread=c(1,1,0,1,1), cola=c(0,0,1,0,1), diapers=c(0,1,1,1,1), eggs=c(0,1,0,0,0), milk=c(1,0,1,1,1) ) # x 확인하기

x # 2. arules 패키지를 설치한다. (apriori함수를 이용하기위해 설치) # install.packages("arules") library(arules) trans <- as.matrix(x,"Transaction") trans # 3. apriori 함수를 이용해서 연관관계를 분석한다. rules <- apriori(trans, parameter=list(supp=0.2, conf=0.6, target = "rules")) rules # support: 지지도, confidence:신뢰도, lift: 향상도, count inspect(sort(rules))


결과




신뢰도가 클수록 연관관계가 높다는 의미입니다.


연관규칙을 평가하는 지수는 사실 위에서 언급한 2가지말고도 많은데

그 중 꽤 많이 쓰이는 것이 상관관계를 나타내는 lift입니다.



추가 : 연관관계 시각화하기

# install.packages("sna") # install.packages("rgl") library(sna) library(rgl) #visualization b2 <- t(as.matrix(trans)) %*% as.matrix(trans) b2.w <- b2 - diag(diag(b2)) #rownames(b2.w) #colnames(b2.w) gplot(b2.w , displaylabel=T , vertex.cex=sqrt(diag(b2)) ,

vertex.col = "Pink" , edge.col="grey" , boxed.labels=F ,

arrowhead.cex = .3 , label.pos = 3 , edge.lwd = b2.w*2)


결과



마지막으로, 연관규칙 학습을 위한 에이 프라이어리 알고리즘의 장단점을 알아보겠습니다.


장점1. 대규모 거래 데이터에서 작업할 수 있다.


장점2. 이해하기 쉬운 규칙을 생성한다.


장점3. '데이터 마이닝'과 데이터 베이스에서 예상치 못한 지식을 발굴하는 데 유용하다.


---------------------------------------------------------------------------------


단점1. 작은 데이터 셋에서는 유용하지 않을 수 있다.


단점2. 랜덤 패턴에서 비논리적 결론을 도출하기 쉽다.





오늘은 여기까지!!


다음은 k-means알고리즘으로 돌아오겠습니다!!

반응형

+ Recent posts