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,学再多不如自己动手实践。

相关推荐
Shockang16 小时前
AI 编码智能体生产化工程
人工智能
jay神18 小时前
深度学习确定baseline之后怎么做改进?
人工智能·深度学习·yolo·计算机视觉·分类
acrel718 小时前
安科瑞Acrel-1000变电站综合自动化系统在合肥某新材料公司35kV综合自动化项目中的应用分析
大数据·人工智能
paopaokaka_luck18 小时前
基于springboot3+vue3的企业考勤管理系统(部门树递归、Echarts图形化分析)
开发语言·spring boot·学习·echarts·mybatis·需求分析·代码规范
UWA18 小时前
隐藏视频变“常驻刺客”,VideoPlayer与“N/A”纹理该怎么查
人工智能·性能优化·音视频·memory·cpu·游戏开发
minglie118 小时前
zynq高频小数据量PS闭环 抖动时间的测量
学习
V哥AI增长18 小时前
小红书笔记在生成式AI引擎中的可见性机制解析:从抓取原理到GEO工程化实践
大数据·人工智能·笔记
long31618 小时前
MySQL 学习练习(配套 01 入门资料)
数据库·学习·mysql
ajassi200018 小时前
AI语音智能体开发日记(十二)GX8006 固件定制指南——从双唤醒词到 UART 音频传输
人工智能·ai·ai编程
大模型momo18 小时前
告别单体 Agent:多智能体设计模式(Multi-Agent Patterns)深度实战手册
人工智能·agent·multi-agent·多agent