当前位置: 首页 > news >正文

机器学习(1)

一、机器学习

机器学习(Machine Learning, ML)是人工智能(Artificial Intelligence, AI)的一个分支,它致力于开发能够从数据中学习并改进性能的算法和模型。机器学习的核心思想是通过数据和经验自动优化算法,而不是通过显式的编程规则。

1.1、机器学习的基本概念

  • 数据:机器学习的基础是数据。数据可以是结构化的(如数据库中的表格数据)或非结构化的(如文本、图像、音频等)。

  • 模型:模型是机器学习算法的核心,它是一个数学表示,用于从输入数据中学习并做出预测或决策。

  • 学习:学习是指模型通过数据进行训练,调整其内部参数以最小化预测误差的过程。

  • 特征:特征是数据中的变量或属性,模型使用这些特征来进行预测或分类。

  • 标签:标签是数据中的目标变量,模型通过学习特征和标签之间的关系来进行预测。

1.2、机器学习的分类

  • 监督学习
  • 半监督学习
  • 无监督学习
  • 强化学习

二、机器学习步骤

  • 收集数据:数据是机器学习的基础。
  • 准备数据:高质量的数据才能提高模型精准度。
  • 训练模型:对处理后的数据进行训练,并留存部分数据用作验证。
  • 评估模型:对模型进行验证,确定模型的精准度。
  • 提高性能:对代码和模型进行优化。

2.1、前期准备——scikit-learn的安装

执行下面的代码

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-learn

pip install scikit-learn

2.2、数据集

2.2.1、数据集的分类
  • 玩具数据集:轻量的数据集,直接在sklearn库本地,无需下载
    在这里插入图片描述
    示例:
from sklearn.datasets import load_iris # type: ignoreiris = load_iris() # type: ignore
print(iris.data)
  • 现实数据集:数据量大,需要从网络上下载
    在这里插入图片描述
from sklearn.datasets import fetch_20newsgroups #这是一个20分类的数据news = fetch_20newsgroups(data_home=None,subset='all')
print(len(news.data))
2.2.2、数据集的操作
# data 特征
# feature_names 特征描述
# target  目标
# target_names  目标描述
# DESCR 数据集的描述
# filename 下后到本地保存后的文件名
2.2.3、读取本地文件
本地csv文件
import pandas as pd # type: ignoredata = pd.read_csv('../dataset/ss.csv')
print(data)
本地ecxel文件

在读取excel文件时,需要使用openpyxl来读取,
我是用pip命令来安装的该引擎

pip install openpyxl
import pandas as pd# type: ignore# 指定使用 openpyxl 引擎来读取 Excel 文件
data = pd.read_excel('../dataset/ss.xlsx', engine='openpyxl')
# print(data)# 选择特定的列
x = data.iloc[:, [0, 1, 2]]
y = data.iloc[:, [-2]]# print(x)
print(y)
2.2.4、数据集的划分
数据集划分函数
from sklearn.model_selection import train_test_split # type: ignore
参数注释

参数
(1) *array
这里用于接收1到多个"列表、numpy数组、稀疏矩阵或padas中的DataFrame"。
(2) **options, 重要的关键字参数有:
test_size 值为0.0到1.0的小数,表示划分后测试集占的比例
random_state 值为任意整数,表示随机种子,使用相同的随机种子对相同的数据集多次划分结果是相同的。否则多半不同
strxxxx 分层划分,填y
2 返回值说明
返回值为列表list, 列表长度与形参array接收到的参数数量相关联, 形参array接收到的是什么类型,list中对应被划分出来的两部分就是什么类型

