안녕하세요. QLD시험도 받았고..개강도 했습니다..개강을…이래봬도 벌써…쿠우… 그렇긴방학 동안 놀지도 못했는데 바로 뛰어야 하다니 정말 힘들지만 그래도 그만큼 무언가를 했지.다시 한번 열정적으로 뛰어 봅니다.QLD에 붙으면 QLD에 대한 포스팅도 해야겠네요일단 머신 러닝의 포스팅에서 마치겠습니다… 그렇긴여러가지 자격증을 준비하면서 느끼는 것은… 그렇긴역시 이 분야는 자격증보다 프로젝트 경험이 더 실력 향상에 도움이 될 것입니다.뭐든지 공부 열심히 해야겠어요!!아무튼 이 시간에 조사하는 것은 군집화입니다!!분류 문제를 풀어야 할 때 정답 데이터를 준비 못한 경우는 어떡하죠?예를 들면…이래봬도타이타닉 데이터를 우리가 분석하려 했을 때 생존 여부의 데이터가 없는 데이터를 받았다고 한다면?이러한 데이터를 어떻게 분류할 수 있습니까?결국 분류 작업을 비슷한 모양을 한 아이끼리 맺는 것이라면 어떻게 분류할 수 있을까요?이번 포스트에서는, 이럴 때 쓰는 군집화에 대해서 살펴봅시다!클러스터화(Clustering)은 유사성이 높은 데이터를 같은 그룹으로 정리하고 다른 그룹의 데이터는 멀리 떨어뜨리는 작업을 의미합니다.여기서 처음에 생각해야 한다는 것은 “무엇을 보고유사성이 높다고 판단할까?”가 될 거예요.이번 포스트에서는 데이터의 유사성을 판단하는 방법에 대해서 배우고, 그 차이와 사용법에 대해서 살펴봅니다.https://inf.run/RfYD해당 포스트는 위 강의 내용을 바탕으로 복습하기 위해 작성한 것임을 알려드립니다. 오타,오류,내용지적대환영합니다!K-평균 알고리즘(K-Means Clustering Algorithm)최근 전에 K를 많이 쓸께요?K-잼 민, K-방역, K-군대..여기서도 K-평균이라는 말을 사용합니다!여기서 K는 Korean의 K가 아니라 K개로 연결~~라는 의미입니다.이름에서 보듯, 평균을 이용하여 데이터를 그룹화하는 것인데요!어떤 원리로 하는지 한번 살펴봅시다!K-means알고리즘에서 가장 중요하다고 할 개념이 “중심점(Centroid)”입니다.우선 그림으로 과정을 선 보였던 후, 텍스트로 설명합니다.그게 가장 이해가 빠르군요.이렇게 분포하고 있는 데이터 세트가 있다고 칩시다. 그러면 우리 목표는 이렇게 분포하고 있는 애들을 컴퓨터가 알아서이런식으로분류하기를원하는거죠. 오~ 좀 신기하죠? 왜 그럴까요?자세히 보시면 데이터가 세 그룹에서 어떤 중심점을 기준으로 모여있는 것을 확인하실 수 있습니다.라는 식으로요. “아니~~그래서 그 중심점은 어떻게 잡아~~” 말이 너무 길었네요. 본격적으로 분류하는 방법에 대해서 설명해 드릴게요.1. 임의의 중심점 설정우선 아무 데도 중심점을 2개 둡니다.그럼 이 중심점으로 데이터는 Grouping이 됩니다.위쪽에 있는 녹색 중심점에 가까운 데이터는 녹색 중심점 소속에서 아래 노란 색 중심점에 가까운 데이터는 노란 색 중심점 소속으로 각각 구분된다는 것입니다.그러나 그 중심점의 위치가 최적인가요?데이터를 더 잘 구분하려면”중심이 데이터의 중앙”에 없으면 안 됩니다.가운데에 가기 위해서 중심점은 데이터와 본인과의 거리를 계산하면서 점점 데이터의 중심으로 이동하기 시작합니다.2. 평균 준 마음으로 중심점 이동각 데이터와 중심점 간의 거리를 나타낸 그림입니다.이 중심점까지의 거리가 평균적으로 비슷하고 있기까지 중심점을 이동시키는 것입니다.중심점이 이동하면 이동한 중심점에 대해서 데이터의 소속도 또 새롭게 정의됩니다.지금의 그림에서는 나타나지 않지만 이동하기 전에는 녹색 중심점 소속이었지만, 이동하고부터는 노란 색 중심점 소속지도 모른다는 것입니다.읽어 보면 녹색의 점이 데이터의 중심으로 이동했습니다.이처럼 계속 중심점을 이동시킵니다.3. 중심점 확정 및 군집화 위의 같은 방법으로 중심점은 계속 이동합니다.언제까지 이동하는지요?이동하더라도 그 위치에 될 때까지!중심점을 이동하고 보면,이렇게 거리를 계산하고 이동시켜도 더 이상 움직이지 않는 순간이 생깁니다. 이 순간의 중심점을 최종 중심점으로 하고, 그 순간의 데이터 소속도 최종 소속으로 하는 것입니다. 이렇게 군집화가 이루어집니다.하면 우리가 바라던 군집화가 실현하는 것입니다.K-means알고리즘은 데이터 간의 거리에서 군집화를 진행시킵니다.데이터 간의 거리를 보고 중심점을 이동시키기 위해서, 특히 멀리 떨어진 데이터에 대해서 취약한 모습을 보이겠습니다.이상치(Outlier)은 전 처리 과정에서 어느 정도 제거되지만 있을 경우 군집화를 진행하는 데 중심점이 제대로 데이터의 중앙에 위치하는 것을 막는다는 것입니다.그러면 이렇게 알고리즘만 간단한 K-Means군집화는 어떻게 사용한 것인가요?sklearn.cluster 임포트 K수단에서우선 준비물을 준비합니다.sklearn의 클러스터에 있는 KMeans를 가져오세요.예를 들기 때문에 군집화 데이터를 작성하는 함수인 make_blobs를 이용합니다.make_blobs를 이용하여 데이터를 작성합니다.matplotlib를 가져옵니다. pyplot as pltimport numpy as pdf from sklearn.makeimport make_blobsX, y=make_blobs(n_context=500, n_contents=2, cluster_context=0.8, random_state=0)df=pd.DataFrame(data=X, columns=[‘x1′, x2’])df[‘label’]=ydfmatplotlib をインポートします。pyplot as pltimport numpy as pdf from sklearn.makeimport make_blobsX,y = make_blobs(n_context=500, n_contents=2, cluster_context=0.8, random_state=0)df= pd。DataFrame(data=X, columns = [‘x1′, x2’])df[‘label’] = = ydf생성된 데이터를 시각화하면 다음과 같습니다.target_list = np.html(y): target_cl = df[‘label’]== target] plt.html(x= target_cl[‘x1’], y= target_cl[‘x2’], edgecolor = ‘k’, color= ‘b’) plt.show()target_list = np.html(y): target_cl = df[‘label’]== == target] plt.html(x= target_cl[‘x1’], y= target_cl[‘x2’], edgecolor = ‘k’, color= ‘b’) plt.show()이 데이터들을 K-Means를 이용하여 군집화시켜 보겠습니다.kmeans = KMeans(n_clusters = 3、init = ‘k-clusters++’、max_iter = 300、random_state = 0)kmeans.fit(df)KMeans()의 주요 파라미터로는 다음 표에 나와 있습니다.파라미터 설명 n_clusters가장 중요한 파라미터입니다.군집화를 몇개 그룹으로 할지 명시합니다.init의 처음 중심점을 놓으면서 어떻게 두느냐를 뜻합니다통상”k-means++”이라는 알고리즘으로 설정합니다.max_iter중심점을 이동시키는 최대 반복 횟수입니다.반복 횟수의 앞으로 이동을 완료하겠다고 섭니다.위와 같이 군집화를 진행한 후 수행 결과는 labels_에서 확인할 수 있습니다.print(‘데이터 수 : \n’ ,len(kmeans.labels_),’개’)print(kmeans.labels_)print(‘데이터 수 : \n’ ,len(kmeans.labels_),’개’)print(kmeans.labels_)0,1,2 세 군집으로 분류가 완료되었음을 확인할 수 있습니다. 사실 여기까지가 군집화 과정인데 좀 더 이해하기 쉽도록 시각화 작업도 해보도록 하겠습니다.target_list=np.html(y)target_cl=df[df[‘label’]==target]plt.html(x=target_cl[‘x1’], y=target_cl[‘x2′], 에지 컬러=’k’)plt.show()target_list = np.html(y) target_cl = df[df[‘label’]== == target] plt.html(x= target_cl[‘x1’], y= target_cl[‘x2’], 엣지 컬러 = = ‘k’) plt.show()일부 데이터는 잘못되어 있지만, 대부분 예쁘게 분류되어 있음을 볼 수 있습니다.K-Means알고리즘의 군집화는 매우 간단하고 직관적이어서 가장 일반적으로 사용되는 알고리즘이라 우선 소개했습니다.다음에 이와 아주 유사한 평균 이동(Mean Shift)군집화에 대해서 봅시다.평균 이동 군집화(Mean Shift Clustering)평균 이동 군집화는 상기의 K-Means와 상당히 비슷한 방법으로 이루어집니다.다만 지금은 조금 수학적으로 군집화하려는 시도가 눈에 보입니다!K-Means가 거리를 재어 중심으로 이동했다고 하면 평균 이동은 “데이터가 가장 많은 “곳을 중심점으로 합니다.즉, 데이터의 밀도를 보고중심점을 받아 군집화하겠다는 것인데, 이”밀도”을 어떻게 측정하는지 그 원리에 대해서 봅시다.우선 평균 이동 군집화는 KDE(Kernal Density Estimation)를 이용합니다.이름에 Density가 있어서 밀도를 이용하는 것 같은데….이를 어떻게 활용할 수 있습니까?우선 KDE이 무엇인지 쉽게 개념을 확인하고 봅시다.통계 시간 때 자주 듣는 것은 그대로 점점 진행해도 좋다고 생각합니다.통계의 목적은 표본(Sample)을 보고 모집단을 “잘”추정하는 것을 목표로 합니다.그래서, 샘플이 모집단의 성질을 얼마나 잘 반영하느냐가 중요한 이슈가 되었고, 어느 가설을 세울 때 그게 말이 된 가정한지를 따지는 것도 그 때문입니다.여기서 밀도 추정(Density Estimation)은 샘플 데이터 분포를 보고, 모집단의 분포를 추정하려는 시도입니다.가령”짐의 이용객 수”변수가 있을 때 연시 여름에는 이용객이 하루 1000명 이었지만, 가을과 겨울에는 100이 됐다고 합시다.그런 데이터가 10년치 축적되면 대체로 센터 이용객 수가 어느 정도의 분포를 갖고 있는지 확인할 수 있습니다.이러한 밀도 추정 방식은 크게 2가지 방법이 있습니다.파라메터 추정(Parametric)와 비 파라메터 추정(Non-Parametric)이 있습니다!정말 간단히 말하면, 모수 추정은 데이터의 분포가 특정 분포(모델)에 따르고 있다는 매우 이상적으로 가정하면서 추정하는 방식으로, 모수 추정은 정말 날것 관측된 데이터만 가지고 추정하는 방식입니다.여기에서 비 털 수 추정의 가장 대표적인 방법이 히스토그램으로 KDE입니다.히스토그램은 중학교 때부터(요즘은 초등 학교 때에요?)많이 보아 왔다 정말 가까운 그래프죠?이런 낡은 친구를 놔두고 왜 KDE란 이름에서 낯선 것을 사용하나요?그것은 바로 히스토그램의 단점에 기인합니다.같은 데이터 분포에 대해서, 히스토그램은 bin의 크기에 의해서 연속되지 않은 형태를 취할 수 있는 동시에 bin을 어떻게 조율할지에 의해서 다른 밀도 함수의 형태를 가집니다.한편 KDE는 상당히 부드러운 곡선 모양의 확률 밀도 곡선이 그려지는 것을 볼 수 있습니다.이런 성질 때문에, 히스토그램보다는 KDE을 사용하는 것입니다.KDE는 각 데이터에 대해서 커널 함수를 적용한 뒤 이들을 통틀어 최종 형상을 나타냅니다.여기에서 커널 함수란 “원점을 대칭으로 적분 값이 1이 되게 하는 함수”입니다.그 종류만 해도 굉장히 다양한데요.이렇게 많은 함수가 있는데!!우리는 여기서 가장 대표적인 가우스 커널 함수를 사용합니다.( 보면 가우스를 많이 사용합니다만, 왜 그런지는 따로 조사해야겠네요 ww)어쨌든 각 데이터에 이렇게 커널 함수를 적용한 뒤 모두 함께 데이터 건수 n에서 배포만 밀도 함수가 얻을 수 있는~라는 것이 KDE입니다.식으로 나타내면 다음과 같습니다.여기서 한가지 중요한 개념이 나옵니다.대역 폭(Bandwidth)라는 개념입니다.수식에서는 h라고 표시되고 있습니다.대역 폭은 각각 적용하는 커널 함수를 얼마나 잘 나타낼지를 나타냅니다.경영 수학 시간에 배우는 지수 평활 법에..알파의 같은 존재라고 해도 좋다고 생각합니다.위에서 설명했다 그러므로 각 데이터에 커널 함수를 적용합니다.커널 함수는 적분치가 1이 나오도록 하는 원점이 대칭으로 하는 함수이지만 이 1를 만들 때” 뾰족한 “것으로 할 것인가?” 부드러운 ” 만드는가?를 정합니다.예상대로 Bandwidth가 작다고 뾰족하고 나타나며 클수록 부드럽게 나타납니다.Bandwidth가 너무 작게 되면..그만큼 데이터를 표시하기 쉽게 되지만 우리가 항상 경계하는 Overfitting이 쉽게 나타납니다.하지만 너무 크게 설정하는 경우는 오히려 Under Fitting이 되기 쉽습니다.그럼 자연스럽게 생각의 흐름에 따라가면 각각의 커널 함수의 형태로 Bandwidth을 어떻게 조정하느냐에 따라서 KDE의 형태가 바뀜이 예상합니다.Mean Shift알고리즘이 군집화를 실시할 때에 사용하는 것이 이 KDE이므로 당연히 Mean Shift에서도 Bandwidth값을 조정하는 것이 매우 중요한 이슈가 됩니다.Bandwidth를 작게 설정하면 데이터 각 커널이 많이 붙어 나타나며, 이를 합산한 KDE도 매우 많은 봉우리를 가진 것입니다.즉, 밀도의 높은 부분이 많이 나타나게 될 것입니다.한편 Bandwidth을 크게 설정되면 각 커널이 전체적으로 평활하게 나타나고 KDE도 상대적으로 적은 봉우리를 가진 것입니다.Mean Shift는 이 봉우리(군중 중심점)을 가지고 군중화를 실시합니다.그래서”군집화하는 데 가장 적절한 Bandwidth값”을 아는 것이 매우 중요합니다.물론 우리의 위대한 통계학자들은 최적의 Bandwidth값을 구하는 공식을 이미 준비하고 있습니다.수많은 KDE함수 중 Gaussian을 사용할 경우 최적의 Bandwidth는 다음과 같습니다.어차피 대부분 Gaussian을 쓴답니다.식을 기억할 필요는 없구..어차피 코드 한번에 알아낼 수 있습니다^^이론이 좀 길었는데..어차피 우리가 궁금한 것은 “아, 그래서 어떻게 쓰는 거 ww”입니다… 그렇긴사용법은 꽤 간단합니다.데이터는 우리가 K-Means로 쓴 데이터를 유지하기로 합니다.from sklearn.cluster import MeanShift=MeanShift(대역 폭=0.8)cluster_lables=meanshift.fit_predict(X)print(np.unique(cluster_lables)우선 SKlearn.cluster로 MeanShift를 가져옵니다.그리고네요..Bandwidth값을 설정한 객체를 생성하고 다른 환각 랜과 마찬가지로 fit_predict를 하세요.우선 Bandwidth을 0.8로 설정했을 경우의 군집화 수는이렇게9개가나왔는지확인할수있습니다. 원래 생성한 데이터가 군집화가 3개가 되도록 만든 것이기 때문에 Bandwidth를 늘려 조정해 보겠습니다. 이번에는 Bandwidth=1로 설정한 결과입니다.meanshift=MeanShift(대역 폭=1)cluster_lables=meanshift.fit_predic(X)print(np.unique(cluster_lables)meanshift = MeanShift(帯域幅 = = 1)cluster_lables = meanshift.fit_predic(X)print(np.unique(cluster_lables))우리가 바라는 대로 막 3개의 군중이 형성됐음을 확인할 수 있습니다!그런데 매일 이렇게 수작업으로 확인해야 할까요?아까 분명히 위에서 그렇게 위대한 통계학자들이 공식을 준비하고 있었어 했더니..하하 핫… 그렇다고 생각하고 최적인 bandwidth값을 제공하는 함수가 따로 있습니다.sklearn.cluster import estimate_bandwidthprint から (round(estimate_bandwidth(X), 3))sklearn.cluster import estimate_bandwidthprint から (round(estimate_bandwidth(X), 3))사이키델릭 랜 estimate_bandwidth()를 사용하면, 군중화에 적합한 최적의 bandwidth값을 제공합니다!그러면 이렇게 최적인 bandwidth값도 손에 넣었습니다..군집화를 한 후 결과를 시각화하고 보면 다음과 같습니다.meanshift=MeanShift(bandwidth=estimate_bandwidth(X)cluster_labels=show fit_predict(X)df[‘mean_shift_label’]]=np.html(cluster_labels):유일의 라벨에 대한 target_cl==df[‘label’]plt.ph(x=target_cl[‘x1’x2’x1″), ymeanshift = MeanShift(bandwidth = = estimate_bandwidth(X)cluster_labels = show fit_predict(X)df[‘mean_shift_label’]]= np.html (cluster_labels):一意のラベルに対する target_cl == df[‘label’]plt.ph(x= target_cl[‘x1’x2’x1”), y이렇게 3개 군집에서 잘 군집화가 이뤄질 확인할 수 있습니다.Mean Shift의 장점이라고 하면 거리에 근거한 것이 아니라 정말 데이터가 모인 밀도를 갖고 판단하는 것이므로 K-means보다 유연한 군집 화가 가능합니다.그러나 데이터 하나 하나에 커널을 적용하고 모두~이런 과정이 좀 짧게는 안 걸립니다.그래서 시간의 소요가 할머니에 걸리고 bandwidth가 조금이라도 변화한다는 단점이 있습니다.(민감하군요)때문에, 일반적으로는 사용하지 않고 컴퓨터 비전 같은 이미지와 영상 데이터에서 객체를 구분하는 분야에 많이 활용된다고 합니다!GMM(Gaussian Mixture Model)GMM은 기본적으로 우리가 가진 데이터가 모두 정규 분포(Normal Distriburion)에 따른다고 가정하고 시작합니다.그러므로 위에서 배운 평균 이동이 이런 가정을 하지 않는 모수 추정했다면 GMM은 모수 추정입니다!GMM의 원리를 알려면 또 우리가 알아 가야 할 통계학 방법론이 있습니다.그것은 “최대 공산 법”과 “EM알고리즘”입니다!일일이 알고 싶습니다최대 공산 법(Maximum Likelihood Estimation)최대 공산 법은 데이터 분포를 보고 이 데이터의 모수는 어떤 분포를 따르는 것?를 예측하는 것입니다.그림으로 설명 하자면데이터가 이렇게 분포하고 있는 경우, 왼쪽의 데이터는 청색의 분포를 따르는 것이 옳고 오른쪽 노란 데이터는 노란 색 분포에 따르는 것이 옳습니다.이처럼 데이터를 보고이들 파라미터는 어떤 분포를 따르는 것?맞추기가 최대 공산 법입니다.그럼 여기서 알 것은 어떤 형태의 분포를 따르는 것?하지만 우리의 관심사가 됩니다.그런 모양을 가진 매우 다양한 분포가 있는 거니까요.가장 적절한 분포는 무엇일까?다는 것입니다.이때 사용되는 것이 우도(Likihood)입니다.정말 간단히 말하면 각 데이터가 그 분포에 있는 가능성(가능도)을 의미합니다.*나는 정말 불필요하게 수식 복잡한 것이 싫어 하거든..쉽게 언어로 풀어 설명하면 설명하려고 했어요(눈물)그래도 앞이 정확하지 못한 설명이다 가능성이 높아 무섭네요..*그럼, 최대 공산 법이라고 하면…이래봬도이 가능성을 최대화시키는 것을 의미한다는 것입니다만..가능성을 그 도면으로 어떻게 나타내야 합니까?바로 분포까지 높이로 보고 계산합니다.각 데이터와 분포까지의 높이를 곱한 값이 최대가 되는 분포를 구합니다. 다시 말해 데이터를 가장 잘 설명할 수 있는 가능성이 가장 높은 확률 분포를 찾는 과정입니다.이걸 수식으로 표현하면.. 다음과 같습니다.방법은 좋습니다.각 데이터가 어떠한 정규 분포에 속하는지 가장 확률이 높은 정규 분포로 소속을 정한다는 것이지만…이래봬도이를 현실적으로 적용하면 1개의 문제가 발생합니다.바로 우리는 데이터만 가지고 있습니다.상기 예에서는 라벨(데이터의 답치)이 있어 분포만 어떤 모양을 하고 있나(평균과 분산이 어떻게 될까!)만 알면 좋은데 지금은 그 라벨만 아닙니다.정리하면 라벨에서도 분포에서도 뭐든지 하나라도 알아야 제대로 소속을 정할 수 있는데…이래봬도 어느 쪽도 없어요!!그러니까 우리는,”노가다”을 해야 합니다.어차피 컴퓨터는 미지의 영역을 찾으려고 계산된 식을 바장이다 때문에 사용합니다···어쨌든 라벨과 분포의 하나의 값을 랜덤으로 무엇도 설정한 뒤 그 여러 것에 대해서 한개를 추정하고 보고 또 수정하고..이런 과정을 반복합니다.GMM에서는 라벨을 미지의 것에 두고 분포를 랜덤으로 산정한 뒤 맞추는 방식을 사용합니다.방식은···그림으로 설명합니다.우선, 우리의 모델이 직면한 데이터는 이러한 상황입니다.어디에 속하는지 라벨도 없고 소속 값을 계산할 만한 분포가 없습니다(평균 분산도 없습니다).그래서 우선…이래봬도라벨과 분포 중의 분포를 임의의 값으로 랜덤으로 설정합니다.이렇게 진자 무엇이든 분포를 설정합니다. 평균과 분포가 제멋대로입니다.그럼 이걸로 라벨을 정할 수 있게 됩니다. 분포가 정해지면 라벨을 정하는 것은 높이만 비교하면 된다고 했어요. 예를 들어,가운데 겹치는 부분의 데이터는 녹색과 주황색 중 어떤 분포에 속할까요?네. Likelihood를 따라가면 높이가 더 높은 녹색 분포에 속하겠지~에서 “일단 지금은 “예상할 수 있다는 것입니다.자연스럽게 2개의 데이터는 녹색의 분포에 속합니다.그럼 여기서 끝나고 모두가 하하하 행복한 상황에 있나요?아니요(눈물) 안타깝게도 우리는 이제 좀 해야 합니다.최대 공산 법을 설명할 때 처음에 라벨을 보고모두 곱한 값이 최대가 되도록 하는 분포를 정할 수 있다고 했습니다.라벨을 어느 정도 넣어 분포를 새로 바꾸어 차례가 된 것입니다.이렇게 정리된 라벨에 따라서 분포를 어느 정도 바꿉니다.그러면, 또 라벨을 높이 비교하고 새로 결정할 수 있죠?이런 과정을 “더 이상 바꿀 없는 “반복해서 줍니다.여기까지가 GMM의 대략적인 과정입니다.EM알고리즘도 결국 우리가 위에서 하나의 과정을 반복하는데 불과합니다.마음 같아서는 여기에 찬란한 수식을 쓰고 싶지만, 어차피 나도 이해할 수 없다는 것에 의미가 있나 합니다..아직 수식에 의한 이해가 되는 수준에는 미치지 않고 있습니다.문 도리에는 심하네요.어쨌든 EM알고리즘을 정말 쉽게 정리하면 다음과 같습니다. E(Expectation)과정 개별 데이터가 어떠한 정규 분포에 속하는지를 결정하는 과정 M(Maximization)과정 각 그룹의 파라미터(평균 분산)을 다시 계산하는 과정”응?이것 우리 아까 했잖아?”그렇습니다!!!!EM알고리즘의 과정을 반복하면서 그 중에서 최대 공산 법을 이용하여 군집화하는 것이 GMM이라고 정리할 수 있습니다!!그럼 작동 원리가 알았으니, 실전에서 어떻게 쓰는지를 알아봐야겠어요?sklearn.mixture의 임포트 Gaussian Mixture먼저 이렇게 sklearn.mixture로 Gaussian Mixture를 가져옵니다.(cluster가 아니라 mixture입니다!!)gmm = ガウス混合物(n_components = 3、random_state = 0)gmm.fit(X)gmm_labels = gmm.predict(X)그 뒤 통상의 사이키델릭 랜과 마찬가지로 fit, predict를 합니다.여기서 가장 중요한 파라미터가 나옵니다!그것은 n_components입니다.n_components는 군집화를 그래서 몇가지 만들게 하는가~의 일입니다.꼭 필요하죠?df[‘gmm_label’] = unique_labels= np.html(gmm_labels): target_cl = df[‘label’]== label]plt.html(x= target_cl[‘x1’], y= target_cl[‘x2’], edgecolor= ‘k’)plt.show()그리고 시각화 해주세요..이렇게 잘 군집화되고 있는 것이 확인할 수 있습니다!이런 GMM군집화는 우리가 먼저 배운 K-Means군집화의 한계를 보완하고 줍니다. K-Means는 기다란 분포를 가진 데이터를 군집화시킬 때 상당히 불리합니다.원래 사람들을 생성하는 방법이 원형을 이루기 때문입니다.한편 GMM은 길쭉한 모양의 분포를 가진 데이터도 곧잘 군집화시킬 확인할 수 있습니다.직접 그 차이를 알아보겠습니다.X, y=make_blobs(n_samples=500, n_features=2, centers=3, 클러스터_std=0.7, random_state=0)df=pd.DataFrame(data=X, columns=[‘x1′,’x2’])df[‘label’]=y# 길게 뻗은 타원형의 데이터 세트를 생성하기 위해서 변환한다.transformation=[[0.60834549,-0.63667341],[-0.40887718, 0.85253229]]X_aniso=np.dot(X, transformation)이렇게 원래 만든 데이터를 차원 변형해서 모양을 늘립니다.df1=pd.DataFrame(data=X_aniso, columns=[‘x1′, x2’])df1[‘label’]=y는 unique_lables의 라벨의 경우:target_cl=df1[‘label’]==label]plt.ht(x=target_cl[‘x1″, y=target_cl[‘x2″], columnumnals”k”, color=’b”)plt.sh그리고 시각화 해주셨으면 좋겠습니다.이렇게 지금까지와는 조금 다른 길쭉한 형태의 데이터 분포가 보입니다. 이런 건 어떻게 군집화하면 좋을까요?먼저 가장 친숙한 K-Means를 사용하여 군집화를 진행해 보겠습니다.kmeans=KMeans(3, random_label=0)kmeans_label=kmeans.적합_예측(X_aniso)클러스터 DF[‘kmeans_label’]=kmeans_labelkmeans = KMeans(3,random_label=0) kmeans_label = kmeans。적합_예측(X_aniso) 클러스터 DF[‘kmeans_label’]=kmeans_labelK-Means를 이용할 경우 이처럼 제대로 분류되지 않은 것을 볼 수 있습니다.오렌지 색의 군중은 좋았지만…이래봬도청색과 녹색은 구별이 되지 않는 모습을 보이고 있습니다.그러나 이를 GMM로 하면 어떻게 됩니까?놀랍게도 이번에는 군집화가 잘하는 모습입니다.이처럼 K-Means이 군집화하기 어려운 데이터 형태도 GMM은 잘 되어요.어떤 알고리즘이 뛰어나다!라고는 못하지만 GMM이 K-Means에 비해서 좀 더 유연하게 군집화할 수 있지만 시간이 오래 걸린다는 단점이 있습니다.원형에 데이터가 분포하고 있는 경우는 오히려 K-Means의 것이 효율적이다요?여기까지 GMM에 대해서 소개했습니다.마지막 DBSCAN에 가서 봅시다!DBSCAN(Density Based Spatial Clustering of Applications with Noise)이번에는 밀도 기반 군집화 알고리즘의 대표 주자.DBSCAN에 대해서 알아봅시다.나는 처음에 이 이름을 봤을 때 DB에 충분하지 않나..SCAN이 되더니 무엇의 약자가 이렇게 길었네요.(억지로 맞춘 느낌도 솔직하게 없지 않고요,,)적당히 DBSCAN이 어떤 원리로 작동하는지 봅시다.우선 이렇게 분포한 데이터가 있다고 칩시다.DBSCAN은 우선 우리가 익숙한 개념이다”핵심 포인트(Core Point)”을 지정합니다.핵심 포인트를 지정하는 기준은 주변 영역에 일정 수 이상의 데이터가 있으면 핵심 포인트입니다.한마디로 말하면···데이터 중에서 인사를 고른다면 이해하기 쉽습니다!예를 들어 빨간 색 표시한 데이터의 주변 반경에서는 자신을 포함한 6개의 데이터를 가지고 있습니다.인사의 기준을 “반경 100m에 자신을 포함하고 친구 6명이 넘는 사람”으로 정의하면 저 빨간 데이터는 “인사”에 지정된 것입니다.이 인사가 바로 핵심 포인트(Core Point)이며, 반경 100m처럼 데이터의 얼마나 주변에 잡느냐를 정한 것을 엡실론(Epsilon)라고 부릅니다.핵심 포인트를 하나 찾으면 이제 다른 핵심 포인트를 찾을 차례입니다. 초록색으로 표시한 데이터도 주변에 본인을 보관한 6개의 데이터가 있기 때문에 인싸, 즉 핵심 포인트입니다.이처럼 같은 엡실론 영혼 억을 공유하는 2개의 군중은 같은 군집으로 분류됩니다.빨간 색으로 표시된 핵심 포인트를 중심으로 한 영역과 초록색으로 표시된 핵심 포인트를 중심으로 한 영역은 지금과 같은 소속, 군중이 되었습니다.에서는 노란 색으로 표시한 데이터의 경우는 어떻게 하시겠습니까?노란 색 데이터의 경우는 주위에 6개 이상의 데이터가 없습니다.안타깝게도 5개라서 인사에는 되지 않아요···에서는 황색의 데이터는 핵심 포인트에 안 됩니다.노란 색 데이터 같은 데이터는 “경사 포인트(Border Point)”로 불립니다.군집화의 경계선을 긋다. 역할을 합니다.그럼 검은 색으로 표시된 데이터는 무엇입니까?네…그들이 바로”한”입니다그런 검은 데이터와 같이 핵심 포인트도 근처에 없고… 그렇긴 군집화 반경 바깥쪽에 있는 데이터를 “잡음 포인트(Noise Point)”라고 합니다.아싸네요.아싸……이런 잡음 포인트는 자동으로 제거됩니다.마음대로 Outlier을 탐지하고 꺼 버립니다!!우리 주위의 인간 관계와…이래봬도 닮았어요.?DBSCAN은 이런 방법으로 군집 수를 자동으로 생성하고 outlier를 자동적으로 끕니다.다만, 밀도가 너무 비슷하거나 피처가 많은 경우 성능이 저하하는 모습을 나타냅니다.그러면 이렇게 직감적인 알고리즘을 가지는 DBSCAN은 어떻게 사용한 것인가요?그 사용법을 지금부터 한번 알아보겠습니다!sklearn.cluster import DBSCANdbscan=DBSCAN(eps=0.6, min_proxy=8, metric=’proxy’)dbscan_proxy=dbscan.fit_fit(데이터)DBS CAN은 sklearn.cluster에서 DBS CAN을 가져오는 것으로 시작합니다. 그리고 DBS CAN에 필요한 파라미터가 있는데 표에서 보여줍니다.eps데이터 주변 영역의 반경을 의미합니다.min_samples의 핵심 포인트가 되기 때문에 엡실론 반경 내에 포함돼야 할 최소한의 데이터 개수입니다.본인을 포함한 개수입니다.metric반경을 계산할 때 어떤 방식으로 계산하는지를 지정합니다.통상 유클리드 거리를 사용합니다.DBSCAN은 기하학적 분포를 가진 데이터 세트에 매우 유리합니다.예를 들면, 동그란 데이터가 있습니다.도넛 같은 데이터를 위에서 배운 군집화 알고리즘을 적용하면서 어떤 알고리즘이 가장 적합한지를 확인하고 봅시다.sklearn.html import make_circlesX, y=make_flash(n_html=1000, shuffle=True, noise=0.05, random_state=0, factor=0.5)클러스터에서 DF=pd.DataFrame(data=X, columns=[‘ftr1′,’ftr2’])클러스터 DF[‘target’]=y우선 도넛형 데이터를 만들어 드릴게요.make_circles()를 사용하면 도넛 모양의 데이터를 만들 수 있어요!!이런 형태의 데이터가 있다면 K-Means/GMM/DBS CAN이 각각 어떻게 분류하는지 살펴보겠습니다.먼저 K-Means의 경우입니다.from sklearn.cluster import KMeans=KMeans(n_clusters=2, max_iter=1000, random_state=0)kmeans_means=kmeans.fit_predict(X)클러스터 DF[‘kmeans_cluster’]=kmeans_clusterfrom sklearn.cluster import KMeans = KMeans(n_clusters=2, max_iter=1000, random_state=0)kmeans_means = kmeans。fit_predict(X) 클러스터 DF [‘kmeans_cluster’] = = kmeans_cluster제대로 분류되지 않은 모습입니다.. 거리를 기준으로 한 탓인지 위아래로 군집화를 해 버렸습니다.그러면 GMM은 어떨까요?from sklearn.html import GaussianMixturegmm=가우스 혼합물(n_components=2, random_state=0)gmm_label=gmm.fit(X). predict(X)클러스터 DF[‘gmm_cluster’]=gmm_labelfrom sklearn.html import GaussianMixturegmm = ガウス混合物(n_components=2, random_state=0)gmm_label = gmm。fit(X).predict(X) 클러스터 DF [‘gmm_cluster’] = = gmm_labelGMM 또한 길쭉한 데이터셋에 특화된 알고리즘이기 때문인지… 비스듬히 군집화를 한 모습입니다. 여전히 잘 분류하지 못했습니다. 그럼 마지막으로 우리들의 희망!! DBS CAN은요!!sklearn.cluster import DBSCANdbscan=DBSCAN(eps=0.2, min_proxy=10, metric=’proxy’)dbscan_proxy=dbscan.fit_predict(X)클러스터 DF[‘dbscan_cluster’]=dbscan_clustersklearn.cluster import DBSCANdbscan = DBSCAN(eps=0.2, min_proxy=10, metric=’proxy’)dbscan_proxy = dbscan。fit_predict(X) 클러스터 DF[‘dbscan_cluster’] = = dbscan_cluster우리가 원하는 대로 정말 예쁘게 군집화가 이루어졌습니다!이처럼 DBSCAN은 둥근 모양을 한 데이터 세트에 매우 유리한 알고리즘입니다.어떤 알고리즘이 더 좋아!나쁜!을 따지는 것은 사실상 무의미합니다.더 유연한 알고리즘을 검토하는 것은 모르겠지만.각자 잘하는 분야가 달라지기 때문입니다.상황에 맞게 군집화하고자 하는 데이터 세트의 형상을 잘 보고, 적절한 알고리즘을 선택할 필요가 있습니다!하지만 일일이 시각화를 통해서 확인하기에는 충분하지 않나..우리는 일정 수치가 필요합니다.분류 및 회귀도 알고리즘에 대한 평가를 진행 때는 지표를 만들어 놓잖아요?정확도나..MSE나..군집화에도 평가 지표가 있습니다!클러스터 평가(Cluster Evaluation)이전 배운 분류에서는 모델의 성능을 평가할 때 정답치와 모델의 전망치를 비교하면서”채점”을 했습니다.그러나 군집화는 비 지도 학습처럼 정답치가 제공되지 않습니다.그래서 군집화를 평가할 때는 새로운 평가 지표가 필요합니다.실루엣 분석(Shilhouette analysis)입니다!실루엣 분석은 생각보다 그 원리가 간단합니다.우리가 얼마 전 한 차원 축소로 LDA의 원리를 기억하시나요?피처를 압축하는 과정에서 분류까지 진행 알고리즘입니다!아래 그림을 보면 생각할 수 있습니다.이처럼 같은 군집 내의 데이터끼리는 얼마나 가까이 모이고 있어 다른 군집의 데이터는 얼마나 떨어지고 있는가가 중요한 성능 지표에 됩니다.상기의 말을 좀 더 수식으로 표현하기 쉽게 하면 다음과 같습니다.군중(a)에서 a(i)을 “i번째 데이터에서 자신이 속한 군집 내의 다른 데이터 포인트의 평균 거리”이라 정의합니다.즉, a(i)=mean(a12, a13, a14…)반면 b(i)는 “i번째 데이터에 가장 가까운 다른 클러스터 내의 다른 데이터 포인트의 평균 거리”이라 정의합니다.즉, b(i)=mean(b15, b16, b17, b18;)그림으로 설명 하자면이렇게 데이터가 분포하고 있다면 군집화가 아래와 같이 이루어졌다고 칩시다.그곳에서 초록색으로 표시된 데이터를 i번째 데이터로 하면 같은 녹색의 클러스터에 속한 데이터와 i번째 데이터와의 거리의 평균을 a(i), 오렌지 색의 클러스터에 속한 다른 데이터와 거리의 평균을 b(i)라고 합니다.즉 두개의 군중 사이의 거리는 b(i)-a(i)로 표현할 수 있습니다.상기를 종합하고 수식으로 나타내면 다음과 같이 됩니다.max(a(i)b(i)로 나눠이유는 정규화를 하기 위해서입니다.(사실은 군중 사이의 거리를 나타내는 b(i)가 나눠야 하는데..실루엣 계수의 값을-1, 즉 잘못된 경우도 포함하기 때문에 a(i)도 조건에 포함합니다 이렇게 나온 실루엣 계수(Silhouette Coefficient)는-1~1사이의 값을 가집니다.-하루 정도 좋지 않아 하루 정도 군집화가 잘 진행됐습니다.0이 다른 군중들에 가까운 것을 의미하지만, 실루엣 계수가 값을 갖는다는 것은군중끼리 서로 떨어지다 하고 있다~~이라는 것이 되지요.상당히 좋지 않을 경우입니다.한가지 주의해야 할 것이..실루엣 계수가 절대 크다는 것으로,”오..”굉장히”라고 할 수 없는 개별 군중의 실루엣 계수가 높게 나왔지만 나머지 다른 군중이 완전히 말 그대로 무너지는 경우가 있습니다.이렇게 하면 평균치가 어느 정도 괜찮게 되므로 충분하지 않나..주의가 필요합니다. 예컨대이렇게 하면 청색의 군중의 실루엣 계수는 매우 높고 잘 나올 겁니다.그러나 오렌지 색 부분의 군중은 실루엣 계수가 나쁘게 나오죠.이들의 평균을 구해서 보면 뭔가 꽤 괜찮은 실루엣 계수가 나올 거에요.이런 경우가 있으므로, 이 점을 염두에 두고 계수를 잘 들여다봐야 한다.~~단 말이에요!그럼 실루엣 계수는 어떻게 분석할까요?from sklearn.php import silhelfete_html from skellarn.php 임포트 실루엣_score우선 sklearn.metrics로 silhouette_samples와 silhouette_score를 각각 수입 합니다.silhouette_samples는 각 데이터의 실루엣 계수를 갚겠습니다.silhouette_score은 silhouette_samples에서 나온 전체 데이터의 실루엣 계수의 평균치를 요구합니다.sample_score = silhiette_score(データ、cluster_slote_score) = = silhiette_score(データ、cluster_slote_slote)silhouette_samples의 파라미터로서 데이터와 군집화 결과를 넣습니다.군집화를 실시하면, 군중화 알고리즘.labels_로 labels를 요구할 수 있습니다.silhouette_score도 마찬가지로 데이터와 군집화 결과를 넣으면 개별 실루엣 계수와 전체 실루엣 계수를 얻을 수 있습니다!https://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_silhouette_analysis.htmlK에서 실루엣을 분석하는 클러스터 수를 선택하면 뭉치기 — scikit-learn 0.24입니다.2개의 문서 주의 여기를 클릭하면 완전한 샘플 코드를 다운로드하거나 Binder를 경유하여 이 예를 브라우저에서 실행하거나 할 수 있습니다.KM상의 실루엣 분석에 의한 클러스터 수의 선택크라스타링그 실루엣 분석으로 결과로 생성된 클러스터 간의 분리 거리를 조사할 수 있습니다.실루엣, 플롯 Disp···scikit-learn.org이쪽으로 가면 실루엣 분석에 의한 판단을 돕는 시각화 자료가 있습니다!사이키델릭이란 공식 다큐멘터리입니다.코드를 베끼고 보면..이쪽으로 가시면 실루엣 분석을 통한 판단을 도와드리는 시각화 자료가 있습니다! 사이키란 공식 다큐멘터리입니다. 코드를 베껴 쓰다보니..정말 엄청 길군요… 그렇긴사실은 그렇게 어려운 것은 아니지만… 그렇긴시각화 공부 자료가 없어서 이곳에서는 생략합니다.시각화도 언젠가는 블로그에서 다뤄야 할 주제인데… 그렇긴언제 할지 정말..어쨌든 그 코드로 그림을 나타내면,이렇게 그림이 나옵니다.위의 그림의 경우는 평균 실루엣 계수가 0.7정도로 매우 높게 나와지만 녹색 군중이 너무 뛰어나서 회색 군중이 좋지 않은 군집화를 커버하고 나타나는 평균치였습니다.반면 4개의 군중으로 만든 결과 전체 평균 실루엣 계수도 나쁘지 않고 있으며, 각 개별 데이터의 실루엣 계수도 평균 실루엣 계수에서 크게 벗어나지 않습니다.남김없이 모두 잘 할 수 있어 정말 훌륭한 팀입니다.이런 경우 처음 아주 적절한 군집화가 이루어질 수 있지요.여기까지 클러스터화(Clustering)에 대해서 배웠습니다.다음은 머신 러닝의 꽤 큰 기둥인 텍스트 분석과 추천 시스템에 대해서 살펴봅시다.우선 텍스트 분석에 대해서 다룬 뒤 추천 시스템에 대해서 다루지 않으면 안 되네요.점점 글 쓸 시간이 길어진 거 같지만… 그렇긴음..잠을 정말로 줄이거나 하지 않으면 안 됩니다날씨가 점점 추워지고 있습니다!여러분 감기 걸리지 않도록 조심하세요!!参考資料 www.youtube.com/watch?v=DCgPRaIDYXAhttps://en.wikipedia.org/wiki/Kernel_(statistics)#Kernel_functions_in_common_use커널(통계)-Wikipedia Kernel(통계)위키 피디아에서 무료 백과 사전기타 용도에 대해서는 커널( 애매함 회피)를 참조하십시오.이 기사에서는 검증을 위해서 추가의 인용이 필요합니다.신뢰할 수 있는 정보원에 인용을 추가함으로써 이 기사를 개선하는 것을 거들어 주세요.아직 가공의 소재는 도전되고 삭제될 가능성이 있습니다.출처를 검색합니다…en.wikipedia.orghttps://en.wikipedia.org/wiki/Kernel_density_estimation커널 밀도의 추정-위키 피디아 커널 밀도의 추정무료 백과 사전 위키 피디아보다 이 주제의 보다 넓은 범위에 대해서는 커널 추정을 참조하세요.통계학에서 커널 밀도 추정(KDE)는 랜덤 변수의 확률 밀도 함수를 추정하는 비상 파라메토릿큰 방법입니다.커널 밀도 추정은 fu…en.wikipedia.orghttps://www.youtube.com/watch?v=NNwkDi-2xVQ계약 톰프슨:/앙고라 오야오야 오야오야오야. 당신은 /2020/07/17/메릴. 낯선 길과 만나다.최대 공산 법(MLE)-공이 수학 정리 노트 최대 공산 법(MLE)통계학 2020년 07월 17일 어떤 평균치를 가질 확률 밀도에서 이들의 샘플이 추출되었는가?adapted from the Seeing Theory’s amazing visualization of MLE최대 공산 법의 정의 최대 공산 법(Maximum Likelihood Estimation, 이하 MLE)은 파라미터⋯=(⋯ 1,,,)m)로 구성된 한 확률 밀도 함수 P(x|)로 관측된 표본 데이터 세트를x=(x1, x2, ,, x···angeloyeo.github.io최대우도법(MLE) – 콘돌리의 수학 정리 노트 최대우도법(MLE) 통계학 2020년 07월 17일 어떤 평균값을 가진 확률 밀도에서 이 샘플들이 추출되었는가? adapted from the Seeing Theory’s amazing visualization of MLE 최대우도법의 정의 최대우도법(Maximum Likelihood Estimation, 이하 MLE)은 파라미터 ⋯ = (⋯1、 ,、 )m)로 구성된 어떤 확률밀도함수 P (x| )에서 관측된 표본 데이터 세트를 x = (x1, x2, ,, x···angeloyeo.github.io최대우도법(MLE) – 콘돌리의 수학 정리 노트 최대우도법(MLE) 통계학 2020년 07월 17일 어떤 평균값을 가진 확률 밀도에서 이 샘플들이 추출되었는가? adapted from the Seeing Theory’s amazing visualization of MLE 최대우도법의 정의 최대우도법(Maximum Likelihood Estimation, 이하 MLE)은 파라미터 ⋯ = (⋯1、 ,、 )m)로 구성된 어떤 확률밀도함수 P (x| )에서 관측된 표본 데이터 세트를 x = (x1, x2, ,, x···angeloyeo.github.io