11.【机器学习】十大算法之一随机森林算法原理讲解

news2024/11/23 23:28:02

【机器学习】十大算法之一随机森林算法原理讲解

  • 一·摘要
  • 二·个人简介
  • 三·什么是随机森林?
    • 3.1 决策树
    • 3.2 集成方法
      • 3.2.1 Bagging方法
      • 3.2.2 Boosting方法
    • 3.3 随机森林算法
    • 3.4 随机的含义
  • 四·案例演示一
    • 4.1 利用随机森林进行特征选择,然后使用SVR进行训练
    • 4.2 利用SVR进行训练
  • 五·案例演示二
    • 5.1 预测隐形眼镜的类型

一·摘要

在这里插入图片描述
随机森林是一种集成学习方法,它通过构建多个决策树来进行分类或回归问题。这种方法的核心思想是利用多个决策树的预测结果,通过投票或平均的方式来提高整体模型的准确性和鲁棒性。随机森林中的“随机”体现在两个方面:首先,每棵树在训练时,从原始数据集中随机选择一部分数据点作为训练集;其次,在每棵树的每个分裂节点上,只考虑一部分特征,而不是所有特征。

这种方法的优点在于它能够处理高维数据,并且对特征的缺失值和异常值具有较好的容忍性。此外,随机森林还具有很好的抗过拟合能力,因为它通过集成多个模型来减少单一模型可能存在的过拟合问题。随机森林的另一个显著特点是它能够评估特征的重要性,这有助于理解数据中哪些特征对预测结果影响最大。

二·个人简介

🏘️🏘️个人主页:以山河作礼。
🎖️🎖️:Python领域新星创作者,CSDN实力新星认证,CSDN内容合伙人,阿里云社区专家博主,新星计划导师,在职数据分析师。

💕💕悲索之人烈焰加身,堕落者不可饶恕。永恒燃烧的羽翼,带我脱离凡间的沉沦。

在这里插入图片描述

🐘 希望大家能持续支持,共同向前迈进!😁
如果您觉得文章有价值,
欢迎留言💬,点赞👍,收藏🔖并关注我们➕🤝。
🪐💫💫💫💫💫💫💫热门专栏💫💫💫💫💫💫💫🪐
类型专栏
Python基础Python基础入门—详解版
Python进阶Python基础入门—模块版
Python高级Python网络爬虫从入门到精通🔥🔥🔥
Web全栈开发Django基础入门
Web全栈开发HTML与CSS基础入门
Web全栈开发JavaScript基础入门
Python数据分析Python数据分析项目🔥🔥
机器学习机器学习算法🔥🔥
人工智能人工智能

三·什么是随机森林?

随机森林是一种强大的机器学习算法,属于集成学习方法的一种,由Leo Breiman在2001年提出。它通过构建大量决策树来进行分类或回归任务,并通过聚合这些树的预测结果来提高整体模型的准确性和鲁棒性。随机森林的"随机"体现在两个关键方面:一是在每棵树的训练过程中,从原始训练数据集中随机选择一部分数据点,即通过自助采样(bootstrap sampling)形成不同的数据子集;二是在每棵树的每个分裂节点上,并不是考虑所有可能的特征,而是随机选择一部分特征进行最佳分裂点的搜索。
在这里插入图片描述

3.1 决策树

决策树是一种直观且易于理解的监督学习算法,用于分类和回归任务。它通过一系列的问题将数据分割成不同的分支,最终达到预测结果。决策树的构建过程开始于选择一个特征,并基于该特征的值将数据集分割成两个子集。这个过程递归地在每个子集上重复,直到满足停止条件,如达到最大深度、所有数据点属于同一类别或没有更多的特征可以用于分割。每个分割点的选择都是基于某种标准,如信息增益、基尼不纯度或熵,以确保每次分割都能最大化类别的分离度。

决策树的一个关键优势是其模型的可解释性,因为树的结构清晰地展示了特征与目标变量之间的关系。用户可以很容易地追踪从根节点到叶节点的路径,理解每个决策点的逻辑。然而,决策树也有一些局限性,如容易过拟合,特别是当树变得非常深和复杂时。为了解决这个问题,常用的方法是剪枝,即通过移除一些分支来简化树的结构,从而减少模型的复杂度和过拟合的风险。
在这里插入图片描述

