DBSCAN_Yelp


DBSCAN

利用 DBSCAN 聚类算法,对经纬度进行聚类

代码如下:

import pandas as pd
import numpy as np
from sklearn.cluster import DBSCAN
from sklearn import metrics
import os

def dbscan(input_file):
    columns=['lon','lat']
    in_df = pd.read_csv(input_file, sep=',', header=1, names=columns)
    print(in_df)
    coords = in_df.values
 
    kms_per_radian = 6371.0086
   
    epsilon = 0.4 / kms_per_radian
 
    db = DBSCAN(eps=epsilon, min_samples=10, algorithm='ball_tree', metric='haversine').fit(np.radians(coords))
    cluster_labels = db.labels_
 
    num_clusters = len(set(cluster_labels) - set([-1]))
 
    print( 'Clustered ' + str(len(in_df)) + ' points to ' + str(num_clusters) + ' clusters')
 
    for n in range(num_clusters):
        #print('Cluster ', n, ' all samples:')
        one_cluster = coords[cluster_labels == n]
        print(len(one_cluster))
        #clist = one_cluster.tolist()
        #print(clist[0])
        
def main():
    path = './data'
    f = 'placell.csv'
    datafile = os.path.join(path,f)
    print(datafile)
    dbscan(datafile)
    
if __name__ == '__main__':
    main()

利用此算法,将 12094 家店铺聚类为 163 类,每一类至少有 10 家店铺。
并存储。
重新做数据,将聚类标签添加至数据集中。
创建 dqn_coords,训练不同地理位置所适应的店铺。
将其作为参数引入 YELP 的推荐中。
获得新的推荐结果。

数据模拟

对用户的 70W+ 记录进行完全随机模拟生成用户所在地理位置,或许,模拟出的位置分类与其真实所到的位置相距很远,
但是在后期推荐的时候,由于推荐结果的某些特性,在一定程度上来说,提高了对于分类的准确性,综合结果有待评价。

若利用聚类的结果,对用户的 70W+ 记录进行随机模拟生成用户所在地理位置,其模拟出的位置与实际位置相距很近,
但在后期推荐的时候,对于根据地理位置进行推荐的准确率有所偏低,综合结果有待评价。


文章作者: pzxnys
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 pzxnys !
  目录