• 机器学习-保存模型并根据模型进行预测 python demo


    前言

      如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
      而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


    机器学习-保存模型,根据模型进行预测python demo

    这次我要保存的就是上一章的线性回归模型来进行测试:
    机器学习-线性回归模型python demo

    1. 将我们创建的线性回归模型保存到本地

    # 线性回归模型
    import numpy as np
    from sklearn.linear_model import LinearRegression
    import pickle
    
    # 样本数据
    X1 = np.array([[120, 3], [110, 3], [200, 4], [220, 4], [90, 2]])
    y1 = np.array([1500000, 1600000, 2000000, 1600000, 1100000])
    
    # 创建线性回归模型
    model = LinearRegression()
    model.fit(X1, y1)
    
    # 保存模型
    with open('model.pkl', 'wb') as f:
        pickle.dump(model, f)
    
    

    运行这个文件,它会生成一个名为model.pkl的文件,这就是我们训练好的模型。

    python LinearRegressionModel.py

    在这里插入图片描述
    下面就是我们保存的model.pkl文件
    在这里插入图片描述

    2. 利用我们保存的模型进行房价预测 demo

    # app.py
    from flask import Flask, request, jsonify, send_file
    import pickle
    import numpy as np
    import matplotlib
    import matplotlib.pyplot as plt
    import io
    import traceback
    
    app = Flask(__name__)
    matplotlib.use('Agg')
    # 设置中文字体
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体为黑体
    matplotlib.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
    
    
    # 加载模型
    # 模型数据通常不会直接用于生成图像,而是用于预测或处理数据。
    with open('model.pkl', 'rb') as f:
        model = pickle.load(f)
    
    
    @app.route('/predict', methods=['POST'])
    def predict():
        data = request.get_json(force=True)
        # 数据验证
        if 'area' not in data or 'num' not in data:
            return jsonify({'error': 'Invalid input data. Please provide "area" and "num".'}), 400
    
        try:
            new_house = np.array([[float(data['area']), float(data['num'])]])
        except ValueError:
            return jsonify({'error': 'Invalid input data. "area" and "num" must be numeric values.'}), 400
    
        new_house = np.array([[data['area'], data['num']]])
        prediction = model.predict(new_house)
        return jsonify({'prediction': prediction[0]})
    
    
    
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=8081)
    
    
    

    测试:

    在这里插入图片描述

    2. 利用我们保存的模型生成对应的预测线性图 demo

    # app.py
    from flask import Flask, request, jsonify, send_file
    import pickle
    import numpy as np
    import matplotlib
    import matplotlib.pyplot as plt
    import io
    import traceback
    
    app = Flask(__name__)
    matplotlib.use('Agg')
    # 设置中文字体
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体为黑体
    matplotlib.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
    
    
    # 加载模型
    # 模型数据通常不会直接用于生成图像,而是用于预测或处理数据。
    with open('model.pkl', 'rb') as f:
        model = pickle.load(f)
    
    @app.route('/predictUI', methods=['POST'])
    def predictUI():
        try:
            data_list = request.get_json(force=True)
    
            if not isinstance(data_list, list):
                return jsonify({'error': '输入数据必须是对象列表。'}), 400
    
            predictions = []
            areas = []
    
            for data in data_list:
                if 'area' not in data or 'num' not in data:
                    return jsonify({'error': '每个对象必须包含 "area" 和 "num" 属性。'}), 400
    
                try:
                    new_house = np.array([[float(data['area']), float(data['num'])]])
                except ValueError:
                    return jsonify({'error': '无效的输入数据。"area" 和 "num" 必须是数值。'}), 400
    
                prediction = model.predict(new_house)[0]
                predictions.append(prediction)
                areas.append(data['area'])
    
            # 生成图像
            plt.figure(figsize=(8, 6))
            plt.scatter(areas, predictions, color='blue', label='模型在给定面积下的预测房价-散点图')
            plt.plot(areas, predictions, color='red', label='模型在给定面积下的预测房价-线性图')
    
            plt.xlabel('面积 (平方米)')
            plt.ylabel('房价 (元)')
            plt.title('房价预测')
            plt.legend()
    
            # 将图像保存到内存缓冲区
            img_buf = io.BytesIO()
            plt.savefig(img_buf, format='png')
            img_buf.seek(0)
    
            # 清理图像以供下次使用
            plt.clf()
            plt.close()
    
            # 返回图像文件
            return send_file(img_buf, mimetype='image/png')
        except Exception as e:
            # 打印完整的错误堆栈跟踪信息
            traceback.print_exc()
            return jsonify({'error': '服务器内部错误'}), 500
    
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=8081)
    
    
    

    测试:
    在这里插入图片描述
    传参:

    [{
        "area": 120,
        "num": 3
    },{
        "area": 110,
        "num": 3
    },{
        "area": 95,
        "num": 2
    },{
        "area": 220,
        "num": 3
    },{
        "area": 150,
        "num": 3
    },{
        "area": 70,
        "num": 1
    }]
    

    返回:
    在这里插入图片描述

  • 相关阅读:
    网工内推 | 合资公司网工,CCNP/HCIP认证优先,朝九晚六
    图形学线性代数
    Golang基础3-函数、nil相关
    记一次uniapp扫描NFC [ISO15693]
    arch linux 安装 vsftpd 配置虚拟用户
    【Linux】安装部署Redis
    harbor镜像仓库只读模式如何解决?
    scp通过跳板机向服务器传文件的方法
    ubuntu 更新
    android 如何分析应用的内存(十五)——Visual Studio Code 调试Android应用
  • 原文地址:https://blog.csdn.net/weixin_38316697/article/details/139951723