DBSCAN 융합 알고리즘 기본 개념 및 예
25642 단어 기계 학습
핵심 대상: 만약 에 특정한 점 의 밀도 가 알고리즘 이 설정 한 한도 값 에 도달 하면 핵심 점 (즉 r 영역 내 점 의 수량 이 minPts 보다 작 지 않 음) 분야 의 거리 한도 값: 설정 한 반지름 r 직접 밀 도 는 도달 할 수 있다. 만약 에 특정한 점 p 가 점 q 의 r 분야 에 있 고 q 가 핵심 점 이 라면 p - q 직접 밀 도 는 밀도 에 도달 할 수 있다. 만약 에 한 점 의 서열 q0, q1,.., qk 가 있 으 면임의의 qi - qi - 1 은 직접 밀도 에 도달 할 수 있 는 것 으로 q0 에서 qk 밀도 에 도달 할 수 있다 고 하 는데 이것 은 실제 적 으로 직접 밀도 에 도달 할 수 있 는 전파 이다.
작업 흐름:
파라미터 D: 입력 데이터 세트 파라미터: 반경 MinPts 지정: 밀도 한도 값
1. 모든 대상 을 unvisited 2. Do 3 으로 표시 합 니 다. unvisited 대상 p 4 를 무 작위 로 선택 합 니 다. visited 5. If p 로 표시 하 는 영역 에 최소 MinPts 대상 6. 새 클 러 스 터 C 를 만 들 고, p 를 C 7. N 을 p 로 하 는 영역 에 추가 합 니 다. For N 의 각 점 p 9. If p 는 unvisited 10. visited 11. if p 로 표시 하 는 영역 에 최소 MinPts 대상 이 있 습 니 다.이 대상 들 을 N 12 에 추가 합 니 다. 만약 p 가 아직 클 러 스 터 의 구성원 이 아니라면, p 를 C 13. End for 14 에 추가 합 니 다. 출력 C 15. Else 태그 p 는 소음 16. Until 은 unvisited 대상 으로 표시 되 지 않 았 습 니 다.
매개 변수 선택:
반경 은 K 거리 에 따라 설정 할 수 있 습 니 다. 돌연변이 점 K 거 리 를 찾 습 니 다. 주어진 데이터 세트 P = {p (i), i = 0, 1, n}, 점 P (i) 에서 집합 D 의 부분 집합 S 까지 의 모든 점 간 의 거 리 를 계산 하고 거 리 는 작은 것 에서 큰 것 으로 정렬 합 니 다. d (k) 는 k 거리 MinPts: k - 거리 에서 중 k 의 값 이 라 고 부 릅 니 다. 보통 작은 것 을 취하 고 여러 번 시도 합 니 다.
우세:
클 러 스 터 의 개 수 를 지정 하지 않 아 도 임의의 모양 의 클 러 스 터 를 발견 할 수 있 습 니 다.
열세:
고 차원 데이터 가 어렵 습 니 다. (차원 을 낮 출 수 있 습 니 다) 매개 변 수 를 선택 하기 어렵 습 니 다. (매개 변수 가 결과 에 미 치 는 영향 이 매우 큽 니 다) Sklearn 에서 효율 이 느 립 니 다. (데이터 삭감 전략)
집단 사례 실전
In[1]: import pandas as pd
beer = pd.read_csv('data.txt', sep=' ')
# ,sep
beer
In[2]: X = beer[['calories', 'sodium', 'alcohol', 'cost']]
# , ,
K - means 방법 으로 하 겠 습 니 다. (K - means clustering)
In[3]: from sklearn.cluster import KMeans
km = KMeans(n_clusters=3).fit(X)
km2 = KMeans(n_clusters=2).fit(X)
# n_clusters
In[4]: km.labels_
#
In[5]: beer['cluster'] = km.labels_
beer['cluster2'] = km2.labels_
#
beer.sort_values('cluster')
# cluster
In[6]: from pandas.tools.plotting import scatter_matrix
%matplotlib inline
cluster_centers = km.cluster_centers_
cluster_centers_2 = km2.cluster_centers_
In[7]: beer.groupy('cluster').mean()
# groupy('cluster') cluster ,
In[8]: beer.groupy('cluster2').mean()
In[9]: centers = beer.groupy('cluster').mean().reset_index()
#
In[10]: %matplotlib inline
import matplotlib.pyplot as plt
plt.rcParams['font.size'] = 14
#
In[11]: import numpy as np
colors = np.array(['red', 'green', 'blue', 'yellow'])
In[12]: plt.scatter(beer['calories'], beer['alcohol'], c=colors[beer['cluster']])
# calories,alcohol , cluster
plt.scatter(centers.calories, centers.alcohol, linewidth=3, marker='+', s=300, c='black')
# , +
In[18]: scatter_matrix(beer[['calories', 'sodium', 'alcohol', 'cost']], c=colors[beer['cluster']], s=100, alpha=1, figsize=(10,6))
# ,
plt.suptitle('With 3 centroids initialized')
In[18]: scatter_matrix(beer[['calories', 'sodium', 'alcohol', 'cost']], c=colors[beer['cluster2']], s=100, alpha=1, figsize=(10,6))
plt.suptitle('With 2 centroids initialized')
#
데이터 가 미리 처 리 된 상황 에서 어떤 차이 가 있 는 지 보 세 요. (데이터 표준화)
In[20]: from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
X_scaled
In[21]: km = KMeans(n_clusters=3).fit(X_scaled)
#
In[22]: beer['scaled_cluster'] = km.labels_
beer.sort_values('scaled_cluster')
In[23]: scatter_matrix(X, c=colors[beer.scaled_cluster], alpha=1, s=100, figsize=(10, 10))
집합 평가: 윤곽 계수 (Silhouette Coefficient) 계산 견본 i 에서 같은 떨 기 다른 견본 의 평균 거리 ai, ai 가 작 을 수록 견본 i 가 이 떨 기 에 집합 되 어야 한 다 는 것 을 의미한다.ai 를 샘플 i 라 고 부 르 는 떨 기 내 싱크로 율.샘플 i 에서 다른 한 떨 기 Cj 까지 의 모든 견본 의 평균 거 리 를 계산 하 는 것 을 샘플 i 와 떨 기 Cj 의 싱크로 율 이 라 고 한다.샘플 i 의 클 러 스 터 간 싱크로 율 로 정의: bi = min {bi 1, bi2,... bik} Si 가 1 에 가깝다 는 것 은 샘플 i 의 집합 이 합 리 적 인 Si 접근 - 1 에 가깝다 는 것 을 설명 한다. 이 는 샘플 i 가 다른 클 러 스 터 Si 와 비슷 한 0 으로 분류 되 어야 한 다 는 것 을 의미한다. 이 는 샘플 i 가 두 클 러 스 터 의 경계 에 있다 는 것 을 의미한다.
In[25]: from sklearn import metrics
score_scaled = metrics.silhouette_score(X, beer.scaled_cluster)
score = metrics.silhouette_score(X, beer.cluster)
# , KMeans
print(score_scaled, score)
In[26]: scores = []
for k in range(2, 20):
km = KMeans(n_clusters=k).fit(X)
labels = km.labels_
score = metrics_silhouette_score(X, labels)
scores.append(score)
scores
#
In[27]: plt.plot(list(range(2, 20)), scores)
plt.xlabel('Number of Clusters Initialized')
plt.ylabel('Sihouette Score')
DBSCAN 방법 으로 하 겠 습 니 다. (DBSCAN clustering)
In[28]: from sklearn.cluster import DBSCAN
db = DBSCAN(eps=10, min_samples=2)
# eps ,min_samples
In[29]: labels = db.labels_
In[30]: beer['cluster_db'] = labels_
beer.sort_values('cluster_db')
# cluster_db
beer
#
In[31]: beer.groupby('cluster_db').mean()
In[32]: scatter_matrix(X, c=colors[beer.cluster_db], figsize(10,10), s=100)
In[33]: score = metrics.silhouette_score(X, beer.cluster_db)
score
# beer , In[30] beer=beer.sort_values('cluster_db')
관심 이 있다 면 제 개인 블 로그 에 들 어가 더 많은 글 을 볼 수 있 습 니 다.https://www.fatalblow.top/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
형태소 분석은 데스크톱을 구성하는 데 도움이?문자×기계 학습에 흥미를 가져와 개인 범위의 용도를 생각해, 폴더 정리에 사용할 수 있을까 생각해 검토를 시작했습니다. 이번 검토에서는 폴더 구성 & text의 읽기 → mecab × wordcloud를 실시하고 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.