机器学习聚类算法——BIRCH算法、DBSCAN算法、OPTICS算法

news2024/11/28 8:47:41

系列文章目录

前言

        本文主要介绍BIRCH算法、DBSCAN算法、OPTICS算法,以及相关案例举例,以下案例仅供参考

一、BIRCH算法

1.1、BIRCH算法简介

        BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies,平衡迭代规约和层次聚类)是一种基于树结构的聚类算法,其主要思想是使用一棵 CF 树(Clustering Feature Tree,聚类特征树)来表示数据集,通过不断对 CF 树进行迭代规约和层次聚类来实现对数据集的聚类。该算法具有高效性和可扩展性,并且可以处理大数据集。

在 Python 中,scikit-learn 库提供了 BIRCH 的实现,可以使用 `sklearn.cluster.Birch` 类来进行聚类。该类的主要参数包括:

  • - `threshold`: float, optional (default=0.5),叶子节点的阈值,用于控制 CF 树的大小,默认值为 0.5。
  • - `branching_factor`: int, optional (default=50),分支因子,用于控制 CF 树的分支度,默认值为 50。
  • - `n_clusters`: int or None,聚类的数量,默认为 None,表示不指定聚类的数量,而是通过阈值和分支因子来自动确定聚类的数量。

在 `Birch` 类中,有以下常用的方法:

  • - `fit(X[, y])`: 对数据 X 进行聚类,并返回一个 `Birch` 对象。
  • - `fit_predict(X[, y])`: 对数据 X 进行聚类,并返回每个数据点的簇标签。
  • - `predict(X)`: 对新数据 X 进行预测,返回每个数据点的簇标签。
  • - `transform(X)`: 将数据 X 转换成 CF 树中的叶子节点,返回一个稀疏矩阵。

除此之外,还有一些其他的参数和方法,可以根据具体需求来使用。

1.2、案例举例

案例

#使用BIRCH算法进行聚类
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
from sklearn.cluster import Birch
from itertools import cycle
N1,N2=500,500#样本数量
from sklearn.datasets import make_classification


X,labels = make_classification(n_samples = N1+N2,n_features = 2,n_redundant = 0,n_clusters_per_class = 1)
for class_value in range(2):
    row_ix = np.where(labels == class_value)
    plt.scatter(X[row_ix,0],X[row_ix,1],color = 'k',marker = 'o',s=5)
    plt.title("初始数据发布")
plt.xlabel("属性1")
plt.ylabel("属性2")
plt.show()
#也可以使用生成的正态分布随机数的方法生成数据
mu1,cov1 = [0,0],[[1,0],[0,2]]
set1 = np.random.multivariate_normal(mu1,cov1,N1)
mu2,cov2 = [5,5],[[1,0.9],[0.9,1]]
set2 = np.random.multivariate_normal(mu2,cov2,N2)
X=np.vstack([set1,set2])
fig = plt.figure()
plt.scatter(X[:,0],X[:,1],s=10)
plt.title("%d个样本的发布"%(N1+N2))
plt.xlabel("属性1")
plt.ylabel("属性2")
plt.show()
B,T=[100,150,200],[1,1.5,2]
i=1
colors=cycle('bgrcmyk')
for b,tau in zip(B,T):
    plt.figure()
    bir = Birch(n_clusters=None,threshold = tau,branching_factor = b)
    bir.fit(X)
    labels=np.unique(bir.labels_)
    print('标签的个数:',len(labels))
    print(bir.root_)
    i+=1
    for color,k in zip(colors,labels):
        plt.scatter(X[bir.labels_==k,0],X[bir.labels_==k,1],c=color,s=10,alpha = 0.5)
    plt.title("%d个样本的BIRCH聚类(分支因子=%d,阈值T=%.2f)"%(N1+N2,b,tau))
    plt.xlabel("属性1")
    plt.ylabel("属性2")
    plt.show()

标签的个数: 15
<sklearn.cluster._birch._CFNode object at 0x0000022BA0E6B9D0>