list数据数据划分
import numpy as np# type: ignore
from sklearn.model_selection import train_test_split# type: ignoreX=[[11,2,3,31,111],[12,2,3,32,112],[1,23,3,33,113],[14,2,3,34,114],[15,2,3,35,115],[16,2,3,36,116],[1,23,3,36,117],[1,23,3,316,118],[1,23,3,326,119],[1,23,3,336,120]
]
y=[1,1,1,1,1,2,2,2,2,2]
# 打印生成的数据
print("随机生成的x数据:")
print(X)
print("标签y:")
print(y)# 划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(X, y, train_size=0.8, stratify=y)# 打印划分结果
print("训练集 x_train:\n")
print(x_train)
print("测试集 x_test:\n")
print(x_test)
print("训练集标签 y_train:\n")
print(y_train)
print("测试集标签 y_test:\n")
print(y_test)
ndarray的数据集划分
from sklearn.model_selection import train_test_split# type: ignore
import numpy as np# type: ignorex = np.arange(100).reshape(50,2)
# print(x)
x_train,x_test = train_test_split(x,test_size=0.8,random_state=42)
print(x_train)
print("----------------------------------")
print(x_test)
dataFrame的数据集划分
import numpy as np# type: ignore
import pandas as pd# type: ignore
from sklearn.model_selection import train_test_split# type: ignore# 数据集的划分
data = np.arange(1,100).reshape(33, 3)
data = pd.DataFrame(data,columns=['a','b','c'])
# print(data)
x_train,x_test = train_test_split(data,test_size=0.3)
print("\n",x_train)
print("--------------------------")
print("\n",x_test)
玩具数据集划分
# 鸢尾花数据集划分
from sklearn import datasets# type: ignore
from sklearn.model_selection import train_test_split# type: ignoreiris = datasets.load_iris()
x = iris.data
y = iris.target
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=4)
print(x_train.shape)
print(x_test.shape)
print(y_train.shape)
print(y_test.shape)
print(iris.feature_names)
print(iris.target_names)
现实数据集划分

import numpy as np# type: ignorefrom sklearn.datasets import fetch_20newsgroups# type: ignore
from sklearn.model_selection import train_test_split# type: ignorenew_date = fetch_20newsgroups(data_home='../dataset/',subset='train')
# print(new_date.data[0])x_train,x_test,y_train,y_test = train_test_split(new_date.data,new_date.target,test_size=0.2,random_state=666)
print(np.array(x_train).shape)
print(np.array(x_test).shape)
print(np.array(y_train).shape)
print(np.array(y_test).shape)print(new_date.target_names)

2.3、特征工程

特征工程api
# DictVectorizer  		字典特征提取
# CountVectorizer 		文本特征提取
# TfidfVectorizer 		TF-IDF文本特征词的重要程度特征提取 
# MinMaxScaler 			归一化
# StandardScaler 		标准化
# VarianceThreshold 	底方差过滤降维
# PCA  					主成分分析降维
#转换器对象调用fit_transform()进行转换, 其中fit用于计算数据,transform进行最终转换fit_transform()可以使用fit()和transform()代替fit_transform()、fit()和transform()之间的区别1. fit()
作用: fit() 方法用于计算数据集的统计信息(如均值、方差等),以便后续的转换操作。
返回值: 无返回值,直接在对象内部存储计算结果。
适用场景: 当你需要对训练数据集进行统计信息的计算时使用。2. transform()
作用: transform() 方法使用 fit() 计算的统计信息对数据集进行转换。
返回值: 返回转换后的数据集。
适用场景: 当你需要对训练数据集或测试数据集进行相同的转换时使用。3. fit_transform()
作用: fit_transform() 方法结合了 fit() 和 transform() 的功能,先计算统计信息,然后对数据集进行转换。
返回值: 返回转换后的数据集。
适用场景: 当你需要对训练数据集进行一次性计算和转换时使用。
字典的特征提取和数据集划分
from sklearn.feature_extraction import DictVectorizer# type: ignore
from sklearn.model_selection import train_test_split# type: ignoredata_dict = [{'city': '北京', 'count':2300,'tempertrye': 41},{'city': '上海', 'count':2300,'tempertrye': 39}, {'city': '深圳', 'count':2750,'tempertrye': 30},{'city': '广州', 'count':2500,'tempertrye': 40},{'city': '杭州', 'count':2800,'tempertrye': 33},{'city': '西安', 'count':2700,'tempertrye': 28},{'city': '西安', 'count':2700,'tempertrye': 28}
]# sparse=False:表示返回完整的矩阵,True:表示返回稀疏矩阵
model = DictVectorizer(sparse=False)
data_new = model.fit_transform(data_dict)
# print(data_new)
x_train,y_train = train_test_split(data_new,test_size=0.2,random_state=666)
print(x_train)
print('------------------------------------------------------------------------------')
print(y_train)
文本特征提取

