当前位置:   article > 正文

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

机器学习-保存模型并根据模型进行预测 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)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

运行这个文件,它会生成一个名为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)


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

测试:

在这里插入图片描述

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)


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76

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

[{
    "area": 120,
    "num": 3
},{
    "area": 110,
    "num": 3
},{
    "area": 95,
    "num": 2
},{
    "area": 220,
    "num": 3
},{
    "area": 150,
    "num": 3
},{
    "area": 70,
    "num": 1
}]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号