标签的个数: 6
<sklearn.cluster._birch._CFNode object at 0x0000022BA0CD56A0>

标签的个数: 2
<sklearn.cluster._birch._CFNode object at 0x0000022BA0E08CA0>

from sklearn.cluster import Birch
B,T=[100,150,200],[1, 1.5,2]
i=1
#定义分支因子和阈值的组合
#BIRCH聚类结果数量未知,所以作图时用cyclc控制颜色循环 
from itertools import cycle 
colors = cycle('bgrcmyk')
for b,tau in zip(B,T):
    plt.figure() 
    bir = Birch(n_clusters=None,threshold=tau,branching_factor=b) 
    bir.fit(X)
    labels =np.unique(bir.labels_)
    i+=1 
    for color,k in zip(colors,labels):
        plt.scatter(X[bir.labels_==k,0],X[bir.labels_==k,1],c=color)
    plt.show()

运行结果:

二、DBSCAN算法

2.1、算法简介

        DBSCAN 是一种基于密度的聚类算法,它的主要思想是将高密度的数据点聚成一类,低密度的数据点视为噪声或离群点。在 DBSCAN 中,密度被定义为在某个半径范围内的数据点个数。具体来说,该算法需要指定两个参数:半径 ε 和最小邻居数 minPts。对于某个数据点,如果它的 ε-邻域(即距离该点不超过 ε 的所有点)中包含不少于 minPts 个数据点,则该点被视为一个核心点;如果某个数据点在某个核心点的 ε-邻域中,但它自身不是核心点,则该点被视为边界点;如果某个数据点的 ε-邻域中没有包含不少于 minPts 个数据点,则该点被视为噪声或离群点。通过以上定义,DBSCAN 可以将数据点分成三类:核心点、边界点和噪声点。该算法的优点是可以处理任意形状的簇,并且可以有效地过滤噪声和离群点。

        DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,其基本思想是将高密度的数据点聚成一类,低密度的数据点视为噪声或离群点。该算法可以处理任意形状的簇,并且可以有效地过滤噪声和离群点。

         DBSCAN算法中的参数包括eps和min_samples。eps参数指定了一个点的邻域半径,min_samples指定了在eps半径内最少需要有多少个点才能形成一个簇。除此之外,还有一个可选参数metric,表示使用哪种距离度量来计算点之间的距离,默认值为欧几里得距离。

        在Python中,可以使用scikit-learn库中的sklearn.cluster.DBSCAN类来进行DBSCAN聚类,并可以根据具体需求设置参数和使用方法。DBSCAN类的主要方法包括fit和predict,其中fit方法用于训练模型,predict方法用于预测样本所属的簇标签。

以下是一些常用的参数和函数说明:

  • - eps: float, default=0.5 最大距离
  • - min_samples: int, default=5 最小样本数
  • - metric: string, callable or None, default='euclidean' 距离度量,默认为欧几里得距离 
  • - fit(X[, y, sample_weight]):进行模型训练
  • - fit_predict(X[, y, sample_weight]):进行模型训练并返回聚类标签
  • - labels_:返回聚类标签
  • - core_sample_indices_:返回核心样本的索引
  • - components_:返回每个簇的质心

2.2、案例举例

案例1:

#使用DBSCAN算法实现聚类
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
from sklearn.datasets import make_moons
from sklearn.datasets import make_circles
from sklearn import cluster
noises = [0.05,0.1,0.15]
for noise in noises:
    X,labels = make_moons(n_samples = 500,noise = noise)
    plt.figure(figsize=(15,5))
    plt.subplot(121)
    plt.scatter(X[:,0],X[:,1],color = "black",s=20)
    plt.title("原始数据发布(噪声方差%.2f)"%noise)
    
    db = cluster.DBSCAN(eps = 0.15,min_samples = 10)
    db.fit(X)
    print('DBSCAN算法参数:',db.get_params())
    result = np.unique(db.labels_)
    print('DBSCAN类别标签:',result)
    plt.subplot(122)
    colors = ["b","g","c","m","y","k","r"]
    markers = ["<",">","s","+","*","^","o"]
    labels = ['簇1','簇2','簇3','簇4','簇5','簇6','噪声']
    for i,j in enumerate(db.labels_):
        plt.scatter(X[i][0],X[i][1],color = colors[j],marker = markers[j],s = 20)
    plt.title("DBSCAN聚类结果")
    plt.show()

