「日拱一码」100 机器学习辅助定向进化MLDE
目录
主要特点
典型工作流程
代码示例
实际应用注意事项
机器学习辅助定向进化(Machine Learning-Directed Evolution, MLDE)是将机器学习技术与传统的定向进化方法相结合,用于优化蛋白质或其他生物分子的方法。它通过机器学习模型预测突变体的功能,从而减少实验筛选的工作量,提高进化效率
主要特点
- 数据驱动:利用已有突变体数据训练预测模型
- 主动学习:迭代式选择最有潜力的突变体进行实验验证
- 减少实验量:相比传统方法可减少90%以上的实验筛选
- 探索序列空间:能发现传统方法难以找到的远缘优化序列
典型工作流程
- 构建初始突变体库并测试功能
- 用初始数据训练机器学习模型
- 模型预测新突变体的功能
- 选择高预测值突变体进行实验验证
- 将新数据加入训练集,迭代优化模型
- 重复3-5步直至获得满意性能
代码示例
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error# 模拟数据:突变体序列特征和对应活性值
# 假设每个突变体用20个特征表示(实际中可能是氨基酸编码、物理化学性质等)
np.random.seed(42)
num_mutants = 200
num_features = 20# 生成模拟数据
X = np.random.rand(num_mutants, num_features) # 特征
y = 10 * np.sin(np.pi * X[:, 0] * X[:, 1]) + 20 * (X[:, 2] - 0.5) ** 2 # 模拟活性值# 初始训练/测试集划分 (模拟已有实验数据)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 初始模型训练
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)# 评估初始模型
train_pred = model.predict(X_train)
test_pred = model.predict(X_test)
print(f"初始模型 - 训练集RMSE: {np.sqrt(mean_squared_error(y_train, train_pred)):.3f}") # 0.660
print(f"初始模型 - 测试集RMSE: {np.sqrt(mean_squared_error(y_test, test_pred)):.3f}") # 1.829# 模拟MLDE迭代过程
num_iterations = 5
num_new_mutants_per_iter = 10for i in range(num_iterations):print(f"\n迭代 {i + 1}/{num_iterations}")# 生成候选突变体 (实际中可能从序列空间采样)new_candidates = np.random.rand(num_new_mutants_per_iter, num_features)# 模型预测候选突变体活性predicted_scores = model.predict(new_candidates)# 选择top N预测最好的突变体进行"实验"(这里模拟实验测量)top_n = 3top_indices = np.argsort(predicted_scores)[-top_n:]new_X = new_candidates[top_indices]new_y = 10 * np.sin(np.pi * new_X[:, 0] * new_X[:, 1]) + 20 * (new_X[:, 2] - 0.5) ** 2# 将新数据加入训练集X_train = np.vstack([X_train, new_X])y_train = np.concatenate([y_train, new_y])# 重新训练模型model.fit(X_train, y_train)# 评估更新后的模型updated_test_pred = model.predict(X_test)print(f"更新后模型 - 测试集RMSE: {np.sqrt(mean_squared_error(y_test, updated_test_pred)):.3f}")print(f"本轮最佳突变体预测活性: {predicted_scores[top_indices].max():.3f}, 实测活性: {new_y.max():.3f}")# 迭代# 1 / 5# 更新后模型 - 测试集RMSE: 1.821# 本轮最佳突变体预测活性: 10.322, 实测活性: 11.278# # 迭代# 2 / 5# 更新后模型 - 测试集RMSE: 1.823# 本轮最佳突变体预测活性: 10.251, 实测活性: 10.500# # 迭代# 3 / 5# 更新后模型 - 测试集RMSE: 1.831# 本轮最佳突变体预测活性: 11.315, 实测活性: 13.052# # 迭代# 4 / 5# 更新后模型 - 测试集RMSE: 1.799# 本轮最佳突变体预测活性: 11.337, 实测活性: 11.327# # 迭代# 5 / 5# 更新后模型 - 测试集RMSE: 1.789# 本轮最佳突变体预测活性: 10.441, 实测活性: 13.713
实际应用注意事项
- 特征工程:实际应用中需要设计好的特征表示方法,如one-hot编码、物理化学性质、结构特征等
- 模型选择:除随机森林外,还可尝试Gaussian过程、神经网络等
- 实验设计:需要考虑探索-开发的平衡,避免过早收敛
- 数据质量:实验测量数据的准确性和一致性至关重要