from sklearn.feature_extraction.text import CountVectorizercorpus =  ['I love machine learning.Its awesome.', 'Its a amazon book', 'Amazon is a great company']# 创建一个词频提取对象
vectorizer = CountVectorizer(stop_words=['amzzon'])
# 提取特征词频
X = vectorizer.fit_transform(corpus)print(X)print(X.toarray())
# 打印特征词频
print(vectorizer.get_feature_names_out())
CountVectorizer 中文本特征提取
中文提取需要用到库jieba

使用下面的命令进行安装

pip install jieba
import jieba
from sklearn.feature_extraction.text import CountVectorizer
# arr = list(jieba.cut("我爱北京天安门"))
# print (arr)
# str01 = ' '.join(arr)
# print (str01)
def my_cut(text):#传入没有断词的文本,用jieba分词工具转化为数据容器,然后把数据容器中的元素用空格连接起来return ' '.join(list(jieba.cut(text)))corpus = ['我爱北京天安门','我爱成都天府广场']
# 创建一个词频提取对象
vectorizer = CountVectorizer(stop_words=[])
# 提取词频
data = [my_cut(el) for el in corpus]
x = vectorizer.fit_transform(data) 
# print(x)
# print(x.toarray())
print(vectorizer.get_feature_names_out())data02 = pd.DataFrame(x.toarray(),columns=vectorizer.get_feature_names_out())
print(data02)
TfidfVectorizer TF-IDF文本特征词的重要程度特征提取
import jieba
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizerdef cut_words(text):return " ".join(list(jieba.cut(text)))data = ["教育学会会长期间,坚定支持民办教育事业!",  "扶持民办,学校发展事业","事业做出重大贡献!"]
data_new = [cut_words(v) for v in data]transfer = TfidfVectorizer(stop_words=['期间', '做出',"重大贡献"]) 
data_final = transfer.fit_transform(data_new)pd.DataFrame(data_final.toarray(), columns=transfer.get_feature_names_out())
无量纲化
MinMaxScaler 归一化
data = [[1, 2, 3, 4],[1, 2, 3, 4],[1, 2, 3, 4],[1, 2, 3, 4]
]
tran = MinMaxScaler(feature_range(1,2))
data = tran.fit_transfrom(data)
print(data)
StandardScaler 标准化
import numpy as np
from sklearn.preprocessing import StandardScaler# 创建一个示例数据集
X = np.array([[1, 2], [3, 4], [5, 6]])# 初始化 StandardScaler
scaler = StandardScaler()# 对训练数据进行 fit_transform
X_train_scaled = scaler.fit_transform(X)# 打印标准化后的训练数据
print("标准化后的训练数据:")
print(X_train_scaled)# 创建一个新的测试数据集
X_test = np.array([[7, 8], [9, 10]])# 对测试数据进行 transform
X_test_scaled = scaler.transform(X_test)# 打印标准化后的测试数据
print("标准化后的测试数据:")
print(X_test_scaled)

2.4、特征降维

VarianceThreshold 低方差过滤特征选择
# 1、获取数据,data是一个DataFrame,可以是读取的csv文件
data=pd.DataFrame([[10,11],[11,13],[11,11],[11,15],[11,91],[11,13],[11,12],[11,16]])
print("data:\n", data)   
# 2、实例化一个转换器类
transfer = VarianceThreshold(threshold=1)#0.1阈值
# 3、调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n",data_new)
PCA降维
from sklearn.dec**** import PCAdata = [[1, 2, 3, 4],[1, 2, 3, 4],[1, 2, 3, 4],[1, 2, 3, 4]
]
pac = PCA(n_com**** = 0.95)data = pca.fit_transfrom(data)print(f"降维后的数据为:{data}"}

相关文章:

机器学习(1)

一、机器学习 机器学习(Machine Learning, ML)是人工智能(Artificial Intelligence, AI)的一个分支,它致力于开发能够从数据中学习并改进性能的算法和模型。机器学习的核心思想是通过数据和经验自动优化算法&#xff…...

