参考:
https://github.com/iwatobipen/chemo_info/blob/master/chemicalspace2/HDBSCAN_Chemoinfo.ipynb

https://www.cnblogs.com/liulunyang/p/14275612.html

本文章主要方法:
1、通过umap获取分子的降维特征数据
2、再通过hdbscan或kmeans聚类方法聚类(hdbscan不支持指定最后聚类总数量,可能非常多;kmeans可以指定总的聚类数)

化学分子 降维算法umap、聚类算法hdbscan和kmeans

代码已经上传github:https://github.com/lonngxiang/molecular-clustering

安装
## 安装
1)pip install umap-learn  -i https://pypi.douban.com/simple2)hdbscan pip安装报错:
ERROR: Failed building wheel for hdbscan
Failed to build hdbscan
ERROR: Could not build wheels for hdbscan, which is required to install pyproject.toml-based projects解决方法conda安装:conda install -c conda-forge hdbscanconda安装后调用报错:
__init__() got an unexpected keyword argument 'cachedir'解决方法joblib降级:
pip install joblib==1.1.0

代码:

##第一步  指纹获取,下来是2048维
from rdkit import Chem
from rdkit.Chem import DataStructs,AllChem, Draw
import numpy as npX = []
for sim in results["hits"]["hits"]:fragment = sim["_source"]["fragment"]mol = Chem.MolFromSmiles(fragment)arr = np.zeros((0,))fp = AllChem.GetMorganFingerprintAsBitVect(mol, 2)DataStructs.ConvertToNumpyArray(fp, arr)X.append(arr)
print('{} mols loaded'.format(len(X)))## 第二部 umap进行降维,默认是降维成2维,umap.UMAP里可以修改n_componentsimport umapdef tanimoto_dist(a,b):dotprod = np.dot(a,b)tc = dotprod / (np.sum(a) + np.sum(b) - dotprod)return 1.0-tcumap_X = umap.UMAP( metric=tanimoto_dist).fit_transform(X)## 第三部 对umap降维处理的数据再次用hdbscan进行降维
import hdbscan
from collections import Countercluster_umap = hdbscan.HDBSCAN(min_cluster_size=5, gen_min_span_tree=True)
cluster_umap.fit(umap_X)cluster_umap.labels_      ##(hdbscan降维后的聚类数)
Counter(cluster_umap.labels_).keys(),Counter(cluster_umap.labels_)  ## 查看各聚类中心的数据量 ## 或kmeans进行聚类
from sklearn.cluster import KMeanskmeans=KMeans(n_clusters=10) ##指定10个聚类中心
kmeans.fit(umap_X)
kmeans.labels_

## 最终聚类效果
import seaborn as snspalette = sns.color_palette()
label_prob = zip(cluster_umap.labels_, cluster_umap.probabilities_)
plt.scatter(umap_X.T[0], umap_X.T[1], c = cluster_umap.labels_, cmap='plasma')

化学分子抽取同一聚类的数据查看

这是聚类0中心的数据展示;my_score函数参考这里(sa_score化合物合成难度打分):https://blog.csdn.net/weixin_42357472/article/details/127546269

cluster_umap_dict ={}
for index, value in enumerate(cluster_umap.labels_.tolist()):print("索引:" ,index, ", 值:" ,value)value =str(value)if value not in cluster_umap_dict:cluster_umap_dict[value] = [index]else:cluster_umap_dict[value].append(index)new_mols2 = []
sa_scores2 = []for ii in cluster_umap_dict["0"]:  ##这是聚类0中心的数据展示sim = results["hits"]["hits"][ii]   ##results["hits"]["hits"]  这是总共分子的原始数据fragment = sim["_source"]["fragment"]if Counter(fragment)["*"] ==1:# 统计词频new_fragment = ("N(C([C@H](N)CCCCN)=O)[C@H](C)C*" + fragment).replace("*","")# print(new_fragment)mol = Chem.MolFromSmiles(new_fragment)new_mols2.append(mol)sa_score = my_score(mol)sa_scores2.append(sa_score)Draw.MolsToGridImage(new_mols2,subImgSize=(300,300), molsPerRow=5,legends=["sa_score:  "+str(ii)for ii in sa_scores2])


这是聚类20中心的数据展示

new_mols2 = []
sa_scores2 = []for ii in cluster_umap_dict["20"]:sim = results["hits"]["hits"][ii]fragment = sim["_source"]["fragment"]if Counter(fragment)["*"] ==1:# 统计词频new_fragment = ("N(C([C@H](N)CCCCN)=O)[C@H](C)C*" + fragment).replace("*","")# print(new_fragment)mol = Chem.MolFromSmiles(new_fragment)new_mols2.append(mol)sa_score = my_score(mol)sa_scores2.append(sa_score)Draw.MolsToGridImage(new_mols2,subImgSize=(300,300), molsPerRow=5,legends=["sa_score:  "+str(ii)for ii in sa_scores2])

hdbscan预测新数据approximate_predict

参考:https://hdbscan.readthedocs.io/en/latest/prediction_tutorial.html