3.2 集成方法

集成方法是一种机器学习技术,它通过结合多个学习算法来解决单一模型难以解决的问题,从而提高整体模型的性能。这种方法的核心思想是"众人拾柴火焰高",即多个模型的预测结果通过某种方式结合起来,往往比单一模型的预测结果更加准确和稳定。
在这里插入图片描述

集成方法通常分为两大类:bagging(自举汇聚法)和boosting(提升法)。

3.2.1 Bagging方法

Bagging方法,全称为Bootstrap Aggregating,即自举汇聚法,是一种用于提高模型性能的集成学习技术。它由Leo Breiman在1996年提出,主要用于减少模型的方差,提高预测的准确性和稳定性。
在这里插入图片描述

Bagging的核心思想是通过自助采样(bootstrap sampling)从原始数据集中抽取多个小规模的训练数据集。每个小数据集的大小通常与原始数据集相同,但允许有重复的样本。然后,在每个小数据集上独立地训练一个基学习器,这些基学习器通常是相同的模型,例如决策树。由于每个基学习器都是在不同的数据子集上训练的,因此它们之间具有一定的独立性。

在训练完成后,Bagging方法通过聚合所有基学习器的预测结果来得到最终的预测。对于分类问题,通常采用投票机制,即选择得票最多的类别作为最终预测结果;对于回归问题,则通常采用平均值,即计算所有基学习器预测结果的平均值作为最终预测。

Bagging方法的优点在于它能够减少模型的方差,提高模型的泛化能力。由于每个基学习器都是在不同的数据子集上训练的,因此它们不太可能同时过拟合到训练数据中的噪声和异常值。此外,Bagging方法还能够提高模型的鲁棒性,即使某些基学习器表现不佳,其他基学习器仍然可以提供准确的预测。

3.2.2 Boosting方法

Boosting方法是一种迭代的集成学习技术,旨在通过逐步构建弱学习器并关注前一轮学习器的错误来提高整体模型的性能。这种方法的核心思想是,通过一系列简单的模型,如决策树桩,逐步纠正前一轮模型的不足,最终构建出一个强学习器。

Boosting的工作原理是从一个初始模型开始,然后对那些被初始模型错误分类的样本增加权重。在下一轮迭代中,新的模型将更加关注这些被错误分类的样本,尝试纠正这些错误。这个过程会重复进行,每一轮都会生成一个新的弱学习器,并且每个新模型都试图纠正前一个模型的不足。最终,所有模型的预测结果会通过某种方式(如加权平均)结合起来,形成一个最终的强学习器。

Boosting方法有几种不同的变体,其中最著名的包括AdaBoost、Gradient Boosting和XGBoost。AdaBoost(Adaptive Boosting)是一种经典的Boosting算法,它通过调整每个样本的权重来关注那些被前一轮模型错误分类的样本。Gradient Boosting是一种基于梯度下降的Boosting方法,它通过构建新的弱学习器来最小化损失函数的梯度。XGBoost(eXtreme Gradient Boosting)是一种高效的Gradient Boosting实现,它通过正则化项和优化的树构建算法来提高模型的性能和计算效率。

Boosting方法的优点包括:

  1. 提高准确性:通过逐步改进模型,Boosting能够显著提高预测的准确性。
  2. 减少偏差:Boosting通过关注被前一轮模型错误分类的样本来减少模型的偏差。
  3. 灵活性:Boosting可以应用于各种类型的弱学习器和损失函数。

在这里插入图片描述

3.3 随机森林算法

随机森林算法是一种集成学习方法,它通过构建大量的决策树并将它们的预测结果结合起来,以提高整体模型的准确性和鲁棒性。这种算法由Leo Breiman和Adele Cutler在2001年提出,它的核心在于"森林"中的"树木"——即多个决策树,每棵树都是独立构建的,并且在构建过程中引入随机性。