运行结果:

DBSCAN算法参数: {'algorithm': 'auto', 'eps': 0.15, 'leaf_size': 30, 'metric': 'euclidean', 'metric_params': None, 'min_samples': 10, 'n_jobs': None, 'p': None}
DBSCAN类别标签: [0 1]

DBSCAN算法参数: {'algorithm': 'auto', 'eps': 0.15, 'leaf_size': 30, 'metric': 'euclidean', 'metric_params': None, 'min_samples': 10, 'n_jobs': None, 'p': None}
DBSCAN类别标签: [-1  0  1  2]

DBSCAN算法参数: {'algorithm': 'auto', 'eps': 0.15, 'leaf_size': 30, 'metric': 'euclidean', 'metric_params': None, 'min_samples': 10, 'n_jobs': None, 'p': None}
DBSCAN类别标签: [-1  0  1  2  3  4]

案例2:

import numpy as np
from sklearn.cluster import DBSCAN
from sklearn.datasets import make_blobs
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
%matplotlib inline

# 生成样本数据
X, y = make_blobs(n_samples=500, centers=5, random_state=42)

# 对数据进行标准化
X = StandardScaler().fit_transform(X)

# 创建 DBSCAN 对象并进行聚类
dbscan = DBSCAN(eps=0.5, min_samples=5)
dbscan.fit(X)

# 绘制聚类结果
plt.scatter(X[:,0], X[:,1], c=dbscan.labels_, cmap='rainbow')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

运行结果:

 

三、OPTICS算法

3.1、算法简介

OPTICS是一种基于密度的聚类算法,可以有效地识别具有不同密度的数据簇。与DBSCAN不同,OPTICS不需要事先知道簇的数量。它通过在数据集中生成一个基于密度的可达性图来工作,从而可以在处理具有任意形状的簇时表现出良好的性能。

在Python中,可以使用scikit-learn库中的`sklearn.cluster.OPTICS`类来实现OPTICS聚类。该类的主要参数和函数如下:

**主要参数:**

  • - `min_samples`: 用于定义一个数据点的邻域中必须包含的最少数据点数。默认值为5。
  • - `xi`: 用于控制点之间的相似度度量。默认值为0.05。
  • - `min_cluster_size`: 用于定义簇的最小数量。默认值为None(自适应)。
  • - `max_eps`: 用于定义一个点的邻域的最大半径。默认值为inf。

**主要函数:**

  • - `fit(X)`: 对数据集X进行聚类,并返回OPTICS聚类器对象。
  • - `fit_predict(X)`: 对数据集X进行聚类,并返回聚类标签。
  • - `set_params(**params)`: 设置OPTICS聚类器的参数。
  • - `get_params()`: 获取OPTICS聚类器的参数。

需要注意的是,由于OPTICS算法的计算复杂度较高,因此在处理大数据集时可能会遇到效率问题。在这种情况下,可以考虑使用DBSCAN或BIRCH等其他聚类算法来代替。

3.2、案例举例

案例1:

#使用OPTICS算法实现聚类
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
from sklearn.datasets import make_moons
from sklearn.datasets import make_circles
from sklearn import cluster
noises = [0.05,0.1,0.15]
for noise in noises:
    X,labels = make_circles(n_samples = 500,noise = noise)
    plt.figure(figsize=(15,5))
    plt.subplot(121)
    plt.scatter(X[:,0],X[:,1],color = "black",s=20)
    plt.title("原始数据发布(噪声方差%.2f)"%noise)
    
    opt = cluster.OPTICS(min_samples = 20,max_eps = 0.5,cluster_method = 'xi',xi = 0.05)
    opt.fit(X)
    print('OPTICS类别标签(噪声%.2f):'%noise,np.unique(opt.labels_))
    plt.subplot(122)
    colors = ["b","g","c","m","y","k","r"]
    markers = ["<",">","s","+","*","^","o"]
    labels = ['簇1','簇2','簇3','簇4','簇5','簇6','噪声']
    for i,j in enumerate(opt.labels_):
        plt.scatter(X[i][0],X[i][1],color = colors[j],marker = markers[j],s = 20)
    plt.title("OPTICS聚类结果")
    plt.show()

