机器学习-12-sklearn案例03-flask对外提供服务

news2024/11/28 4:36:39

整体思路

训练一个模型,把模型保存
写一个基于flask的web服务,在web运行时加载模型,并在对应的接口调用模型进行预测并返回
使用curl进行测试,测试通过
再创建一个html页面,接受参数输入,并返回。

目录结构

在这里插入图片描述

训练一个svm模型

#导入数据集模块
from sklearn import datasets


#分别加载iris和digits数据集
iris = datasets.load_iris()  #鸢尾花数据集
# print(dir(datasets))
# print(iris_dataset.keys())
# dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'])

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(iris.data,iris.target,test_size=0.4,random_state=0)
print("iris.data[0:5]:\n",iris.data[0:5])
print("iris.target[0:5]:\n",iris.target[0:5])
print("iris.data.shape:",iris.data.shape)
print("iris.target.shape:",iris.target.shape)
print("X_train.shape:",X_train.shape)
print("y_train.shape:",y_train.shape)
print("X_test.shape:",X_test.shape)
print("y_test.shape:",y_test.shape)

# 第二步使用sklearn模型的选择
from sklearn import svm
svc = svm.SVC(gamma='auto')

#第三步使用sklearn模型的训练
svc.fit(X_train, y_train)

# 第四步使用sklearn进行模型预测
print(svc.predict([[5.84,4.4,6.9,2.5]]))

#第五步机器学习评测的指标
#机器学习库sklearn中,我们使用metrics方法实现:
import numpy as np
from sklearn.metrics import accuracy_score
print("y_test:\n",y_test)
y_pred = svc.predict(X_test)
print("y_pred:\n",y_pred)
print(accuracy_score(y_test, y_pred))

#第五步机器学习评测方法:交叉验证 (Cross validation)
#机器学习库sklearn中,我们使用cross_val_score方法实现:
from sklearn.model_selection import cross_val_score
scores = cross_val_score(svc, iris.data, iris.target, cv=5)
print(scores)


#第六步机器学习:模型的保存
#机器学习库sklearn中,我们使用joblib方法实现:
# from sklearn.externals import joblib
import joblib
joblib.dump(svc, 'filename.pkl') 
svc1 = joblib.load('filename.pkl') 
#测试读取后的Model
print(svc1.score(X_test, y_test))

运行如下:

iris.data[0:5]:
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
[4.7 3.2 1.3 0.2]
[4.6 3.1 1.5 0.2]
[5. 3.6 1.4 0.2]]
iris.target[0:5]:
[0 0 0 0 0]
iris.data.shape: (150, 4)
iris.target.shape: (150,)
X_train.shape: (90, 4)
y_train.shape: (90,)
X_test.shape: (60, 4)
y_test.shape: (60,)
[2]
y_test:
[2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0 2 1 0 2 2 1 0
1 1 1 2 0 2 0 0 1 2 2 2 2 1 2 1 1 2 2 2 2 1 2]
y_pred:
[2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 1 0 0 1 1 0 2 1 0 2 2 1 0
2 1 1 2 0 2 0 0 1 2 2 2 2 1 2 1 1 2 2 1 2 1 2]
0.95
[0.96666667 1. 0.96666667 0.96666667 1. ]
0.95

此时已经生成好了filename.pkl模型文件

写一个appweb.py

import json
from flask import Flask, jsonify, render_template,request

app = Flask(__name__)

# 运行时,先加载文件
from sklearn import svm
import joblib
svc1 = joblib.load('filename.pkl') 
print(svc1.predict([[5.84,4.4,6.9,2.5]]))

# 访问 127.0.0.1:5000/test 返回 index1.html
@app.route("/test")
def my_echart():
    return render_template("index.html")

app.config['JSON_AS_ASCII'] = False
 
