Streamlit学习实战教程级,一个交互式的机器学习实验平台!

GitHub,一个交互式的机器学习实验平台!

powershell 复制代码
git clone https://github.com/patrickloeber/streamlit-demo
pip install -r requirements.txt
streamlit run main.py

用户可以像玩游戏一样,在浏览器里随意切换数据集、切换分类器、调整模型参数,然后立刻看到准确率和数据在二维空间的可视化散点图。

短短 80 多行代码,就做出了一个小型的"机器学习模型对比工具",特别适合教学、演示或快速实验。太强大了!

1. 开头导入库

python 复制代码
import streamlit as st 
import numpy as np 
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
  • 导入 Streamlit(做网页)、NumPy(处理数字)、Matplotlib(画图)
  • 从 scikit-learn(sklearn)导入:
    • 三个经典数据集
    • 三个常用分类器:SVM、KNN、随机森林
    • 工具:数据拆分、PCA降维、准确率计算

2. 页面标题和说明

python 复制代码
st.title('Streamlit 例子')
st.write(""" # 探索不同的分类器和数据集 ... """)
  • 大标题 + 一段说明文字,告诉用户:你可以试不同数据集和分类器,看哪个最好!

侧边栏:让用户选择数据集和分类器(核心交互!)

python 复制代码
dataset_name = st.sidebar.selectbox('选择数据集', ('Iris', 'Breast Cancer', 'Wine'))
classifier_name = st.sidebar.selectbox('选择分类器', ('KNN', 'SVM', 'Random Forest'))
  • 所有选择都放在左侧侧边栏(sidebar),界面更整洁。
  • 用户可以选三个经典数据集:
    • Iris(鸢尾花,简单经典)
    • Breast Cancer(乳腺癌诊断)
    • Wine(葡萄酒分类)
  • 可以选三个分类器:KNN、SVM、随机森林

4. 加载用户选择的数据集

python 复制代码
def get_dataset(name):
    if name == 'Iris': data = datasets.load_iris()
    elif name == 'Wine': data = datasets.load_wine()
    else: data = datasets.load_breast_cancer()
    X = data.data    # 特征(输入)
    y = data.target  # 标签(输出:类别)
    return X, y

X, y = get_dataset(dataset_name)
  • 根据用户选择,加载对应数据。
  • 显示数据集形状(多少样本、多少特征)和类别数量。

5. 侧边栏:根据分类器显示不同的参数调节滑块

python 复制代码
def add_parameter_ui(clf_name):
    params = dict()
    if clf_name == 'SVM':
        C = st.sidebar.slider('C', 0.01, 10.0)   # SVM 的正则化参数
        params['C'] = C
    elif clf_name == 'KNN':
        K = st.sidebar.slider('K', 1, 15)         # 邻居数量
        params['K'] = K
    else:  # Random Forest
        max_depth = st.sidebar.slider('max_depth', 2, 15)
        n_estimators = st.sidebar.slider('n_estimators', 1, 100)
        params['max_depth'] = max_depth
        params['n_estimators'] = n_estimators
    return params
  • 超级聪明的一招!根据你选的分类器,自动在侧边栏显示对应的可调参数:
    • SVM → 调 C(控制模型复杂度)
    • KNN → 调 K(邻居数)
    • 随机森林 → 调树深度和树的数量

6. 根据选择和参数创建分类器模型

python 复制代码
def get_classifier(clf_name, params):
    if clf_name == 'SVM':
        clf = SVC(C=params['C'])
    elif clf_name == 'KNN':
        clf = KNeighborsClassifier(n_neighbors=params['K'])
    else:
        clf = RandomForestClassifier(n_estimators=..., max_depth=..., random_state=1234)
    return clf

clf = get_classifier(classifier_name, params)
  • 用用户调好的参数,实例化对应的模型。

7. 训练 + 测试 + 计算准确率

python 复制代码
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1234)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
acc = accuracy_score(y_test, y_pred)
st.write(f'Classifier = {classifier_name}')
st.write(f'Accuracy =', acc)
  • 把数据分成训练集(80%)和测试集(20%)
  • 用训练集训练模型
  • 用测试集预测
  • 计算准确率并显示出来
    • → 你调参数的时候,准确率会实时变化!
python 复制代码
pca = PCA(2)
X_projected = pca.fit_transform(X)

x1 = X_projected[:, 0]
x2 = X_projected[:, 1]

fig = plt.figure()
plt.scatter(x1, x2, c=y, alpha=0.8, cmap='viridis')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.colorbar()

st.pyplot(fig)
  • 因为原始数据可能是高维的(比如 Wine 有 13 个特征),人眼看不了。
  • 用 PCA(主成分分析)把所有特征压缩成 2 个主成分。
  • 画散点图:横轴是第一主成分,纵轴是第二主成分,颜色表示不同类别。
  • 颜色条显示类别对应关系。
  • 最后用 st.pyplot(fig) 显示这张图。

你运行后会看到什么样子?

启动命令:streamlit run main.py

浏览器里会出现一个漂亮的网页:

  • 左边侧边栏:

    • 选数据集
    • 选分类器
    • 对应的参数滑块(自动切换!)
  • 主页面:

    • 显示当前数据集信息(形状、类别数)
    • 显示当前分类器和实时准确率
    • 一张彩色的散点图,展示数据在二维空间的分布(不同类别用不同颜色)

你随便调滑块、换模型、换数据集,所有结果立刻刷新,完全不用重启!

这个应用牛在哪儿?

  • 零前端代码,全 Python 实现
  • 高度交互:用户可以像玩玩具一样实验机器学习
  • 实时反馈:调参数马上看到准确率变化
  • 教育价值极高:特别适合初学者理解"不同模型在不同数据上的表现"

总之,这个例子已经是非常优秀的 Streamlit + 机器学习结合案例了!你学到这里,已经能做出真正有用的数据应用了!

感谢老马的grok,学再多不如自己动手实践。

相关推荐
程序员水自流2 小时前
【AI大模型第9集】Function Calling,让AI大模型连接外部世界
java·人工智能·llm
小徐Chao努力2 小时前
【Langchain4j-Java AI开发】06-工具与函数调用
java·人工智能·python
xiaoxiaoxiaolll2 小时前
《Advanced Materials》基于MXene的复合纤维实现智能纺织品多模态功能集成
学习
db_murphy2 小时前
时事篇 | Manus收购
人工智能
攻城狮7号2 小时前
阶跃星辰开源NextStep-1.1图像模型:告别“鬼影”与“马赛克”?
人工智能·ai图像生成·nextstep-1.1·阶跃星辰开源模型·图像模型
_codemonster2 小时前
BERT中的padding操作
人工智能·深度学习·bert
笙枫2 小时前
基于AI Agent框架下的能源优化调度方案和实践 | 架构设计
人工智能·能源
杭州泽沃电子科技有限公司3 小时前
面对风霜雨雪雷电:看在线监测如何为架空线路筑牢安全网
运维·人工智能·在线监测·智能监测
小真zzz3 小时前
Nano Banana Pro与Banana系产品全面解析,深度集成Nano Banana Pro的编辑能力标杆
人工智能·ai·powerpoint·ppt·nano banana pro