Python 如何使用sklearn为大型数据集利用关联传播
我曾经用亲和传播为我的数据集创建集群,我的数据集相当大。我使用tfidf将文本数据集转换为向量,然后适应关联传播。对于较小的数据集,亲和性可以无缝地工作,但是对于较大的数据集,它开始消耗大量的RAM,最后,我的操作系统终止了这个过程。我做了很多研究,发现几乎没有堆栈溢出,它说使用np.medien或np.mean等。。但对我的问题不起作用。我还对组件进行了原理分析,并尝试减少矩阵,但仍然消耗了大量RAM。 我遇到了利用关联传播的方法——这种方法通过随机选择相似点而不是NXN来处理大型数据集,但在sklearn或python中找不到。 我看到它是一种语言。 我们如何在python中使用sklearn中的亲和传播 这是我正在尝试的一段亲和力代码Python 如何使用sklearn为大型数据集利用关联传播,python,machine-learning,scikit-learn,cluster-analysis,tf-idf,Python,Machine Learning,Scikit Learn,Cluster Analysis,Tf Idf,我曾经用亲和传播为我的数据集创建集群,我的数据集相当大。我使用tfidf将文本数据集转换为向量,然后适应关联传播。对于较小的数据集,亲和性可以无缝地工作,但是对于较大的数据集,它开始消耗大量的RAM,最后,我的操作系统终止了这个过程。我做了很多研究,发现几乎没有堆栈溢出,它说使用np.medien或np.mean等。。但对我的问题不起作用。我还对组件进行了原理分析,并尝试减少矩阵,但仍然消耗了大量RAM。 我遇到了利用关联传播的方法——这种方法通过随机选择相似点而不是NXN来处理大型数据集,但在
def affinity_cluster_technique(self, preference=None, X_train_vecs=None, filenames=None, contents=None):
"""
:param preference:
:param X_train_vecs:
:param vectorizer:
:param filenames:
:param contents:
:return:
"""
logger.info('Into the affinity core engine having the preference {}'.format(str(preference)))
if X_train_vecs!=None or X_train_vecs!='None':
X = X_train_vecs
# X = cosine_distances(X)
# svd = TruncatedSVD(n_components=100)
# normalizer = Normalizer(copy=False)
# lsa = make_pipeline(svd, normalizer)
# X= X_train_vecs = lsa.fit_transform(X_train_vecs)
# X = StandardScaler().fit_transform(X)
logger.info("The shape of X_train after the lsa {}".format(X_train_vecs.shape))
# X = X_train_vecs.toarray()
# X = np.array(X)
logger.info('Vector to array of the X data processed')
if preference!='None':
af = AffinityPropagation(damping=0.5, preference=preference,verbose=True)
else:
af = AffinityPropagation(damping=0.5, preference=None,verbose=True)
logger.info('The affinity propagation object is {}'.format(str(af)))
y = af.fit_predict(X)
exemplars = af.cluster_centers_
number_of_clusters = af.labels_.tolist()
# logger.info("The total number of cluster Affinity generated is: {}".format(str(len(exemplars))))
data = {'filename': filenames, 'contents': contents, 'cluster_label': number_of_clusters}
frame = pd.DataFrame(data=data, index=[number_of_clusters], columns=['filename', 'contents', 'cluster_label'])
logger.info('Sample of the clustered df {}'.format(str(frame.head(2))))
cluster_and_count_of_docs = frame['cluster_label'].value_counts(sort=True, ascending=False)
dict_of_cluster_and_filename = dict()
for i in number_of_clusters:
list_of_file_id = list()
list_of_files_in_cluster = list()
list_of_files_in_cluster = frame.ix[i]['filename'].tolist()
try:
for file_id in list_of_files_in_cluster:
list_of_file_id.append(file_id)
dict_of_cluster_and_filename['clusters ' + str(i)] = list_of_file_id
except Exception as e:
list_of_file_id.append(list_of_files_in_cluster)
dict_of_cluster_and_filename['clusters ' + str(i)] = list_of_file_id
return dict_of_cluster_and_filename, X, y, exemplars
else:
try:
raise Exception
except Exception as e:
logger.error("The X_train data is None {}".format(str(e)))
return dict(),None,None,None
请让我知道,如果我正在做一些工作。。。并帮助了解如何实现大型数据集。亲和传播需要2个n x n条目的矩阵。这种算法永远不会是可伸缩的。如果您有大量数据,请使用其他方法。图书馆建议与此无关。试着自己实现你想要的算法@尼特什库马尔:你能解决上述问题吗。我也在研究亲和传播问题。目前它的玩具输入。但随后我必须在120K+字符串上实现它。可能会面临同样的问题。