# 随便定义个json字典
dic={}
@app.route('/jsonify',methods=["GET","POST"])
def jsonifys():
    print("============787878787==================")
    print(request)
    param1 = request.json.get("content1")
    param2 = request.json.get("content2")
    param3 = request.json.get("content3")
    param4 = request.json.get("content4")

    print("param1, param2, param3, param4",param1, param2, param3, param4)

    dic['result']=svc1.predict([[param1, param2, param3, param4]]).tolist()
    print("resutlt",dic)
    return jsonify(dic)


# app.run(host, port, debug, options)
app.run("127.0.0.1",5000,debug=True,)

输出为:
在这里插入图片描述

在这里插入图片描述

curl在线测试

curl -X POST http://127.0.0.1:5000/jsonify -H "Content-Type: application/json" \
  -d "{\"content1\":\"5.1\",\"content2\":\"3.5\",\"content3\":\"1.4\",\"content4\":\"0.2\"}"

输出为:
在这里插入图片描述

curl -X POST http://127.0.0.1:5000/jsonify -H "Content-Type: application/json" \
  -d "{\"content1\":\"5.7\",\"content2\":\"2.8\",\"content3\":\"4.5\",\"content4\":\"1.3\"}"

输出为:
在这里插入图片描述

curl -X POST http://127.0.0.1:5000/jsonify -H "Content-Type: application/json" \
  -d "{\"content1\":\"6.7\",\"content2\":\"3\",\"content3\":\"5.2\",\"content4\":\"2.3\"}"

输出为:
在这里插入图片描述

创建一个index.html

index.html位于templates下

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Fetch JSON Example</title>
<script>
  function sendData() {
    // 获取表单输入的值
    const input1 = document.getElementById('input1').value;
    const input2 = document.getElementById('input2').value;
    const input3 = document.getElementById('input3').value;
    const input4 = document.getElementById('input4').value;

    // 构造要发送的数据
    const data = {
      content1: input1,
      content2: input2,
      content3: input3,
      content4: input4
    };

    // 使用fetch发送POST请求
    fetch('http://127.0.0.1:5000/jsonify', { // 替换 'your-server-endpoint' 为你的服务器接收数据的URL
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(data), // 将数据对象转换为JSON字符串
    })
    .then(response => response.json()) // 解析返回的JSON数据
    .then(data => {
        console.log('Success:', data);
      // 在结果栏中显示返回的JSON数据
      document.getElementById('result').textContent = JSON.stringify(data, null, 2);
    })
    .catch((error) => {
      console.error('Error:', error);
    });
  }
</script>
</head>
<body>

<h2>输入数据</h2>
<input type="text" id="input1" placeholder="内容1">

<input type="text" id="input2" placeholder="内容2">

<input type="text" id="input3" placeholder="内容3">

<input type="text" id="input4" placeholder="内容4">

<button onclick="sendData()">发送数据</button>

<h2>结果显示</h2>
<pre id="result"></pre> <!-- 用于显示结果的区域 -->

</body>
</html>

在这里插入图片描述

运行测试

输入

http://127.0.0.1:5000/test

返回indexl.html页面
在这里插入图片描述

输入如下测试用例

0类别
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
[4.7 3.2 1.3 0.2]
[4.6 3.1 1.5 0.2]
[5. 3.6 1.4 0.2]]
在这里插入图片描述

1类别
[[5.7 2.8 4.5 1.3]
[6.3 3.3 4.7 1.6]
[4.9 2.4 3.3 1. ]
[6.6 2.9 4.6 1.3]
[5.2 2.7 3.9 1.4]]
在这里插入图片描述

2类别
[[6.7 3. 5.2 2.3]
[6.3 2.5 5. 1.9]
[6.5 3. 5.2 2. ]
[6.2 3.4 5.4 2.3]
[5.9 3. 5.1 1.8]]
在这里插入图片描述

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

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

相关文章

Go 单元测试完全指南(一)- 基本测试流程

为什么写单元测试&#xff1f; 关于测试&#xff0c;有一张很经典的图&#xff0c;如下&#xff1a; 说明&#xff1a; 测试类型成本速度频率E2E 测试高慢低集成测试中中中单元测试低快高 也就是说&#xff0c;单元测试是最快、最便宜的测试方式。这不难理解&#xff0c;单元…

