【发布时间】:2019-09-22 03:59:50
【问题描述】:
我的数据集中有三列。这是属于“披萨”类别的餐厅列表。这些数据来自 yelp 数据集。每个餐厅都有三列。纬度,经度,签到。我应该建立一个模型,我应该能够预测我应该在哪里开设一家新餐厅的坐标(纬度,经度),以便签到的数量可以很高。共有 4951 行
签到纬度经度 0 2 33.394877 -111.600194 1 2 43.841217 -79.303936 2 1 40.442828 -80.186293 3 1 41.141631 -81.356603 4 1 40.434399 -79.922983 5 1 33.552870 -112.133712 6 1 43.686836 -79.293838 7 2 41.131282 -81.490180 8 1 40.500796 -79.943429 9 12 36.010086 -115.118656 10 2 41.484475 -81.921150 11 1 43.842450 -79.027990 12 1 43.724840 -79.289919 13 2 45.448630 -73.608719 14 1 45.577027 -73.330855 15 1 36.238059 -115.210341 16 1 33.623055 -112.339758 17 1 43.762768 -79.491417 18 1 43.708415 -79.475884 19 1 45.588257 -73.428926 20 4 41.152875 -81.358754 21 1 41.608833 -81.525020 22 1 41.425152 -81.896178 23 1 43.694716 -79.304879 24 1 40.442147 -79.956513 25 1 41.336466 -81.784790 26 1 33.231942 -111.721218 27 2 36.291436 -115.287016 28 2 33.641847 -111.995571 29 1 43.570217 -79.566431 ………………我尝试使用 DBSCAN 解决集群问题,并以下图结束。但我无法理解它。我该如何进一步进行或如何以不同的方式解决问题以获得我的结果?
import pandas as pd
from sklearn.cluster import DBSCAN
import numpy as np
import matplotlib.pyplot as plt
review=pd.read_csv('pizza_category.csv')
checkin=pd.read_csv('yelp_academic_dataset/yelp_checkin.csv')
final=pd.merge(review,checkin,on='business_id',how='inner')
final.dropna()
final=final.reset_index(drop=True)
X=final[['checkins']]
X['latitude']=final[['latitude']].astype(dtype=np.float64).values
X['longitude']=final[['longitude']].astype(dtype=np.float64).values
print(X)
arr=X.values
db = DBSCAN(eps=2,min_samples=5)
y_pred = db.fit_predict(arr)
plt.figure(figsize=(20,10))
plt.scatter(arr[:, 0], arr[:, 1], c=y_pred, cmap="plasma")
plt.xlabel("Feature 0")
plt.ylabel("Feature 1")
【问题讨论】:
-
您需要让我们知道您对什么会导致签入次数很高的假设。假设您有未知点 a 和已知点 x_1、x_2 等。如果您假设 checkins(a) 与 $1/N \sum_i checkins(x_i) / dist(a,x_i)$ 成正比,那么 DBscan 不是不错的选择。它不会根据到质心的距离进行聚类。看看scikit-learn.org/stable/auto_examples/cluster/…。它显示了各种聚类算法如何处理不同的情况。有些,比如 DBscan,更关心邻接而不是质心的距离。其他人则相反
-
谢谢 :)。我会看看的。
标签: machine-learning cluster-analysis data-science yelp