运行结果:

OPTICS类别标签(噪声0.05): [-1  0]

OPTICS类别标签(噪声0.10): [-1  0  1]

OPTICS类别标签(噪声0.15): [-1  0  1  2  3  4]

案例2:

分别生成半月形、园环形数据、4类单标签数据以及正态分布的随机数据集;
分别使用k均值、BIRCH和DBSCAN算 法对4种不同形状的数据聚类;

#分别生成半月形、园环形数据、4类单标签数据以及正态分布的随机数据集;
#分别使用k均值、BIRCH和DBSCAN算 法对4种不同形状的数据聚类;
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
from sklearn import cluster
from sklearn.datasets import make_blobs
from sklearn.datasets import make_moons
from sklearn.datasets import make_circles
#生成4种不同分布的数据
X1,labels = make_moons(n_samples = 500,noise = 0.1)#半月形分布数据
X2,labels = make_circles(n_samples = 500,factor = 0.2,noise = 0.05)#圆环形分布
X3,labels = make_blobs(n_samples = 500,centers=[[3,1],[-1,4],[0,-3],[-4,3]],n_features = 2,cluster_std = 1)
X4 = np.random.randn(300,2)#正态分布数据
#预定义12种颜色和形状,实际运行时可能出现聚类结果超过12种而报错的情况。
colors = ["b","g","r","c","m","y","k","lightgree","grey","pink","orange","purple"]
markers = ["o","s","D","+","*","^","<",">","1","2","3","4"]
#使用k均值聚类对上述4种形状数据进行聚类分析
plt.figure(figsize = (10,2))
km = cluster.KMeans(n_clusters = 2,init = "k-means++",max_iter = 10,n_init = 1)
for index,data in enumerate([X1,X2,X3,X4]):
    if index>1:
        km.n_clusters = 4
    km.fit(data)
    plt.subplot(1,4,index+1)
    for i,j in enumerate(km.labels_):
        plt.scatter(data[i][0],data[i][1],color = colors[j],marker = markers[j],s = 7)
        plt.title('K-means聚类')
plt.show()
#使用BIRCH聚类对上述4种形状数据进行聚类分析
plt.figure(figsize = (10,2))    
bir = cluster.Birch(threshold = 0.5,n_clusters = 4,branching_factor = 60)
for index,data in enumerate([X1,X2,X3,X4]):
    if index>1:
        bir.n_clusters = 4
    bir.fit(data)
    plt.subplot(1,4,index+1)
    for i,j in enumerate(bir.labels_):
        plt.scatter(data[i][0],data[i][1],color = colors[j],marker = markers[j],s = 5)
        plt.title('BIRCH聚类')
plt.show()
#使用DBSCAN聚类对上述4种形状数据进行聚类分析
plt.figure(figsize = (10,2))    
db = cluster.DBSCAN(eps = 0.3,min_samples = 10)
for index,data in enumerate([X1,X2,X3,X4]):
    db.fit(data)
    plt.subplot(1,4,index+1)
    for i,j in enumerate(db.labels_):
        plt.scatter(data[i][0],data[i][1],color = colors[j],marker = markers[j],s = 5)
        plt.title('DBSCAN聚类')
plt.show()

运行结果:

总结

以上就是今天的内容~

最后欢迎大家点赞👍,收藏⭐,转发🚀,
如有问题、建议,请您在评论区留言💬哦。

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

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

相关文章

Kubernetes(K8s)各组件白话解释

