You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将IPython Notebook嵌入网页?Jupyter模型网页可视化求助

嘿,别担心,我来一步步帮你搞定这个事儿!作为编程新手,Flask其实是更适合你的选择——它轻量、容易上手,和Python模型的整合非常顺畅。下面是具体的步骤:

第一步:把Jupyter里的模型导出保存

首先你得把Notebook里训练好的模型存成独立文件,这样Flask服务才能调用它。推荐用joblib(比pickle更适合存机器学习模型),在你的Notebook里运行这段代码:

from joblib import dump
# 假设你的训练好的模型变量名叫model
dump(model, 'my_prediction_model.joblib')

运行后会生成一个my_prediction_model.joblib文件,把它放到后续创建的Flask项目文件夹里就行。

第二步:搭建Flask后端服务

先安装Flask,打开终端输入:

pip install flask

然后创建一个项目文件夹,结构大概是这样:

my_model_project/
├── app.py                  # Flask主程序文件
├── my_prediction_model.joblib  # 刚才导出的模型
├── templates/              # 存放前端HTML页面的文件夹
│   └── index.html

接下来写app.py的代码:

from flask import Flask, request, jsonify, render_template
from joblib import load

# 初始化Flask应用
app = Flask(__name__)
# 加载预训练的模型
model = load('my_prediction_model.joblib')

# 首页路由:返回前端可视化页面
@app.route('/')
def home_page():
    return render_template('index.html')

# 预测接口:接收前端传的特征数据,返回预测结果
@app.route('/get_prediction', methods=['POST'])
def make_prediction():
    # 获取前端传来的JSON格式特征数据
    input_data = request.get_json()
    # 提取5个特征(注意要和你模型的输入格式匹配)
    features = [
        input_data['feature1'],
        input_data['feature2'],
        input_data['feature3'],
        input_data['feature4'],
        input_data['feature5']
    ]
    # 执行预测(如果模型需要二维数组输入,就套一层[])
    prediction_result = model.predict([features])[0]
    # 返回JSON格式的预测结果
    return jsonify({'prediction': float(prediction_result)})

if __name__ == '__main__':
    # 启动服务,debug=True方便开发时自动刷新
    app.run(debug=True)
第三步:写前端HTML+JS页面(实现可视化)

templates/index.html里写代码,这里用简单的表单输入特征,再用Chart.js做基础可视化(新手友好):

<!DOCTYPE html>
<html>
<head>
    <title>模型预测可视化</title>
    <!-- 引入Chart.js用于绘制图表 -->
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
    <h1>输入5个特征获取预测结果</h1>
    <!-- 特征输入表单 -->
    <div class="feature-inputs">
        <label>特征1:</label><input type="number" id="f1" step="0.01"><br>
        <label>特征2:</label><input type="number" id="f2" step="0.01"><br>
        <label>特征3:</label><input type="number" id="f3" step="0.01"><br>
        <label>特征4:</label><input type="number" id="f4" step="0.01"><br>
        <label>特征5:</label><input type="number" id="f5" step="0.01"><br>
        <button onclick="fetchPrediction()">获取预测结果</button>
    </div>

    <!-- 预测结果展示区 -->
    <div class="result-area">
        <h3>预测值:<span id="pred-text"></span></h3>
        <!-- 用于绘制图表的画布 -->
        <canvas id="pred-chart" width="400" height="200"></canvas>
    </div>

    <script>
        function fetchPrediction() {
            // 收集输入的特征值
            const inputFeatures = {
                feature1: parseFloat(document.getElementById('f1').value),
                feature2: parseFloat(document.getElementById('f2').value),
                feature3: parseFloat(document.getElementById('f3').value),
                feature4: parseFloat(document.getElementById('f4').value),
                feature5: parseFloat(document.getElementById('f5').value)
            };

            // 向Flask后端发送请求
            fetch('/get_prediction', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify(inputFeatures)
            })
            .then(response => response.json())
            .then(data => {
                // 更新文本显示的预测结果
                document.getElementById('pred-text').textContent = data.prediction.toFixed(2);
                // 用Chart.js绘制柱状图可视化结果
                const chartCtx = document.getElementById('pred-chart').getContext('2d');
                new Chart(chartCtx, {
                    type: 'bar',
                    data: {
                        labels: ['模型预测结果'],
                        datasets: [{
                            label: '预测值',
                            data: [data.prediction],
                            backgroundColor: 'rgba(54, 162, 235, 0.6)',
                            borderColor: 'rgba(54, 162, 235, 1)',
                            borderWidth: 1
                        }]
                    },
                    options: {
                        scales: {
                            y: {
                                beginAtZero: true,
                                title: {
                                    display: true,
                                    text: '数值'
                                }
                            }
                        }
                    }
                });
            })
            .catch(error => alert('请求出错啦:' + error));
        }
    </script>
</body>
</html>
第四步:运行整个项目
  1. 打开终端,进入my_model_project文件夹
  2. 运行命令:python app.py
  3. 打开浏览器,访问http://localhost:5000,输入5个特征值后点击按钮,就能看到预测结果和可视化图表啦!
为什么选Flask而不是Django?

对于新手来说,Flask是微框架,没有太多强制的复杂结构,你可以从最核心的功能开始搭建,不用学习Django里暂时用不上的ORM、后台管理等模块。等你熟悉Web开发流程后,再考虑切换到Django也完全没问题。

小提醒
  • 如果你的模型需要对输入特征做标准化/归一化处理,记得把Notebook里用的标准化器也导出(和模型一样用joblib保存),然后在app.py里加载并对输入特征做预处理,不然预测结果可能不准
  • 开发环境用debug=True很方便,但正式部署的时候一定要关掉哦

内容的提问来源于stack exchange,提问作者user9698305

火山引擎 最新活动