人形机器人大热,优必选、傅利叶智能的春天还有多远?

配图来自Canva可画 进入2024年以来&#xff0c;机器人领域仍然十分热闹。前脚&#xff0c;斯坦福大学华人团队开源的既会做家务、又会煎蛋煮饭的MobileALOHA机器人&#xff0c;在全网刷屏&#xff0c;让不少人直呼“机器人养老有望”&#xff1b;后脚&#xff0c;马斯克就发了…

ERP系统:驱动企业高效、准确发展的核心引擎

企业资源规划&#xff08;ERP&#xff09;系统作为大型组织内部不同计算机系统的桥梁&#xff0c;发挥着至关重要的作用。在没有ERP系统的情况下&#xff0c;各部门可能各自拥有一套为其特定任务定制的系统&#xff0c;但这些系统之间是相互孤立的。而引入ERP软件后&#xff0c…

【STM32 |程序实测】LED灯闪烁、LED灯流水线、蜂鸣器

LED闪烁&LED流水灯&蜂鸣器的面包板接线图&#xff0c;及对应程序示例 LED闪烁 面包板接线图如下 开启APB2时钟&#xff0c;并且在GPIOA上进行配置&#xff0c;推挽输出&#xff0c;引脚A0&#xff0c;50HZ速度 #include "stm32f10x.h" /…

如何在Springboot项目的Mapper中增加一个新的sql语句

在做项目的过程中&#xff0c;我发现有的时候需要用到一些不在springboot的Mapper中的Sql语句&#xff0c;那么应该如何进行操作呐&#xff1f;&#xff1f; 平常我们创建springbootmybatisPlus项目的时候是这样创建的&#xff1a;&#xff1a; 1、创建实体类 2、创建Mappe…

OBS插件--自定义着色器

自定义着色器 自定义着色器是一个滤镜插件&#xff0c;可以用于源和场景。插件自带一百多款滤镜效果&#xff0c;支持自己编写效果代码。 下面截图演示下操作步骤&#xff1a; 首先&#xff0c;打开 OBS直播助手 在插件中心左侧导航栏&#xff0c;选择 滤镜 项&#xff0c;然…

【快讯】山东省第四批软件产业高质量发展重点项目开始申报

为加快落实《山东省高端软件“铸魂”工程实施方案&#xff08;2023-2025&#xff09;》&#xff0c;提高软件产业规模能级&#xff0c;提升关键软件技术创新和供给能力&#xff0c;塑强数字经济发展核心竞争力&#xff0c;确定开展第四批软件产业高质量发展重点项目申报工作&am…

docker-compose集成elasticsearch7.17.14+kibana7.17.14

1.docker和compose版本必须要高 2.准备ik分词器&#xff08;elasticsearch-analysis-ik-7.17.14&#xff09;&#xff0c;下面会用到 https://github.com/infinilabs/analysis-ik/releases?page2 3.配置es-compose.yml&#xff08;切记映射容器内路径不能更改,es和kibana服务…

【文化课学习笔记】【物理】功与能

【物理】功与能 功 基础概念 定义 一个物体在力的作用下&#xff0c;沿力的方向&#xff0c;通过一段距离(位移)&#xff0c;则称这个力做了功。 公式 功的定义式&#xff1a; \[W Fx \] 这里的 \(x\) 指的是物体沿力的方向上发生的位移。由于力 \(F\) 和位移 \(x\) 都是矢量&…

无人机+人工智能:多智能体,智能蜂群技术详解

无人机与人工智能的结合&#xff0c;特别是在多智能体和智能蜂群技术方面&#xff0c;已经成为当今科技领域的前沿。这种技术的核心在于利用人工智能的决策和学习能力&#xff0c;结合无人机的机动性和传感器能力&#xff0c;实现一种高度协同、自主、智能的作战或任务执行方式…

APScheduler定时器使用【重写SQLAlchemyJobStore版】:django中使用apscheduler,使用mysql做存储后端