深入springboot怎么启动tomcat NameSpacePodDeployment1. 创建多个副本2. 扩容/缩容3. 滚动更新4. 版本回退 ServiceClusterIpNodePort Ingress 个人笔记&#xff0c;仅供参考。 来源于尚硅谷视频 转载请评论。 NameSpace 名称空间&#xff0c;在K8s中用于隔离资源。对不同资源…

第十一届“泰迪杯”数据挖掘挑战赛成绩公示

第十一届“泰迪杯” 数据挖掘挑战赛成绩公示 第十一届“泰迪杯”数据挖掘挑战赛历时两个月顺利结束。竞赛采用盲审&#xff08;屏蔽参赛者信息&#xff1b;评审专家只能评阅非本区域作品&#xff1b;三位评阅专家同时评阅同一作品&#xff0c;超限调整后再取平均分&#xff0…

【小米的技术分享】数据库索引原理与底层数据结构解析

大家好&#xff0c;我是小米。今天我们来探讨一下数据库索引原理以及底层索引数据结构&#xff0c;同时还会介绍叶子节点存储的内容以及索引失效的情况。废话不多说&#xff0c;让我们开始吧&#xff01; IO操作与索引 首先&#xff0c;我们先来了解一下IO操作对于数据库索引的…

【区块链 | L2】作为Layer2赛道的领跑者,如何理解 Arbitrum?

上周我们介绍了以太坊L2扩展解决方案Optimism,本周我们继续介绍另一个L2解决方案——Arbitrum。Arbitrum 是以太坊的一个 Optimistic Rollup L2 可扩展性解决方案。 Part.1 什么是Arbitrum? Arbitrum 是一个构建在以太坊之上的区块链网络。你可以使用 Arbitrum 链来做任何在…

长短连接对压测的影响有多大?!

【引言】 当我们进行压力测试时&#xff0c;长短连接是一个非常重要的参数。但是&#xff0c;你知道吗&#xff1f;长短连接对于压测结果有着非常大的影响&#xff01;如果你不理解这个参数&#xff0c;那么你的压测结果可能会出现严重的偏差。 在这篇文章中&#xff0c;我将…

快速在linux上配置python3.9的环境以及可能报错的解决方案(python其它版本可同样方式安装)

一. linux安装python3.9 步骤1&#xff1a;安装系统依赖&#xff08;重要&#xff09; 这一步不执行&#xff0c;后面各种错误。 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-d…

C#:不同登录用户阅读状态的修改:不同的登录用户,登录用户修改阅读状态后,状态变为已读,未修改阅读状态的用户,依然显示未读的程序实例

一、创建数据库 首先&#xff0c;可以使用SQL Server Management Studio创建一个新的数据库(MyDatabase) 以及三个表(Users, Messages, UserMessageStatus)&#xff0c;分别用于存储用户信息&#xff0c;消息信息以及用户消息状态。 Users表 该表包含了所有注册用户的信息。…

Es elasticsearch 十七 Java api 实现聚合 几个聚合示例 sql 开启许可 新特效 java 实现es7 sql 功能

目录 Java api 实现聚合 依赖 简单聚合按照颜色分组获取每个卖出数量 聚合每个颜色卖出数量&#xff0c;及平均价格&#xff08;每个分桶子聚合&#xff09; 按照颜色分组 &#xff0c;获取销售数量&#xff0c;avg min max sum 按照600区间价格范围分组&#xff0c;算出…

你学习web安全的路线可以介绍是吗

学习网络安全一定要选好一个方向去下功夫&#xff0c;如果不清楚自己究竟适合什么方向&#xff0c;可以都稍微尝试一下再来做选择&#xff0c;实战能力才是重点&#xff0c;所以你最应该找平台&#xff0c;多多实战&#xff0c;完成实际项目&#xff01; 书籍推荐&#xff1a;…

『赠书活动 | 第九期』清华社赞助 | 《Java系列丛书》

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 『赠书活动 &#xff5c; 第九期』 本期书籍&#xff1a;《Java系列丛书》 公众号赠书&#xff1a;第一期 参与方式&#xff1a;关注公众号&#xff1a;低调而奢华 …

react-router V6 传递参数的三种方式