深入理解 Redis跳跃表 Skip List 原理|图解查询、插入

1. 简介 跳跃表 ( skip list ) 是一种有序数据结构,通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。 在 Redis 中,跳跃表是有序集合键的底层实现之一,那么这篇文章我们就来讲讲跳跃表的实现原理。 2. …...

Halcon HImage 与 Qt QImage 的相互转换(修订版)

很久以前,我写过一遍文章来介绍 HImage 和 QImage 之间的转换方法。(https://blog.csdn.net/liyuanbhu/article/details/91356988) 这个代码其实是有些问题的。因为我们知道 QImage 中的图像数据不一定是连续的,尤其是图像的宽度…...

【Golang】——Gin 框架中的模板渲染详解

Gin 框架支持动态网页开发,能够通过模板渲染结合数据生成动态页面。在这篇文章中,我们将一步步学习如何在 Gin 框架中配置模板、渲染动态数据,并结合静态资源文件创建一个功能完整的动态网站。 文章目录 1. 什么是模板渲染?1.1 概…...

CSS:导航栏三角箭头

用CSS实现导航流程图的样式。可根据自己的需求进行修改,代码精略的写了一下。 注:场景一和场景二在分辨率比较低的情况下会有一个1px的缝隙不太优雅,自行处理。有个方法是直接在每个外面包一个DIV,用动态样式设置底色。 场景一、…...

onlyoffice Command service(命令服务)使用示例

一、说明 文档在这里:https://api.onlyoffice.com/docs/docs-api/additional-api/command-service/ 命令服务提供有几个简单的接口封装。也提供了前端和后端同时操作文档的可能。 二、正文 命令服务地址:https://documentserver/coauthoring/Com…...

QSS 设置bug

问题描述: 在QWidget上add 一个QLabel,但是死活不生效 原因: c 主程序如下: QWidget* LOGO new QWidget(logo_wnd);LOGO->setFixedSize(logo_width, 41);LOGO->setObjectName("TittltLogo");QVBoxLayout* tit…...

交换排序——快速排序

交换排序——快速排序 7.7 交换排序——快速排序快速排序概念c语言的库函数qsort快速排序框架quickSort 7.7 交换排序——快速排序 快速排序概念 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法(下文简称快排),其基本思想为&a…...

nodejs入门(1):nodejs的前后端分离

一、引言 我关注nodejs还是从前几年做了的一个电力大数据展示系统开始的,当然,我肯定是很多年的计算机基础的,万变不离其宗。 现在web网站都流行所谓的前后端结构,不知不觉我也开始受到这个影响,以前都是前端直接操作…...

笔记|M芯片MAC (arm64) docker上使用 export / import / commit 构建amd64镜像

很简单的起因,我的东西最终需要跑在amd64上,但是因为mac的架构师arm64,所以直接构建好的代码是没办法跨平台运行的。直接在arm64上pull下来的docker镜像也都是arm64架构。 检查镜像架构: docker inspect 8135f475e221 | grep Arc…...

gorm框架

连接 需要下载mysql的驱动 go get gorm.io/driver/mysql go get gorm.io/gorm 约定 主键:GORM 使用一个名为ID 的字段作为每个模型的默认主键。表名:默认情况下,GORM 将结构体名称转换为 snake_case 并为表名加上复数形式。 例如&#xf…...

免费送源码:Java+Springboot+MySQL Springboot多租户博客网站的设计 计算机毕业设计原创定制

Springboot多租户博客网站的设计 摘 要 博客网站是当今网络的热点,博客技术的出现使得每个人可以零成本、零维护地创建自己的网络媒体,Blog站点所形成的网状结构促成了不同于以往社区的Blog文化,Blog技术缔造了“博客”文化。本文课题研究的“…...

【ASR技术】WhisperX安装使用

介绍 WhisperX 是一个开源的自动语音识别(ASR)项目,由 m-bain 开发。该项目基于 OpenAI 的 Whisper 模型,通过引入批量推理、强制音素对齐和语音活动检测等技术。提供快速自动语音识别(large-v2 为 70 倍实时&#xf…...

【计算机网络】协议定制

一、结构化数据传输流程 这里涉及协议定制、序列化/反序列化的知识 对于序列化和反序列化,有现成的解决方案:①json ②probuff ③xml 二、理解发送接收函数 我们调用的所有发送/接收函数,根本就不是把数据发送到网络中!本质都是…...

【SQL】mysql常用命令

为方便查询,特整理MySQL常用命令。 约定:$后为Shell环境命令,>后为MySQL命令。 1 常用命令 第一步,连接数据库。 $ mysql -u root -p # 进入MySQL bin目录后执行,回车后输入密码连接。# 常用参数&…...

阿里云引领智算集群网络架构的新一轮变革

阿里云引领智算集群网络架构的新一轮变革 云布道师 11 月 8 日~ 10 日在江苏张家港召开的 CCF ChinaNet(即中国网络大会)上,众多院士、教授和业界技术领袖齐聚一堂,畅谈网络未来的发展方向,聚焦智算集群网络的创新变…...

几何合理的分片段感知的3D分子生成 FragGen - 评测

FragGen 来源于 2024 年 3 月 25 日 预印本的文章,文章题目是 Deep Geometry Handling and Fragment-wise Molecular 3D Graph Generation, 作者是 Odin Zhang,侯廷军,浙江大学药学院。FragGen 是一个基于分子片段的 3D 分子生成模…...

Python爬虫下载新闻,Flask展现新闻(2)

上篇讲了用Python从新闻网站上下载新闻,本篇讲用Flask展现新闻。关于Flask安装网上好多教程,不赘述。下面主要讲 HTML-Flask-数据 的关系。 简洁版 如图,页面简单,主要显示新闻标题。 分页,使用最简单的分页技术&…...

监控易监测对象及指标之:全面监控华为FusionInsight服务

随着大数据技术的广泛应用,华为FusionInsight以其卓越的性能和稳定性,成为了众多企业处理和分析海量数据的首选平台。然而,为了确保FusionInsight服务的持续稳定运行,对其进行全面监控至关重要。本文基于监控易工具,对…...

SQL面试题——蚂蚁SQL面试题 会话分组问题

会话分组问题 这里的分组不是简单的分组,而是会话的分组。 比如说,进入一个网站以后,可以连续的点击很多个页面,后台会记录用户的行为日志; 如果T日上午连续点击几个页面后退出了网站,直到第二天的下午才再次进入网站,单单从时间线上来看,昨天退出的那条日志跟今天进…...

nfs服务器--RHCE

一,简介 NFS(Network File System,网络文件系统)是FreeBSD支持的文件系统中的一种,它允许网络中的计 算机(不同的计算机、不同的操作系统)之间通过TCP/IP网络共享资源,主要在unix系…...

React--》如何高效管理前端环境变量:开发与生产环境配置详解

在前端开发中,如何让项目在不同环境下表现得更为灵活与高效,是每个开发者必须面对的挑战,从开发阶段的调试到生产环境的优化,环境变量配置无疑是其中的关键。 env配置文件:通常用于管理项目的环境变量,环境…...

Javascript高级—函数柯西化

函数柯西化(经典面试题) // 实现一个add方法,使计算结果能够满足如下预期: add(1)(2)(3) 6; add(1, 2, 3)(4) 10; add(1)(2)(3)(4)(5) 15;function add() {// 第一次执行时,定义一个数组专门用来存储所有的参数var…...

Sql进阶:字段中包含CSV,如何通过Sql解析CSV成多行多列?

Sql进阶 一、问题描述二、解决思路<一>、拆成多行<二>、拆成多列 三、代码实现 一、问题描述 Oracle数据库中某个字段value是CLOB类型,存的是csv格式的数据,如下所示 classnovalue1name,age,sex,… ‘李世民’,20,‘M’,…’ ‘李治’,18,‘M’,… ‘武则天’,16…...

linux之调度管理(5)-实时调度器

一、概述 在Linux内核中&#xff0c;实时进程总是比普通进程的优先级要高&#xff0c;实时进程的调度是由Real Time Scheduler(RT调度器)来管理&#xff0c;而普通进程由CFS调度器来管理。 实时进程支持的调度策略为&#xff1a;SCHED_FIFO和SCHED_RR。 SCHED_FIFO&#xff…...

mybatis-plus: mapper-locations: “classpath*:/mapper/**/*.xml“配置!!!解释

和mybatis一样的道理&#xff01;&#xff01;&#xff01;&#xff01;如果不指定这个配置&#xff0c;通常要求 XML 映射文件和 Mapper 接口的包名和结构相同&#xff01;&#xff01;&#xff01;&#xff01; 如果没有配置 mapper-locations&#xff0c;通常文件结构应遵循…...

nacos-operator在k8s集群上部署nacos-server2.4.3版本踩坑实录

文章目录 操作步骤1. 拉取仓库代码2. 安装nacos-operator3. 安装nacos-server 坑点一坑点二nacos-ui页面访问同一集群环境下微服务连接nacos地址配置待办参考文档 操作步骤 1. 拉取仓库代码 &#xff08;这一步主要用到代码中的相关yml文件&#xff0c;稍加修改用于部署容器&…...

面试篇-项目管理

⼀、构建管理 项目为什么选择Maven构建? 选择Maven进行项目构建有以下几个主要原因&#xff1a; 1. 依赖管理&#xff1a;Maven 提供了强大的依赖管理功能&#xff0c;可以自动下载项目所需的第三方库和依赖&#xff0c;并且可以管理这些依赖的版本、范围等信息。这简化了项…...

数仓建设之Oracle常见语法学习

1. 字符串截取 select substr(AAA-BBB, 1, instr(AAA-BBB, -, -1) - 1) 值 from dual; --AAA select substr(AAA-BBB, instr(AAA-BBB, -, -1) 1) 值 from dual; --BBB2. 帆软报表有参数SQL select a.agency_code, a.agency_name, a.agency_typefrom dw.dim_ta_subred_agency…...

物联网智能技术的深入探讨与案例分析

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

盐城网站优化推广工作室/培训计划方案

服务器配置要显示器吗 内容精选换一换用户可以配置、修改和查看系统时区及NTP服务器相关信息。目前只支持使用操作系统为Linux的外部NTP服务器。通过在一台支持远程桌面的Windows系统或者Linux操作系统服务器上&#xff0c;部署客户端软件和浏览器&#xff0c;应用发布是将服务…...

学做php网站有哪些/注册网址

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼pageEncoding"utf-8"%>Insert title hereString sname request.getParameter("sname");String spwd request.getParameter("spwd");String driver "com.mysql.cj.jdbc.Driver";Stri…...

咸阳网站建设/长沙百度推广公司电话

参考原文&#xff1a;http://weblogs.asp.net/ricardoperes/archive/2012/06/07/differences-between-nhibernate-and-entity-framework.aspx转载于:https://www.cnblogs.com/jes_shaw/archive/2013/05/16/3082120.html...

那些网站可以做0首付分期手机/网络营销软文范文

讲解我们的爬虫之前&#xff0c;先概述关于爬虫的简单概念&#xff08;毕竟是零基础教程&#xff09; 爬虫 网络爬虫&#xff08;又被称为网页蜘蛛&#xff0c;网络机器人&#xff09;就是模拟浏览器发送网络请求&#xff0c;接收请求响应&#xff0c;一种按照一定的规则&…...

2015做网站前景/南宁百度seo排名价格

PK创意闹新春&#xff0c;我正在参加「春节创意投稿大赛」&#xff0c;详情请看&#xff1a;春节创意投稿大赛 新年新气象&#xff0c;别光顾着打扮自己&#xff0c;也要打扮下自己吃饭的家伙SpringBoot的banner 你在SpringBoot服务每次启动的时候是不是都能看到下面输出的日…...

安平县护栏网站建设/上海外贸seo

1.功能描述&#xff1a;支持对图片中的手写中文、手写数字进行检测和识别&#xff0c;针对不规则的手写字体进行专项优化&#xff0c;识别准确率可达90%以上2.平台接入具体接入方式比较简单&#xff0c;可以参考我的另一个帖子&#xff0c;这里就不重复了&#xff1a;http://ai…...