来自 scikit-learn 的 DBSCAN 算法的输入矩阵和参数
Input matrix and parameters for the DBSCAN algorithm from scikit-learn
我是 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
我认为这是一个向量数组,从文档来看这是一个可接受的输入。
Perform DBSCAN clustering from vector array or distance matrix.
所以我尝试做一些事情来使用 scikit-learn:
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 完成了此操作。我有两个问题,第一个是:"is my matrix well formatted and suitable for this algorithm?" 当我考虑维数时,我有这个顾虑。第二题是"how I set the epsilon parameter (minimal distance between my point)?"
有关如何根据 k 距离图选择 epsilon 的建议,请参阅 DBSCAN 文章。
由于您的数据稀疏,使用例如余弦距离而不是欧氏距离。您还应该使用 sparse 格式。据我所知,numpy.zeros
将创建一个 dense 矩阵:
sparse_matrix = numpy.zeros(...)
因此具有误导性,因为它是一个密集矩阵,大部分为 0。
我是 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
我认为这是一个向量数组,从文档来看这是一个可接受的输入。
Perform DBSCAN clustering from vector array or distance matrix.
所以我尝试做一些事情来使用 scikit-learn:
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 完成了此操作。我有两个问题,第一个是:"is my matrix well formatted and suitable for this algorithm?" 当我考虑维数时,我有这个顾虑。第二题是"how I set the epsilon parameter (minimal distance between my point)?"
有关如何根据 k 距离图选择 epsilon 的建议,请参阅 DBSCAN 文章。
由于您的数据稀疏,使用例如余弦距离而不是欧氏距离。您还应该使用 sparse 格式。据我所知,numpy.zeros
将创建一个 dense 矩阵:
sparse_matrix = numpy.zeros(...)
因此具有误导性,因为它是一个密集矩阵,大部分为 0。