각 클러스터 내에서 인스 트램/호텔 비율을 계산하고 싶습니다. 그러나 결과는 실제로 나는 아주 먼 지점을 함께 모으고 있음을 보여줍니다. DBSCAN에서는 그렇지 않습니다. 뭐가 문제 야?DBSCAN 함께 원거리 클러스터링
절차 : DBSCAN을 사용하여 Instagram 게시를 클러스터링 한 다음 1NN을 사용하여 호텔을 분류하십시오.
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans
from sklearn.cluster import DBSCAN
from sklearn.neighbors import KNeighborsClassifier
if __name__ == '__main__':
inst = pd.read_csv('inst.csv', encoding='utf-8')
ht = pd.read_csv('ht.csv', encoding='utf-8')
inst = inst[(inst.lat >= 48.30) & (inst.lng >= -139.06) & (inst.lat <= 60.00) & (inst.lng <= -114.03)]
ht = ht[(ht.lat >= 48.30) & (ht.lng >= -139.06) & (ht.lat <= 60.00) & (ht.lng <= -114.03)]
# kmean = KMeans(n_clusters=50,n_jobs=-1)
# kmean.fit(inst[['lat', 'lng']])
#
# ht_labels = kmean.predict(ht[['lat', 'lng']])
# inst_labels = kmean.predict(inst[['lat', 'lng']])
#
# plt.scatter(ht.lng, ht.lat, c=ht_labels, alpha=0.5)
# plt.savefig('./fig/hotel_clusters.png')
# plt.clf()
#
# plt.scatter(inst.lng, inst.lat, c=inst_labels, alpha=0.5)
# plt.savefig('./fig/instagram_posts_clusters.png')
# plt.clf()
dbs = DBSCAN(eps=0.05,min_samples=10,metric='haversine', n_jobs=-1)
ht_labels = dbs.fit_predict(ht[['lat', 'lng']])
inst_labels = dbs.fit_predict(inst[['lat', 'lng']])
plt.scatter(ht.lng, ht.lat, c=ht_labels, alpha=0.5)
plt.savefig('./fig/hotel_clusters1.png')
plt.clf()
plt.scatter(inst.lng, inst.lat, c=inst_labels, alpha=0.5)
plt.savefig('./fig/instagram_posts_clusters1.png')
plt.clf()
knn = KNeighborsClassifier(n_neighbors=1, n_jobs=-1)
knn.fit(inst[['lat', 'lng']], inst_labels)
ht_labels = knn.predict(ht[['lat', 'lng']])
plt.scatter(ht.lng, ht.lat, c=ht_labels, alpha=0.5)
plt.savefig('./fig/hotel_clusters3.png')
plt.clf()
plt.scatter(inst.lng, inst.lat, c=inst_labels, alpha=0.5)
plt.savefig('./fig/instagram_posts_clusters3.png')
plt.clf()
ht = ht[['lat', 'lng']]
ht['lb'] = ht_labels
inst = inst[['lat', 'lng']]
inst['lb'] = inst_labels
ht1 = ht.groupby(['lb']).count().reset_index().set_index('lb')
inst1 = inst.groupby(['lb']).count().reset_index().set_index('lb')
print(ht1)
ratio = inst1/ht1
print(ratio)
clu = 2
plt.scatter(ht[ht.lb == clu].lng, ht[ht.lb == clu].lat, c='black')
print(len(ht[ht.lb == clu]))
plt.scatter(ht.lng, ht.lat, c=ht_labels, alpha=0.05)
plt.savefig('./fig/hotel_clusters4.png')
plt.clf()
버그를 찾을 수 없습니다. 도와주세요.
"매우 먼 지점"은 얼마나 먼 거리입니까? 이것이 엡실론 문제라면 주어진 정보로부터 말하기는 어렵습니다. – ako
포인트 방식이 엡실론 이상입니까? – ZHU
더 중요한 것은, 같은 클러스터에 있지 않은 지점이 많다는 것입니다. – ZHU