Day66——晚课 AI+科学:加速发现

作者:

早课回顾

今天早课,我们了解了AI如何改变科学研究的方式——从蛋白质折叠到材料设计,从粒子物理到气候模拟。

三个核心要点:

  • AI加速发现:传统需要数年的实验,AI可以在几小时内完成预测和筛选
  • 跨学科融合:AI不是取代科学家,而是成为科学家的”超级助手”
  • 开源生态繁荣:Python科学计算栈(NumPy、Pandas、Scikit-learn)让每个人都能参与AI+科学

今晚的实践课,我们直接上手——用开源Python工具做真实的数据分析和科学发现。


实操一:3分钟搭建科学计算环境

打开你的终端(Windows用户打开PowerShell,Mac/Linux用户打开Terminal),输入以下命令:

`bash

# 创建项目目录

mkdir ai_science && cd ai_science

# 创建虚拟环境

python3 -m venv .venv

# 激活环境(Linux/Mac)

source .venv/bin/activate

# Windows用户用:

# .venvScriptsactivate

# 安装科学计算全家桶

pip install numpy pandas matplotlib scikit-learn scipy jupyter

`

安装完成后,验证一下:

`bash

python3 -c “import numpy, pandas, sklearn; print(‘环境就绪!’)”

`

看到 环境就绪! 就说明你的AI科学实验室已经开张了。

💡 为什么用这些库?

NumPy:科学计算的”地基”,处理矩阵和数组飞快

Pandas:数据分析的”Excel加强版”,处理表格数据神器

Matplotlib:画图工具,把数据变成可视化图表

Scikit-learn:机器学习”瑞士军刀”,几十种算法开箱即用


实操二:用Pandas探索真实数据集

我们用一个真实的公开数据集——经典的鸢尾花数据集(Iris),这是机器学习入门的”Hello World”。

动手练习

创建文件 iris_analysis.py

`python

import pandas as pd

from sklearn.datasets import load_iris

# 加载鸢尾花数据集

iris = load_iris()

df = pd.DataFrame(iris.data, columns=iris.feature_names)

df[‘species’] = iris.target_names[iris.target]

# 基本信息

print(“=== 数据集概览 ===”)

print(f”样本数量: {len(df)}”)

print(f”特征数量: {len(df.columns) – 1}”)

print(f”类别: {df[‘species’].unique()}”)

# 统计描述

print(“n=== 统计摘要 ===”)

print(df.describe().round(2))

# 各类别均值对比

print(“n=== 各类别特征均值 ===”)

print(df.groupby(‘species’).mean().round(2))

`

运行:

`bash

python3 iris_analysis.py

`

你会看到150朵花、4个特征、3个品种的数据。这就是科学家用AI分析数据的第一步——先”看懂”数据。

进阶:可视化数据分布

在上面的代码末尾加上:

`python

import matplotlib.pyplot as plt

fig, axes = plt.subplots(2, 2, figsize=(10, 8))

features = iris.feature_names

for i, ax in enumerate(axes.flat):

for species in iris.target_names:

mask = df[‘species’] == species

ax.hist(df.loc[mask, features[i]], alpha=0.6, label=species)

ax.set_title(features[i])

ax.legend()

plt.tight_layout()

plt.savefig(‘iris_distribution.png’, dpi=150)

print(“图表已保存:iris_distribution.png”)

`

运行后你会得到一张2×2的直方图,清晰看到三个品种在四个特征上的分布差异。可视化是科学发现的眼睛。


实操三:用Scikit-learn做预测

科学家拿到数据后,最常见的任务就是”预测”——根据已知数据预测未知结果。

动手练习:预测鸢尾花品种

创建 predict_iris.py