随机森林的工作流程通常包括以下几个步骤:

  1. 数据预处理:对原始数据进行清洗和标准化,以确保算法的有效运行。
  2. 自助采样:从原始数据集中通过自助采样的方式抽取多个不同的训练数据集。自助采样允许数据集中的样本重复出现,这意味着每个训练集的大小与原始数据集相同,但包含一些重复的样本。
  3. 特征随机选择:在每棵树的每个分裂节点上,随机选择一部分特征,而不是考虑所有可能的特征。这一步进一步增加了模型的多样性,并有助于减少过拟合。
  4. 决策树构建:使用每个训练数据集构建决策树,直到每个树达到其最大深度或达到其他停止条件。
  5. 预测和聚合:对于分类问题,每棵树给出一个预测,最终的预测结果是所有树预测结果的多数投票;对于回归问题,则是所有树预测结果的平均值。

随机森林算法的优点包括:

  • 高准确性:由于集成了多个决策树,随机森林通常能够提供较高的预测准确性。
  • 鲁棒性:随机森林对数据中的噪声和异常值具有较好的容忍性,因为它依赖于多个树的预测结果,而不是单个树。
  • 特征重要性评估:随机森林能够评估各个特征对预测结果的重要性,这有助于特征选择和数据理解。
  • 抗过拟合能力:通过集成多个树,随机森林减少了过拟合的风险。

在这里插入图片描述

3.4 随机的含义

随机的含义:
1, 对样本进行随机, 样本的个数是一样的.
2, 对特征进行随机,特征数是一样的.

1.数据的随机选取:
首先,从原始的数据集中采取有放回的抽样,构造子数据集,子数据集的数据是和原始数据集相同的。不同子数据集的元素可以重复,同一个子数据集中的元素也可以重复。第二,利用子数据集来构建子决策树,将这个数据放到每个子决策树中,每个子决策树输出一个结果。最后,如果有了新的数据需要通过随机森林得到分类结果,就可以通过对子决策树的判断结果的投票,得到随机森林的输出结果了。假设随机森林中有3棵子决策树,2棵子树的分类结果是A类,1棵子树的分类结果是B类,那么随机森林的分类结果就是A类。

2.待选特征的随机选取
与数据集的随机选取类似,随机森林中的子树的每一个分裂过程并未用到所有的待选特征,而是从所有的待选特征中随机选取一定的特征,之后再在随机选取的特征中选取最优的特征。这样能够使得随机森林中的决策树都能够彼此不同,提升系统的多样性,从而提升分类性能。

四·案例演示一

4.1 利用随机森林进行特征选择,然后使用SVR进行训练

1.导入相关库

import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
# url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data'
url1 = pd.read_csv(r'wine.txt', header=None)
# url1 = pd.DataFrame(url1)
# df = pd.read_csv(url1,header=None)
url1.columns = ['Class label', 'Alcohol', 'Malic acid', 'Ash',
                'Alcalinity of ash', 'Magnesium', 'Total phenols',
                'Flavanoids', 'Nonflavanoid phenols', 'Proanthocyanins',
                'Color intensity', 'Hue', 'OD280/OD315 of diluted wines', 'Proline']
 
# 重要性: [0.10658906 0.02539968 0.01391619 0.03203319 0.02207807 0.0607176
#  0.15094795 0.01464516 0.02235112 0.18248262 0.07824279 0.1319868
#  0.15860977]
# print(url1)
 
# 查看几个标签
# Class_label = np.unique(url1['Class label'])
# print(Class_label)
# 查看数据信息
# info_url = url1.info()
# print(info_url)
 
# 除去标签之外,共有13个特征,数据集的大小为178,
# 下面将数据集分为训练集和测试集
from sklearn.model_selection import train_test_split
 
print(type(url1))
# url1 = url1.values
# x = url1[:,0]
# y = url1[:,1:]
x, y = url1.iloc[:, 1:].values, url1.iloc[:, 0].values
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=0)
feat_labels = url1.columns[1:]
# n_estimators:森林中树的数量
# n_jobs  整数 可选(默认=1) 适合和预测并行运行的作业数,如果为-1,则将作业数设置为核心数
forest = RandomForestClassifier(n_estimators=10000, random_st`在这里插入代码片`ate=0, n_jobs=-1)
forest.fit(x_train, y_train)
 
