从scikit学习DBSCAN算法的输入矩阵和参数



我是scikit learn的新手,考虑到人们对电影的兴趣,我正在尝试对他们进行聚类。我创建了一个稀疏矩阵,它包含不同的列(每部电影一个)和行。对于给定的单元格,如果用户喜欢与否,则为0或1。

sparse_matrix = numpy.zeros(shape=(len(list_user), len(list_movie)))
for id in list_user:
    index_id = list_user.index(id)
    for movie in list_movie[index_id]:
        if movie.isdigit():
            index_movie = list_movie.index(int(movie))
            sparse_matrix[index_id][index_movie] = 1
pickle.dump(sparse_matrix, open("data/sparse_matrix", "w+"))
return sparse_matrix

我认为这就像一个向量数组,从文档来看,这是一个可以接受的输入。

从矢量阵列或距离矩阵执行DBSCAN聚类。

引用链接

所以我试着做一些事情来使用scikit学习:

sparse_matrix = pickle.load(open("data/sparse_matrix"))
X = StandardScaler().fit_transform(sparse_matrix)
db = DBSCAN(eps=1, min_samples=20).fit(X)
core_samples_mask = np.zeros_like(db.labels_, dtype=bool)
core_samples_mask[db.core_sample_indices_] = True
labels = db.labels_
print labels

我使用scikit learn中的示例DBSCAN来完成此操作。我有两个问题,第一个问题是:"我的矩阵格式好吗,适合这个算法?"当我考虑维数时,我有这个问题。第二个问题是"我如何设置epsilon参数(我的点之间的最小距离)?"

请参阅DBSCAN文章,了解如何根据k-距离图选择epsilon的建议。

由于您的数据是稀疏的,因此使用余弦距离而不是欧几里得距离可能更合适。您还应该使用稀疏格式。据我所知,numpy.zeros将创建密集矩阵:

 sparse_matrix = numpy.zeros(...)

因此具有误导性,因为它是一个密集矩阵,只有大部分0。

相关内容

  • 没有找到相关文章

最新更新