<jupyter_start><jupyter_text>군집분석군집 분석은 `비지도학습(Unsupervised learning) 분석 기법` 중 하나 입니다. 쉽게 말해서, 사전 정보 없이 자료를 컴퓨터에게 주고, “유사한 대상끼리 묶어보아라!” 라고 명령을 내리는 분석 방법입니다. 따라서 군집분석에서는 어떤 변수를 컴퓨터에게 입력 하느냐가 중요하다고 볼 수 있습니다. *  K-means 군집분석	* K-평균 알고리즘은 구현이 쉽고, 다른 군접 알고리즘에 비해 효율성이 무척 높아 자주 이용되는 알고리즘입니다. 보통 학계나 산업현장에서 사용되는 기법은 다르기 마련이지만, 이 기법은 널리 사용되어집니다. 	* 프로토타입은 **연속적인 특성**에서는 비슷한 데이터포인트의 센터로이드(*Centeroid* - 평균) 이거나 **범주형 특성**에서는 메도이드(*Medoid* - 가장 자주 등장하는 포인트)	* 사전에 몇개의 클러스터를 만들것인지에 대해 직접 지정해 줘야 한다는 다소 주관적인 사람의 판단이 개입됩니다. 적절한 K 값을 선택했다면 높은 성능을 발휘 하겠지만 부적합한 K 값을 선택한다면 군집성능에 대한 성능을 보장할 수 없습니다.	* 이해를 돕기위해 무작위 데이터 생성 및 시각화 데이터 그래프를 작성하겠습니다.<jupyter_code>from sklearn.datasets import make_blobs<jupyter_output><empty_output><jupyter_text>각각의 속성값으로 어떠한 데이터를 생성할 것인지 확인할 수 있다. 150개, 2차원 3개의클러스터(중심), 표준편차 0.5, 무작위, 시드값은 0<jupyter_code>X, y = make_blobs(
    n_samples=150, n_features=2, centers=3, cluster_std=0.5, shuffle=True, random_state=0
)
import matplotlib.pyplot as plt<jupyter_output><empty_output><jupyter_text>pyplot 모듈을 사용하여 산정도를 그려줍니다.<jupyter_code>plt.scatter(X[:,0], X[:,1], c='white', marker='o', edgecolors='black', s=50)
plt.grid()
plt.tight_layout()
plt.show()<jupyter_output><empty_output><jupyter_text>목표  **특성의 유사도**에 기초하여 데이터들을 그룹으로 모으는것1. 데이터 포인트에서 **랜덤하게 K개**의 센트로이드를 **초기 클러스터 중심으로 선택**2. 각 데이터를 가장 가까운 센터로이드로 할당3. 할당된 샘플들을 중심으로 센터로이드를 이동4. 클러스터 할당이 변하지 않거나, 사용자가 지정한 허용오차나, 최대반복횟수에 도달할 때 까지 2,3 번 반복최적화를 위해 유클리드 거리(Euclidean distance)를 이용하여 증명할 수 있습니다.클러스터내의 제곱오차합 SSE 을 반복적으로 최소화$$ \sum_{i=1}^{n}\sum_{j=1}^{k} w^{(i,j)}d(x^{(i)} ,u^{(j)})^2  $$  * u 는 임의의 클러스터 대표 센터로이드(중심)   * 데이터가 클러스터 내에 있다면 1, 아니면 0 출력  * 유클리드 거리(Euclidean distance) 거리 제곱 방식을 통해서 알고리즘의 2번째 단계를 수행  * 변화량에 대한 허용오차값이 일정 수준내로 들어온다면 더이상 클러스터가 변화하지 않는다는 것이고, 최적화가 완료<jupyter_code>from sklearn.cluster import KMeans
km = KMeans(n_clusters=3, init='random', n_init=10, max_iter=300, tol=1e04, random_state=0)
y_km = km.fit_predict(X)
plt.scatter(X[y_km==0,0], X[y_km ==0,1 ], c='lightgreen', marker='s', edgecolors='black', s=50, label='cluster1')
plt.scatter(X[y_km==1,0], X[y_km ==1,1 ], c='orange', marker='o', edgecolors='black', s=50, label='cluster2')
plt.scatter(X[y_km==2,0], X[y_km ==2,1 ], c='lightblue', marker='v', edgecolors='black', s=50, label='cluster3')
plt.scatter(km.cluster_centers_[:,0],
            km.cluster_centers_[:,1],
            c='red',
            marker='*',
            edgecolors='black',
            s=250,
            label='centroids')
plt.legend(scatterpoints=1)
plt.grid()
plt.tight_layout()
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1462171697373579, 'fraction_numerical': 0.027048216385731086, 'mean_word_length': 4.6837416481069045, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 17, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '36971', 'license': 'MIT', 'n_tokens_mistral': 1774, 'n_tokens_neox': 2220, 'n_words': 304, 'path': '.ipynb_checkpoints/2020_06_10_Clustering_Kmeans_algorithm-checkpoint.ipynb', 'repo_name': 'kimjinhyuk/kimjinhyuk.github.io', 'size': '2551'}