# 下面对训练好的随机森林,完成重要性评估
# feature_importances_  可以调取关于特征重要程度
importances = forest.feature_importances_
print("重要性:", importances)
x_columns = url1.columns[1:]
indices = np.argsort(importances)[::-1]
x_columns_indices = []
for f in range(x_train.shape[1]):
    # 对于最后需要逆序排序,我认为是做了类似决策树回溯的取值,从叶子收敛
    # 到根,根部重要程度高于叶子。
    print("%2d) %-*s %f" % (f + 1, 30, feat_labels[indices[f]], importances[indices[f]]))
    x_columns_indices.append(feat_labels[indices[f]])
 
print(x_columns_indices)
print(x_columns.shape[0])
print(x_columns)
print(np.arange(x_columns.shape[0]))
 
# 筛选变量(选择重要性比较高的变量)
threshold = 0.15
x_selected = x_train[:, importances > threshold]
 
# 可视化
import matplotlib.pyplot as plt
 
plt.figure(figsize=(10, 6))
plt.title("红酒的数据集中各个特征的重要程度", fontsize=18)
plt.ylabel("import level", fontsize=15, rotation=90)
plt.rcParams['font.sans-serif'] = ["SimHei"]
plt.rcParams['axes.unicode_minus'] = False
for i in range(x_columns.shape[0]):
    plt.bar(i, importances[indices[i]], color='orange', align='center')
    plt.xticks(np.arange(x_columns.shape[0]), x_columns_indices, rotation=90, fontsize=15)
plt.show()

结果:

RangeIndex: 178 entries, 0 to 177
Data columns (total 14 columns):
Class label                     178 non-null int64
Alcohol                         178 non-null float64
Malic acid                      178 non-null float64
Ash                             178 non-null float64
Alcalinity of ash               178 non-null float64
Magnesium                       178 non-null int64
Total phenols                   178 non-null float64
Flavanoids                      178 non-null float64
Nonflavanoid phenols            178 non-null float64
Proanthocyanins                 178 non-null float64
Color intensity                 178 non-null float64
Hue                             178 non-null float64
OD280/OD315 of diluted wines    178 non-null float64
Proline                         178 non-null int64
dtypes: float64(11), int64(3)
memory usage: 19.5 KB
 
 
重要性: [0.10658906 0.02539968 0.01391619 0.03203319 0.02207807 0.0607176
 0.15094795 0.01464516 0.02235112 0.18248262 0.07824279 0.1319868
 0.15860977]
 
 
 1) Color intensity                0.182483
 2) Proline                        0.158610
 3) Flavanoids                     0.150948
 4) OD280/OD315 of diluted wines   0.131987
 5) Alcohol                        0.106589
 6) Hue                            0.078243
 7) Total phenols                  0.060718
 8) Alcalinity of ash              0.032033
 9) Malic acid                     0.025400
10) Proanthocyanins                0.022351
11) Magnesium                      0.022078
12) Nonflavanoid phenols           0.014645
13) Ash                            0.013916

在这里插入图片描述

4.2 利用SVR进行训练

from sklearn.svm import SVR  # SVM中的回归算法
import pandas as pd
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import numpy as np
# 数据预处理,使得数据更加有效的被模型或者评估器识别
from sklearn import preprocessing
from sklearn.externals import joblib
 
# 获取数据
origin_data = pd.read_csv('wine.txt',header=None)
X = origin_data.iloc[:,1:].values
Y = origin_data.iloc[:,0].values
print(type(Y))
# print(type(Y.values))
# 总特征  按照特征的重要性排序的所有特征
all_feature = [ 9, 12,  6, 11,  0, 10,  5,  3,  1,  8,  4,  7,  2]
# 这里我们选取前三个特征
topN_feature = all_feature[:3]
print(topN_feature)
 
# 获取重要特征的数据
data_X = X[:,topN_feature]
 
# 将每个特征值归一化到一个固定范围
# 原始数据标准化,为了加速收敛
# 最小最大规范化对原始数据进行线性变换,变换到[0,1]区间
data_X = preprocessing.MinMaxScaler().fit_transform(data_X)
 
# 利用train_test_split 进行训练集和测试集进行分开
X_train,X_test,y_train,y_test  = train_test_split(data_X,Y,test_size=0.3)
 
# 通过多种模型预测
model_svr1 = SVR(kernel='rbf',C=50,max_iter=10000)
 
 
# 训练
# model_svr1.fit(data_X,Y)
model_svr1.fit(X_train,y_train)
 