一、环境配置 python3.8.10 包&#xff1a; APScheduler3.10.4 Django3.2.7 djangorestframework3.15.1 SQLAlchemy2.0.29 PyMySQL1.1.0 项目目录情况 gs_scheduler 应用 commands &#xff1a; 主要用来自定义命令&#xff0c;python manage.py crontab schedulers&#…

利用BACnet分布式IO控制器优化Niagara楼宇自动化系统

在智能建筑领域&#xff0c;随着物联网技术的飞速发展&#xff0c;如何实现高效、灵活且安全的楼宇自动化控制成为了行业关注的焦点。BACnet IP分布式远程I/O模块&#xff0c;作为这一领域的创新成果&#xff0c;正逐渐成为连接智能建筑各子系统的关键桥梁&#xff0c;尤其在与…

黏土滤镜制作方法:探索黏土特效制作的魅力

在数字时代&#xff0c;图像处理已经成为我们生活的一部分&#xff0c;无论是社交媒体上的照片分享&#xff0c;还是专业设计领域的创作&#xff0c;都离不开对图像的精心处理。而黏土滤镜&#xff0c;作为一种独特而富有艺术感的图像处理效果&#xff0c;受到了越来越多人的喜…

ArcGIS如何计算地级市间的距离

一、数据准备 加载配套实验数据包中的地级市和行政区划矢量数据(订阅专栏后,从私信查收数据),如下图所示: 二、计算距离 1. 计算邻近表 ArcGIS提供了计算点和另外点之间距离的工具:分析工具→邻域分析→生成临近表。 计算一个或多个要素类或图层中的要素间距离和其他邻…

AI写的论文AI疑似度太高怎么办?教你一招降低aigc痕迹

随着 AI 技术迅猛发展&#xff0c;各种AI辅助论文写作的工具层出不穷&#xff01; 为了防止有人利用AI工具进行论文代写&#xff0c;在最新的学位法中已经明确规定“已经获得学位者&#xff0c;在获得该学位过程中如有人工智能代写等学术不端行为&#xff0c;经学位评定委员会…

Docker 怎么将映射出的路径设置为非root用户权限

在Docker中&#xff0c;容器的根文件系统默认是由root用户拥有的。如果想要在映射到宿主机的路径时设置为非root用户权限&#xff0c;可以通过以下几种方式来实现&#xff1a; 1. 使用具有特定UID和GID的非root用户运行容器&#xff1a; 在运行容器时&#xff0c;你可以使用-u…

huggingface-cli + hf_transfer 加速大模型下载

huggingface-cli hf_transfer 加速大模型下载 如果用的是autodl的话&#xff0c;可以直接开学术加速用 lfs 下也挺快 pip install -U huggingface_hub设置环境变量 vim .bashrcexport HF_ENDPOINThttps://hf-mirror.comsource ~/.bashrc下载模型&#xff1a; huggingface-cl…

H5 css动画效果

你可以使用 CSS 动画来实现这个效果。下面是一个简单的示例代码&#xff0c;展示了如何使用 CSS 中的关键帧动画来放大然后缩小一张图片&#xff0c;并使动画循环播放&#xff1a; html <!DOCTYPE html> <html lang"en"><head><meta charset&qu…

Numpy的数组操作

文章目录 数组的创建创建全0的二维数组a(3,3)全1的二维数组b&#xff08;3,4&#xff09;随机数二维数数组c&#xff08;2,3&#xff09;效果截图 数组的属性查看b数组的维度查看b数组元素的个数效果截图 数组的维度操作将数组c的行变列&#xff0c;返回最后一个元素返回数组c第…

Linux中的日志系统简介

在的Linux系统上使用的日志系统一般为rsyslogd。rsyslogd守护进程既能接收用户进程输出的日志&#xff0c;又能接收内核日志。用户进程是通过调用syslog函数生成系统日志的。该函数将日志输出到一个UNIX本地域socket类型&#xff08;AF_UNIX&#xff09;的文件/dev/log中&#…