各クラスタ内のinstagram/hotel比率を計算したい場合。しかし、結果は、私は実際に非常に離れた点を一緒にクラスタリングしていることを示しています。これは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