`python

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

from sklearn.ensemble import RandomForestClassifier

from sklearn.metrics import accuracy_score, classification_report

# 加载数据

iris = load_iris()

X, y = iris.data, iris.target

# 拆分:80%训练,20%测试

X_train, X_test, y_train, y_test = train_test_split(

X, y, test_size=0.2, random_state=42

)

# 训练随机森林模型

model = RandomForestClassifier(n_estimators=100, random_state=42)

model.fit(X_train, y_train)

# 预测

y_pred = model.predict(X_test)

# 评估

print(f”准确率: {accuracy_score(y_test, y_pred):.1%}”)

print(“n详细报告:”)

print(classification_report(y_test, y_pred, target_names=iris.target_names))

# 特征重要性

print(“n特征重要性排序:”)

importance = sorted(zip(iris.feature_names, model.feature_importances_),

key=lambda x: x[1], reverse=True)

for name, score in importance:

print(f” {name}: {score:.3f}”)

`

运行后你会看到准确率通常在95%以上,还能看到哪些特征对预测最重要。

🔑 关键概念:我们把数据分成”训练集”和”测试集”。模型从训练集学习规律,然后在测试集上验证——就像考试一样,不能用原题来考。


实操四:完整项目——用AI发现科学规律

现在我们做一个完整的”科学发现”项目:分析糖尿病进展数据集,找出哪些因素对糖尿病进展影响最大。

项目步骤

创建 diabetes_analysis.py

`python

import pandas as pd

import numpy as np

from sklearn.datasets import load_diabetes

from sklearn.ensemble import RandomForestRegressor

from sklearn.model_selection import cross_val_score

from sklearn.inspection import permutation_importance

import matplotlib.pyplot as plt

# === 第一步:加载数据 ===

diabetes = load_diabetes()

df = pd.DataFrame(diabetes.data, columns=diabetes.feature_names)

df[‘target’] = diabetes.target

print(“=== 糖尿病数据集 ===”)

print(f”样本数: {len(df)}”)

print(f”特征: {list(df.columns[:-1])}”)

print(f”目标值范围: {df[‘target’].min():.0f} ~ {df[‘target’].max():.0f}”)

# === 第二步:特征分析 ===

print(“n=== 特征与目标的相关性 ===”)

corr = df.corr()[‘target’].drop(‘target’).sort_values(ascending=False)

for feat, r in corr.items():

bar = “█” * int(abs(r) * 30)

sign = “+” if r > 0 else “-“

print(f” {feat:>5s}: {sign}{abs(r):.3f} {bar}”)

# === 第三步:建模与验证 ===

X, y = diabetes.data, diabetes.target

model = RandomForestRegressor(n_estimators=200, random_state=42)

# 5折交叉验证

scores = cross_val_score(model, X, y, cv=5, scoring=’r2′)

print(f”n=== 模型性能(5折交叉验证)===”)

print(f”R² 分数: {scores.mean():.3f} ± {scores.std():.3f}”)

# === 第四步:特征重要性(科学发现的核心)===

model.fit(X, y)

perm_importance = permutation_importance(model, X, y, n_repeats=10, random_state=42)

fig, ax = plt.subplots(figsize=(10, 6))

sorted_idx = perm_importance.importances_mean.argsort()

ax.barh(range(len(sorted_idx)),

perm_importance.importances_mean[sorted_idx])

ax.set_yticks(range(len(sorted_idx)))

ax.set_yticklabels([diabetes.feature_names[i] for i in sorted_idx])

ax.set_xlabel(‘Permutation Importance’)

ax.set_title(‘哪些因素对糖尿病进展影响最大?’)

plt.tight_layout()

plt.savefig(‘diabetes_importance.png’, dpi=150)

print(“n图表已保存:diabetes_importance.png”)

`

运行后,你会看到:

  1. 相关性分析:哪些特征与糖尿病进展正/负相关
  2. 模型评估:R²分数告诉你模型的预测能力
  3. 特征重要性图:直观看到哪些因素最关键

🧪 这就是AI+科学的核心工作流:数据 → 探索 → 建模 → 发现规律。科学家用同样的流程,只是数据集更大、模型更复杂。


实操五:用SciPy做统计检验

科学发现需要”统计显著性”——你的发现不是偶然的,而是有统计学支撑的。

创建 stat_test.py

