您好我正在尝试聚集化学指纹
我正在使用rdkit为集群提供分层方法,问题是我知道我希望拥有13个集群的集群数量,所以我使用基于tanimoto相似度得分和scikit的kmean方法
这是我的代码:
smiles = []
molFin = []
fps = []
np_fps = []
#mol["idx"] contain the name of the molecules
for x in mol["idx"]:
res = cs.search(x)
#get the smiles code of a molecule
smi = res[0].smiles
#get the fingerprint of the molecule
fp = Chem.MolFromSmiles(str(smi))
fp = FingerprintMols.FingerprintMol(fp)
fps.append(fp)
#compute the similarity score (end up with a cross molecule matrix where each occurence correspond to the taminoto score)
dists = []
nfps = len(fps)
for i in range(0,nfps):
sims = DataStructs.BulkTanimotoSimilarity(fps[i],fps)
dists.append(sims)
#store the value on a data frame and apply kmean
mol_dist = pd.DataFrame(dists)
k_means = cluster.KMeans(n_clusters=13)
k1 = k_means.fit_predict(mol_dist)
mol["cluster"] = k1
#get the result
final = mol[["idx","cluster"]]
聚类似乎在某种程度上有效但我不知道我们如何对化学指纹进行聚类,我们是否应该将聚类算法直接应用于指纹呢?
答案 0 :(得分:0)
我认为聚类中的问题是如何选择合适的k。您的问题可能会解决如下:
确定合适的k-cluster数。你可以使用一些方法,如弯头,...... 请参阅以下链接 - https://datasciencelab.wordpress.com/2013/12/27/finding-the-k-in-k-means-clustering
获得k-numbers后,您可以选择适当的特征以及获得的k-cluster,然后对数据集和评估进行聚类。
最好的关注!