# 得分
score = model_svr1.score(X_test,y_test)
print(score)

结果:
在这里插入图片描述

五·案例演示二

5.1 预测隐形眼镜的类型

分析lenses.txt文件, 最后一列为眼镜类型

使用随机森林模型训练, 并查看哪些特征最重要feature_importances_

import warnings
warnings.filterwarnings(action='ignore')

df = pd.read_table('../data/lenses.txt',header=None)
df.head()

在这里插入图片描述

df.columns

df[0] =df[0].factorize()[0]
df[1] =df[1].factorize()[0]
df[2] =df[2].factorize()[0]
df[3] =df[3].factorize()[0]
df[4] =df[4].factorize()[0]

data = df.iloc[:,0:4]
target = df.iloc[:,-1]
target = pd.DataFrame(target)

# ensemble 集成算法
from sklearn.ensemble import RandomForestClassifier

# n_estimators=100, 100个决策树
# bootstrap=True, 是否有放回抽样
# max_samples=None,最大样本数,行数
le = RandomForestClassifier(max_samples=100,max_features=3)
le

# 拆分数据集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test  = train_test_split(data,target,test_size=0.2)


le.fit(x_train,y_train)
le.feature_importances_

le.estimators_

在这里插入图片描述

le1  = RandomForestClassifier(n_estimators=10)
le1.fit(x_train,y_train)

在这里插入图片描述

le1.estimators_

在这里插入图片描述

# for 循环遍历所有的决策树
for tree in le1.estimators_:
    y_pred = tree.predict(x_test)
    print(y_pred)

在这里插入图片描述

le1.predict(x_test)

在这里插入图片描述

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

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

相关文章

罗盘时钟屏保你见过吗?非常有特色的电脑时钟屏保

很多人都用过屏保,印象中系统自带的屏保,款式比较少,就那几款,在桌面飞来飞去的动画,基本都不怎么好看,特别有印象的就是那种泡泡屏保,这个算是比较美观的了。今天小编给大家介绍一款非常有特色…

智能制造 | 璞华科技入选「2023年苏州市智能制造优秀服务商」公式名单

刚刚,璞华科技入选「2023年苏州市智能制造优秀服务商」公示名单!再次表明,璞华科技在智能制造领域的实力得到了业界认可。 璞华科技有限公司是一家以“帮助客户实现数智化转型升级”为愿景的高科技企业,在苏州、武汉、北京、香港、…

欢度盛夏,畅享清凉——七月超市营销策略

随着七月的到来,我国大部分地区进入夏季,气温逐渐攀升,消费者们对清凉、消暑产品的需求也随之增长。在这个夏日,超市应该如何抓住这一商机,提升销售业绩呢?本文将从商品陈列、促销活动等方面,为…

【AI一键启动】ChatTTS语音合成WebUI界面一键启动,开箱即用!

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

Linux进程概念(个人笔记)

Linux进程概念 1.冯诺依曼体系结构2.操作系统(先描述,再组织)3.进程3.1查看进程的方式3.2通过系统调用获取进程标识符3.4查看进程中常见字段状态的指令3.3fork创建子进程3.3.1fork的原理 3.4进程状态3.5进程优先级3.5.1Linux内核的调度队列与…

10 种语言文本准确渲染;Mac无需联网的本地聊天应用;多模态语言模型(MLM)基准测试的引擎;Yolo DotNet版本

✨ 1: Glyph-ByT5 10 种语言文本准确渲染,将文本渲染的准确性从提高到近 90% ,同时还能实现段落渲染自动布局 Glyph-ByT5是一种定制的文本编码器,旨在实现准确的文字视觉渲染。其核心思想是通过细致的字形-文本配对数据集的微调&#xff0c…

机器学习课程复习——隐马尔可夫

不考计算题 Q:概率图有几种结构? 条件独立性的公式? 顺序结构发散结构汇总结构Q:隐马尔可夫模型理解? 概念 集合:状态集合、观测集合 序列:状态序列、观测序列

Excel如何设置自动更新的固定选项