`python

from scipy import stats

import numpy as np

# 模拟:两种药物的降压效果

np.random.seed(42)

drug_a = np.random.normal(10, 3, 50) # A药平均降压10mmHg

drug_b = np.random.normal(13, 3, 50) # B药平均降压13mmHg

# T检验:两种药物效果是否有显著差异?

t_stat, p_value = stats.ttest_ind(drug_a, drug_b)

print(“=== 药物效果对比 ===”)

print(f”A药平均降压: {drug_a.mean():.1f} mmHg”)

print(f”B药平均降压: {drug_b.mean():.1f} mmHg”)

print(f”nt统计量: {t_stat:.3f}”)

print(f”p值: {p_value:.6f}”)

if p_value < 0.05:

print(“n结论:p < 0.05,两种药物效果有显著差异!")

else:

print(“n结论:p >= 0.05,差异不显著,可能只是随机波动。”)

# 效应量(Cohen’s d)

cohens_d = (drug_b.mean() – drug_a.mean()) / np.sqrt(

(drug_a.std()2 + drug_b.std()2) / 2

)

print(f”效应量 (Cohen’s d): {cohens_d:.2f}”)

if abs(cohens_d) > 0.8:

print(“效应量很大,实际意义也很显著!”)

`

📊 统计检验是科学的”裁判”。AI可以帮你找到模式,但统计检验告诉你这个模式是否可靠。


今日总结

三个关键收获:

  • Python科学计算栈是AI+科学的基础工具,NumPy + Pandas + Scikit-learn三件套解决80%的数据分析需求
  • 科学发现的标准流程:数据加载 → 探索分析 → 可视化 → 建模预测 → 统计验证
  • AI是加速器,不是替代品——它帮科学家更快地筛选假设、发现规律,但科学思维仍然是核心

今日行动项

  1. 运行代码:把今天5个实操的代码都跑一遍,看看输出结果
  2. 换数据集:用 sklearn.datasets 里的其他数据集(如 load_bostonload_wine)重复实操三的流程
  3. 思考你的领域:你的工作或学习中,有什么数据可以用今天的方法分析?把想法记下来

🚇 地铁深读:AI科学发现的里程碑事件

AlphaFold:解决50年难题

2020年,DeepMind的AlphaFold在CASP14竞赛中以碾压之势解决了蛋白质结构预测问题——这个难题困扰了生物学家50年。

为什么重要?

  • 蛋白质的3D结构决定其功能,了解结构就能设计药物
  • 传统方法(X射线晶体学)一个蛋白质要几个月到几年
  • AlphaFold预测一个蛋白质结构只需几分钟

开源的力量:AlphaFold2的代码完全开源,任何人都可以使用。截至2026年,AlphaFold蛋白质结构数据库已包含超过2亿个预测结构,覆盖几乎所有已知蛋白质。

GNoME:AI发现新材料

2023年,DeepMind的GNoME(Graph Networks for Materials Exploration)发现了220万种新晶体结构,其中38万种被认为具有稳定性,有望用于制造更好的电池、太阳能电池和超导体。

传统材料发现依赖”试错法”——合成一个材料,测试性能,不满意就再试。GNoME用AI预测了数十亿种可能的组合,大幅缩小了搜索范围。

你也能参与

AI+科学不只属于大公司和顶级实验室:

  • Kaggle竞赛:参加科学相关的数据科学竞赛,用AI解决真实问题
  • Zooniverse:公民科学平台,帮助天文学家、生物学家标注数据
  • NASA Open Data:NASA公开了大量科学数据集,等待你去探索
  • arXiv:每天有大量AI+科学的论文发布,关注 cs.AIq-bio 分类

推荐学习路径

  1. 入门:Coursera《Machine Learning》(Andrew Ng)
  2. 进阶:fast.ai《Practical Deep Learning for Coders》
  3. 专业:《Hands-On Machine Learning with Scikit-Learn, Keras & TensorFlow》(Aurélien Géron)

明早8点:Day67——早课 AI+教育:学习革命

今晚我们用代码体验了AI如何加速科学发现。明天早课,我们将探讨AI如何改变教育方式——个性化学习、智能辅导、自动评估,教育正在经历一场静悄悄的革命。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注