react-router V6 传递参数的三种方式 路由跳转使用navigate()路由传参1&#xff0c;searchParams传参2&#xff0c;params 传参3&#xff0c;state传参总结 路由跳转使用navigate() 编程式导航 导入一个 useNavigate钩子函数执行 useNavigate 函数得到 跳转函数在事件中执行跳…

服务器PING值不稳定是什么情况?

​  服务器ping值不稳定是指服务器在不同时间段内&#xff0c;对同一IP地址进行ping测试时&#xff0c;返回的延迟时间不同&#xff0c;存在波动的情况。这种情况会对服务器的性能和稳定性产生影响&#xff0c;影响用户的使用体验。下面我们来分析一下服务器ping值不稳定的原…

模拟IC方向面试常考问题及答案汇总,IC人必看

有不少小伙伴说想了解模拟IC方向的面试题目&#xff0c;这不就来了&#xff01;&#xff08;文末可领全部面试题目&#xff09; 1. 基尔霍夫定理的内容是什么&#xff1f; 电流定律&#xff1a;在集总电路中&#xff0c;任何时刻&#xff0c;对任一节点&#xff0c;所有流出节…

怎样让你的客户服务更高效

随着商业环境的变化&#xff0c;越来越多的企业开始意识到客户服务对于企业的重要性。高效的客户服务能够促进客户满意并增加销售额&#xff0c;从而帮助企业获得更大的成功。但是&#xff0c;怎样才能让您的客户服务更高效呢&#xff1f;以下是一些建议。 建立一个完善的客户…

浅水域三维探地雷达数值模拟研究

Gprmax浅水域三维地质雷达数值模拟研究 前言 浅水域地下不良地质体的探测一直是工程勘察的难点&#xff0c;地质雷达具有仪器轻便、操作简洁、分辨率高的优势&#xff0c;在浅水域勘察中具有很大的应用前景。目前&#xff0c;二维地质雷达已经有不少应用&#xff0c;三维地质…

面试专题:设计模式

面试时常见的就是的就是让你手写一个单例模式&#xff08;注意单例模式的几种不同的实现方法&#xff09;或者让你说一下某个常见的设计模式在你的项目中是如何使用的&#xff0c;另外面试官还有可能问你抽象工厂和工厂方法模式的区别、工厂模式的思想这样的问题。 建议把代理模…

C++核心编程——详解运算符重载

文章目录&#x1f4ac; 一.运算符重载基础知识①基本概念②运算符重载的规则③运算符重载形式④运算符重载建议 二.常用运算符重载①左移(<<)和右移(>>)运算符重载1️⃣重载后函数参数是什么&#xff1f;2️⃣重载的函数返回类型是什么&#xff1f;3️⃣重载为哪种…

Web测试有哪些基本要点?软件测试找第三方软件检测机构靠谱吗?

互联网时代的到来&#xff0c;让Web应用成为了人们生活和工作中不可或缺的一部分。随着Web应用的快速发展&#xff0c;Web测试也变得越来越重要。本文将从Web测试的基本要点和第三方软件检测机构的可靠性两方面进行讨论。 一、Web测试的基本要点 1. 安全性测试&#xff1a;评…

JVM(Java Virtual Machine)

JVM &#x1f50e;内存区域划分Program Counter Register(程序计数器)Native Method Stacks(本地方法栈)JVM Stacks(虚拟机栈)区分虚拟机栈与本地方法栈&#x1f36d;栈是线程私有的&#x1f36d; Heap(堆区)Metaspace(元数据区)总结 &#x1f50e;类加载类加载的流程加载验证准…

【Apache-Flink零基础入门】「入门到精通系列」手把手+零基础带你玩转大数据流式处理引擎Flink(有状态的流式处理)

手把手零基础带你玩转大数据流式处理引擎Flink&#xff08;有状态的流式处理&#xff09; 传统批处理批处理的特点批处理执行原理理想方法 流式处理分布式流式处理有状态分布式流式处理有状态分散式流式处理 总结分析 传统批处理 传统批处理数据是指一种数据处理方式&#xff…