注意: hdbscan.HDBSCAN里prediction_data=True需要设置为True;二是hdbscan.approximate_predict预测里数据格式是array,如果是单条需要放列表里

import hdbscancluster_umap = hdbscan.HDBSCAN(min_cluster_size=5, gen_min_span_tree=True, prediction_data=True)
cluster_umap.fit(umap_X)##测试新数据cluster, prob = hdbscan.approximate_predict(cluster_umap,[[ 7.5436993 ,  5.556767  ],[ 8.059909  ,  1.9189416 ]])
cluster, prob

化学分子 降维算法umap、聚类算法hdbscan和kmeans相关推荐

  1. 图解机器学习算法(13) | 聚类算法详解(机器学习通关指南·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/34 本文地址:https://www.showmeai.tech/article-d ...

  2. AI中分类算法与聚类算法

    学习数据挖掘的朋友,对分类算法和聚类算法都很熟悉.无论是分类算法还是聚类算法,都有许多具体的算法来实现具体的数据分析需求.很多时候,我们难以判断选择分类或者聚类的场合是什么.我们最直观的概念是,分类和 ...

  3. Interview:算法岗位面试—10.29下午上海某电子(偏传统ML算法,外企)数据结构算法+晚上国内某保险公司(偏AI算法,世界500强)技术面试之分类算法、回归算法、聚类算法等细节考察

    ML岗位面试:10.29下午上海某电子(偏传统ML算法,外企)数据结构算法+晚上国内某保险公司(偏AI算法,世界500强)技术面试之分类算法.回归算法.聚类算法等细节考察 Interview:算法岗位 ...

  4. 《MATLAB智能算法30个案例》:第20章 基于遗传模拟退火算法的聚类算法

    <MATLAB智能算法30个案例>:第20章 基于遗传模拟退火算法的聚类算法 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB智能算法30个案例分析& ...

  5. 聚类算法--近邻聚类算法(C++实现)

    聚类算法–近邻聚类算法(C++实现) 写在前面: ​ 最近邻聚类算法,应该不是KNN,也不是K-means,就是一个特别基础的算法,但是在CSDN没有找到C++实现的这个算法,只有一个python写的 ...

  6. 单链聚类算法_聚类算法总结

    1      什么是聚类算法? 聚类算法就是根据特定的规则,将数据进行分类.分类的输入项是数据的特征,输出项是分类标签,它是无监督的. 常见的聚类规则包括:1)基于原型的,例如有通过质心或中心点聚类, ...

  7. 聚类算法——层次聚类算法

    每篇一句: You must strive to find your own voice. Because the longer you wait to begin, the less likely ...

  8. [学习笔记] [机器学习] 8. 聚类算法(聚类算法:K-means、K-means++;聚类算法评估;特征降维:特征选择(Pearson相关系数、Spearman相关系数)、PCA主成分分析)

    视频链接 数据集下载地址:无需下载 1. 聚类算法简介 学习目标: 掌握聚类算法实现过程 知道 K-means 算法原理 知道聚类算法中的评估模型 说明 K-means 的优缺点 了解聚类中的算法优化 ...

  9. kmeans算法_KMeans聚类算法详解

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Ad ...

最新文章

  1. TX2---ORB_SLAM2
  2. java统计 pv uv_统计PV、UV的新武器——Aviator
  3. MySql 查询同一字段多个结果合并到一行显示 GROUP_CONCAT
  4. python 生成payload_利用Python进行Payload分离免杀
  5. 论文浅尝 | Tree-to-sequence 学习知识问答
  6. bootstraptable导出excel独立使用_JavaWeb系列之-一小时搞定POI导出Excel
  7. 使软件可二次开发_RobotStudio二次开发:Smart组件I/O信号声明
  8. 通过JDK动态代理实现拦截器
  9. 10种用户友好的验证码
  10. python面向对象
  11. 中国最伟大的现实主义诗人:杜甫的一生
  12. 揭迷网络达人另类赚钱秘笈
  13. 计算机病毒结构及技术分析
  14. 车载蓝牙音乐主动获取播放进度(安富方案)
  15. 这不就是微信朋友圈屏蔽功能吗?推特现在才做出来未免太迟了吧
  16. 记一道字节跳动的算法面试题
  17. python行业中性化怎么做_1行代码完成去极值、标准化、行业与市值中性化---以pb因子为例...
  18. Quartz定时任务调度框架
  19. 线性递推数列_学习笔记
  20. 2020-12-18 Dataset之COCO数据集:COCO数据集的简介、下载

热门文章

  1. android 翻页动态效果,Android 实现翻书的动画效果
  2. 5G边缘云在营销领域的投资机遇
  3. 艾伟_转载:我对NHibernate的感受(1):对延迟加载方式的误解
  4. 那个人总有一天会爱你
  5. Python篇之编译py文件为pyc文件的方法总结
  6. 网易电话面试经验——C 游戏服务器开发
  7. 新道格会客间 人才引领企业 注入科创源动力
  8. 微信公众平台SDK.net版本(weixinSDK.net)
  9. fiddler移动端抓包wifi不可上网(配置都正确,防火墙已关闭)
  10. Linux系统调用七、与文件权限有关的系统API串讲