日常工作中你是否想要某数据列设置固定选项,如人力组、财务组、综合组、业务组等,可用“数据验证”实现,如后期新增选项“党建组”,该如何快速处理? 今天刘小生分享“超级表数据验证”方式,只实现固定选项…

Shardingsphere-Proxy 5.5.0部署

Shardingsphere-Proxy 5.5.0部署 Shardingsphere系列目录:背景下载安装包Linux解压安装包修改配置文件global.yamldatabase-sharding.yaml配置没有单表情况配置有单表的情况背景 引入数据库驱动启动代理连接代理数据库Navicate工具连接MYSQL客户端连接 Shardingsphe…

PopupWindow 和 Dialog 的区别,我们应该选择哪一个呢?

引言 在安卓开发中,PopupWindow 和 Dialog 是两种常用的弹出窗口组件。虽然它们的用途类似,但在实际应用中有很多区别。本文将详细探讨 PopupWindow 和 Dialog 的区别,帮助开发者更好地选择和使用这两种组件。 什么是 PopupWindow&#xff…

MySQL学习笔记-进阶篇-SQL优化

SQL优化 插入数据 insert优化 1)批量插入 insert into tb_user values(1,Tom),(2,Cat),(3,Jerry); 2)手动提交事务 mysql 默认是自动提交事务,这样会导致频繁的开启和提交事务,影响性能 start transaction insert into tb_us…

【Linux】Xshell和Xftp简介_安装_VMware虚拟机使用

1、简介 Xshell简介 Xshell是一款强大的安全终端模拟软件支持SSH1、SSH2以及Microsoft Windows平台的TELNET协议。该软件通过互联网实现到远程主机的安全连接,并通过其创新性的设计和特色帮助用户在复杂的网络环境中高效工作。Xshell可以在Windows界面下访问远端不…

云上宝库:三大厂商对象存储安全性及差异性比较

前言 看了几家云厂商的对象存储,使用上有相似也有差异,聊聊阿里云、腾讯云、京东云三家对象存储在使用中存在的风险以及防护措施。 0x01 云存储命名 阿里云对象存储OSS(Object Storage Service),新用户免费试用三个月,存储包容…

数据分析:RT-qPCR分析及R语言绘图

介绍 转录组分析是一种用于研究细胞或组织中所有RNA分子的表达水平的高通量技术。完成转录组分析后,科学家们通常需要通过定量实时聚合酶链式反应(qRT-PCR)来验证二代测序(Next-Generation Sequencing, NGS)结果的可靠…

头歌资源库(12)找第K小数

一、 问题描述 二、算法思想 可以使用快速排序算法来解决这个问题。 首先,选择一个基准元素,通常选择序列的第一个元素。 然后,将序列中小于等于基准元素的元素放在基准元素的左边,大于基准元素的元素放在基准元素的右边。 接着…

【精品方案】产业园区数字孪生规划方案(39页PPT)

引言:随着数字化和智能化技术的快速发展,传统产业园区面临着转型升级的重大机遇。数字孪生技术作为一种将物理世界与数字世界紧密结合的创新技术,为产业园区的规划、建设和运营管理提供了全新的解决方案。本方案旨在通过构建产业园区数字孪生…

AI大模型的TTS评测

L-MTL(Large Multi-Task Learning)Models 是一种大规模多任务学习模型,通过结合 Mixture of Experts(MMoE)框架与 Transformer 模型,实现对 TTS(Text-to-Speech)系统中多个评估指标的…

spring01

id和name id只能取一个&#xff0c;name可以取多个&#xff0c;&#xff0c;&#xff0c;不同的bean&#xff0c;&#xff0c;id和name不能重复… name之间可以使用,分隔&#xff0c;也可以使用空格 分隔 <bean class"com.cj.Dog" id"dog02" name&quo…

最新AI智能聊天对话问答系统源码(详细图文搭建部署教程)+AI绘画系统(Midjourney),DALL-E3文生图,TTS语音识别输入,文档分析

一、文章前言 随着人工智能技术的持续进步&#xff0c;AI绘画已经发展成为一个日益成熟的领域。越来越多的人开始尝试使用AI绘画软件来创作艺术作品。尽管这些AI绘画软件对绘画领域产生了显著影响&#xff0c;但它们并不会完全取代画师。与传统手绘不同&#xff0c;AI绘画可以…