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

news2024/11/13 3:57:56

文章目录

  • 前言
    • 机器学习-保存模型,根据模型进行预测python demo
      • 1. 将我们创建的线性回归模型保存到本地
      • 2. 利用我们保存的模型进行房价预测 demo
      • 2. 利用我们保存的模型生成对应的预测线性图 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
}]

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1861391.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LLM大语言模型-AI大模型全面介绍

简介: 大语言模型(LLM)是深度学习的产物,包含数十亿至数万亿参数,通过大规模数据训练,能处理多种自然语言任务。LLM基于Transformer架构,利用多头注意力机制处理长距离依赖,经过预训…

一个土木工程专业背景的开发者,讲述开源带给他的力量

在前段时间我们举办的“TDengine Open Day”第一季技术沙龙中,TDengine 应用研发高级工程师谭雪峰进行的“开源之路:程序员的成长与探索”主题分享获得了众多参会者的好评。谭雪峰从自身独特的职业发展经历出发,分享了自己在开源领域的种种收…

DM达梦数据库字符串函数整理

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

视觉理解与图片问答,学习如何使用 GPT-4o (GPT-4 Omni) 来理解图像

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、引言 OpenAI 最新发布的 GPT-4 Omni 模型,也被称为 GPT-4o,是一个多模态 AI 模型,旨在提供更加自然和全面的人机交互体验。 GPT-4o 与 GPT-4 Turbo 都具备视觉功…

3d中模型显示黑色给不了材质---模大狮模型网

如果3D模型显示黑色,而且无法给它添加材质,可能有以下几种原因: 一:模型没有UV贴图 UV贴图是3D模型表面纹理的一种方式,如果模型没有正确的UV贴图,渲染时可能会显示黑色。在大多数3D建模软件中&#xff0c…

Telnet远程登录(Cisco)

Telnet 基于TCP/IP协议族 远程终端协议 在Internet上远程登录 VTY(Virtual Teletype) 通过IP连接物理上的终端 实现在Internet上 登陆和配置远程目标终端 A Router>enable Router#config Router(config)#hostname A A(config)#interface gigabitEthernet 0/0 A(confi…

归并排序与快速排序总结-c++

一,归并排序 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法分治法(Divide and Conquer)的一个非常典型的应用。 作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法…

机器学习/pytorch笔记:time2vec

1 概念部分 对于给定的标量时间概念 t,Time2Vec 的表示 t2v(t)是一个大小为 k1的向量,定义如下: 其中,t2v(t)[i]是 t2v(t)的第 i 个元素,F是一个周期性激活函数,ω和 ϕ是可学习的参数。 以下是个人理解&am…

最热门的智能猫砂盆好不好用?这期统统告诉你!

身为上班族的我们,常常被工作和出差填满日程。忘记给猫咪铲屎也不是一次两次了。但我们必须意识到,不及时清理猫砂盆不仅会让猫咪感到不适,还可能引发泌尿系统感染、皮肤疾病等健康问题。为了解决这个问题,越来越多的铲屎官开始将…

JavaWeb——MySQL:navicate客户端工具简单使用

目录 1. 连接 2. 新建数据库 3. 使用数据库 4. 新建表 5.使用表 6. 导出数据库 我这里是英文版,没有进行汉化。 1. 连接 点击左上角Connection,选择MySQL,(我连接的是自己计算机上的数据库)连接名输入&#x…

Java面试题:聚簇索引和非聚簇索引

聚簇索引和非聚簇索引 聚簇索引(聚集索引) 将数据的存储和索引放在一块,索引结构的叶子节点保存了行数据 索引字段必须存在,且只能存在一个 非聚集索引(二级索引) 将数据和索引分开存储,索引结构的叶子节点关联的是对应的主键 索引字段可以存在多个 索引的选取规则 如果…

Unity2D - 碰撞检测及边界检测

1. 地面检测 1.1 地面检测的逻辑及代码 一般情况下,对于手人物进行事件处理或动作处理时,我们需要判定人物是否在地面上,这个时候最好的方式是设定地面碰撞器,只有角色在地面时才可以进行跳跃; 我们可以想象物体的重心向地面延伸…

Java的gui开发-Swing如何一键打包exe、dmg等

java的gui开发其实很方便,性能也不错,知名的idea开发工具也是java-swing开发,只是用的人少,看了我的例子3分钟就能学会,分分钟写桌面端,下面教你如何一键打包windows端exe Java-Swing-Template java的gui开…

解决SD卡被写保护问题

存储卡在使用过程中,有时会遇到写保护问题,导致无法写入或删除数据。这可能会对用户的正常使用造成困扰。MK米客方德将为您介绍几种常见的解决方法,帮助用户解除存储卡的写保护。 一、检查物理写保护开关 许多存储卡,如SD卡&…

深入剖析Tomcat(十二) 详解StandardContext

StandardContext是Context容器的一个标准实现,一般情况下,Tomcat都是使用StandardContext类来创建Context容器。前面讲过,Context容器代表了一个Web应用,Tomcat本身支持部署多个应用,相应的每个应用都会有一个Standard…

解锁小红书新玩法:中小企业出海营销的集成策略

随着全球数字化浪潮的推进,小红书作为生活方式分享平台的崛起,为中小企业提供了一个全新的营销舞台。NetFarmer,作为专注于企业数字化出海的服务商,深谙小红书的营销策略,并致力于通过HubSpot产品销售与实施&#xff0…

spring boot jar 启动报错 Zip64 archives are not supported

spring boot jar 启动报错 Zip64 archives are not supported 原因、解决方案问题为什么 spring boot 不支持 zip64zip、zip64 功能上的区别zip 的文件格式spring-boot-loader 是如何判断是否是 zip64 的? 参考 spring boot 版本是 2.1.8.RELEASE,引入以…

Chrome开发者工具学习

打开开发者工具: 可以通过在网页上点击右键并选择“检查”来打开。 或者使用快捷键Ctrl Shift I(在Windows/Linux上)或Command Option I(在Mac上)。 界面概览: 熟悉DevTools的基本面板,如“…

Mongo Express 未授权访问漏洞

【产品&&漏洞简述】 Mongo Express 是一个基于 Node.js 和 express 的开源的 MongoDB Web管理界面。Mongo Express存在未授权访问漏洞,攻击者可通过该漏洞获取用户信息或修改系统数据。 【资产测绘Query】 title"Home - Mongo Express" 【产品界…

期货交易中的几种常见心态管理

期货交易通常涉及到风险和收益的权衡,因此参与者的心态可以显著影响他们的决策和最终结果。以下是一些炒期货的常见心态: 1. 利润最大化心态:持有这种心态的投资者不关心风险,只考虑高利润。他们可能会盲目追求高回报&#xff0…