第十章 聚类算法

news2024/10/6 22:26:50

聚类算法

  • 算法概括
    • 聚类(clustering)
      • 聚类的概念
      • 聚类的要求
      • 聚类与分类的区别
    • 常见算法分类
    • 聚类算法中存在的问题
  • 距离度量
    • 闵可夫斯基距离
    • 欧式距离(欧几里得距离)
    • 曼哈顿距离
    • 切比雪夫距离
    • 皮尔逊相关系数
    • 余弦相似度
    • 杰卡德相似系数
  • 划分聚类
    • K-means聚类算法
      • 算法原理
      • 基本概念
    • 算法实例
      • 题目背景
      • k-means的手动实现
      • sklearn库中K-means算法
      • 聚类分析的度量

算法概括

机器学习有两种学习类型:

  • 有监督学习:即数据点有已知的结果。
  • 无监督学习:即数据点没有已知的结果,利用无标签的数据学习数据的分布或数据与数据之间的关系被称作无监督学习。
    注:
    ①有监督学习和无监督学习的最大区别在于数据是否有标签。
    ②无监督学习最常应用的场景是聚类和降维,聚类算法用于识别数据中未知的结构,降维则是使用数据中的结构特征来简化数据。

聚类(clustering)

聚类的概念

  • 聚类就是根据数据的“相似性”将数据分为多类的过程。
  • 聚类把各不相同的个体分割为有更多相似子集合的工作。
  • 聚类生成的子集合称为

聚类的要求

  • 生成的簇内部的任意两个对象之间具有较高的相似度。
  • 属于不同簇的两个对象间具有较高的相异度
    在这里插入图片描述

聚类与分类的区别

之前学习过k近邻算法分类算法,分类和聚类听上去好像很相似,但是两者完全是不同的应用和原理。
例如,根据下图的四个属性进行预测某一输入的所属类别:
在这里插入图片描述
概括而来就是这样一个流程:
在这里插入图片描述
可以看出训练样本是有明确的标签的,数据点是有已知结果的,而聚类不同,聚类算法本身训练的样本就是无标签的,你不知道它属于哪一类,而把具有空间相近性、性质相似性的数据点归为一类,这就是聚类算法要做的事情。
还是上面的例子:
在这里插入图片描述
这个时候训练样本的标签被盖住了,我们必须从这四个属性入手,把样本聚合成不同的簇,每个簇中的数据点的属性最相似。
概括而来就是这样一个过程:
在这里插入图片描述
现在小结一下,分类和聚类的区别概括而来就是这样:

分类:学习/训练有监督,训练样本有明确标签。
聚类:学习/训练过程无监督,样本无明确标签。
聚类与分类的区别在于聚类不依赖于预先定义的类,没有预定义的类和样本——聚类是一种无监督的数据挖掘任务。

常见算法分类

  • 划分聚类: 大部分方法是基于距离的聚类算法。如:K-Means、K-Medoids、CLARANS等。
  • 层次聚类: 例如:BIRCH、CURE、CHAMELEON等。层次聚类可采用“自底向上”或“自顶向下”方案。在“自底向上”方案中,初始时每一个数据纪录都被视作一个单独的簇,接着再把那些相互邻近的簇合并成一个新的簇,直到所有的记录都在一个簇或者满足某个终止条件为止。
  • 密度聚类: 该方法是基于(结点)密度的聚类算法,主要算法有:DBSCAN、OPTICS、DENCLUE等。只要一个区域中的点的密度大于某个阈值,就把它加到与之相近的聚类中去。
  • 网格聚类: 主要算法有:STING、CLIQUE、WAVE-CLUSTER。将数据空间按某种特征(属性)划分成网格,聚类处理以网格(单元)为基本单位。
    注:
    ①后边三种聚类不做介绍,主要以划分聚类中的K-Means算法作为本章学习重点。
    ②需要说明的是,这些算法本身无所谓优劣,而最终运用于数据的效果却存在好坏差异,这在很大程度上取决于数据使用者对于算法的选择是否得当。

聚类算法中存在的问题

  • ①高维数据集中存在大量无关的属性,所有维中存在簇的可能性几乎为零。
  • ②高维空间中数据较低维空间中数据分布稀疏,其中数据间距离几乎相等是普遍现象,而传统聚类方法是基于距离进行聚类的,因此在高维空间中无法基于距离来构建簇。

距离度量

评估两个不同样本之间的“相似性”,通常使用的方法就是计算两个样本之间的“距离”,使用不同的方法计算样本间的距离关系到聚类结果的好坏。
大多数聚类分析是以相似性计算为基础的,同一个聚类中的个体模式相似,不在同一个聚类中的个体模式则相异。目前,相似性距离的计算都是基于向量的,也就是计算两个向量的距离,距离相近则相似度越大。
下面,介绍几种常见的距离计算方法。

闵可夫斯基距离

闵可夫斯基距离(Minkowski Distance)是一种常见的方法,用于衡量数值点之间距离。
假设 X ( x 1 , x 2 , . . . , x n ) , Y ( y 1 , y 2 , . . . , y n ) X(x_1,x_2,...,x_n),Y(y_1,y_2,...,y_n) Xx1,x2,...,xn,Yy1,y2,...,yn)是n维空间的两个向量,那么,闵可夫斯基距离定义为:
d i s t ( X , Y ) = ∑ k = 1 n ∣ x k − y k ∣ p p dist(X,Y)=\sqrt[p]{\textstyle \sum_{k=1}^{n} |x_k-y_k|^p} distX,Y=pk=1nxkykp
注:该距离最常用的p是2和1,前者是欧几里得距离,后者是曼哈顿距离。当p趋近于无穷大时,闵可夫斯基距离转化为切比雪夫距离。

闵可夫斯基距离计算距离如下:

import numpy as np
x=np.random.random(10)
y=np.random.random(10)
dist=np.linalg.norm(x-y,ord=4)#闵可夫斯基距离,此时p=4

欧式距离(欧几里得距离)

欧式距离(Euclidean Distance)最初用于计算欧几里得空间中两个点的距离。假设 X ( x 1 , x 2 , . . . , x n ) , Y ( y 1 , y 2 , . . . , y n ) X(x_1,x_2,...,x_n),Y(y_1,y_2,...,y_n) Xx1,x2,...,xn,Yy1,y2,...,yn)是n维空间的两个向量,它们之间的欧几里得距离是:
d i s t ( X , Y ) = ∑ k = 1 n ( x k − y k ) 2 p dist(X,Y)=\sqrt[p]{\textstyle \sum_{k=1}^{n} (x_k-y_k)^2} distX,Y=pk=1n(xkyk)2
n=2欧几里得距离就是平面上两个点的距离。如果欧式距离看作物品相似程度,那么距离越近就越相似,也就是说距离越小,相似度越大。
在这里插入图片描述

欧式距离计算举例如下:

import numpy as np
import scipy.spatial.distance as dis
x=np.random.random(10)
y=np.random.random(10)
X=np.vstack([x,y])
dist=dis.pdist(X,metric='euclidean')
#或者直接按照闵可夫斯基距离的计算方式
dist=np.linalg.norm(x-y,ord=2)

曼哈顿距离

曼哈段距离也称为城市街区距离(City Block distance),或绝对距离。即在欧几里得空间的固定直角坐标系上两点所形成的线段对轴的投影距离总和。
坐标 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)的点 P 1 P_1 P1与坐标 ( x 2 , y 2 ) (x_2,y_2) (x2,y2)的点 P 2 P_2 P2的曼哈顿距离为:
d i s t ( P 1 , P 2 ) = ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ dist(P_1,P_2)=|x_1-x_2|+|y_1-y_2| dist(P1,P2)=x1x2+y1y2
在这里插入图片描述

曼哈顿距离计算Python语句如下:

import numpy as np
x=np.random.random(10)
y=np.random.random(10)
dist=np.linalg.norm(x-y,ord=1)

切比雪夫距离

闵可夫斯基距离定义中,当p= + ∞ +\infty +时,称为切比雪夫距离(Chebyshev Distance)。
假设 X ( x 1 , x 2 , . . . , x n ) , Y ( y 1 , y 2 , . . . , y n ) X(x_1,x_2,...,x_n),Y(y_1,y_2,...,y_n) Xx1,x2,...,xn,Yy1,y2,...,yn)是n维空间的两个向量,它们之间的切比雪夫距离是:
d i s t ( X , Y ) = lim ⁡ n → ∞ ) ( ∑ i = 1 n ∣ x i − y i ∣ k ) 1 k = max ⁡ ( ∣ x i − y i ∣ ) , 1 ≤ i ≤ n dist(X,Y) = \lim_{n \to \infty})(\sum_{i=1}^{n}|x_i-y_i|^k)^\frac{1}{k} = \max(|x_i-y_i|), 1 \leq i \leq n dist(X,Y)=nlim)(i=1nxiyik)k1=max(xiyi),1in

切比雪夫距离计算Python语句如下:

import numpy as np
x=np.random.random(10)
y=np.random.random(10)
dist=np.linalg.norm(x-y,ord=np.inf)

皮尔逊相关系数

皮尔逊相关系数(Pearson Correlation Coeffient)即相关分析中的相关系数r,一般用于计算两个定距变量间联系的紧密程度,它的取值在[-1,+1]之间。
当相关系数为0时,X和Y两变量无线性关系(不代表没有除了线性关系外的其他关系);当X的值增大,Y也增大,正相关关系,相关系数在0.00与1.00之间;当X的值增大,Y减小,负相关关系,相关系数在-1.00与0.00之间。相关系数的绝对值越大,相关性越强,相关系数越接近于1和-1,相关度越强,相关系数越接近于0,相关度越弱。
公式如下:
r ( x , y ) = E ( x y ) − E ( x ) ( y ) E ( x 2 ) − ( E ( x ) ) 2 E ( y 2 ) − ( E ( y ) ) 2 = c o v ( x , y ) σ x σ y r(x,y) = \frac{E(xy)-E(x)(y)}{\sqrt[]{E(x^2)-(E(x))^2}{\sqrt[]{E(y^2)-(E(y))^2}}} = \frac{cov(x,y)}{\sigma_x\sigma_y} r(x,y)=E(x2)(E(x))2 E(y2)(E(y))2 E(xy)E(x)(y)=σxσycov(x,y)

皮尔逊相关系数计算Python语句如下:

import numpy as np
import scipy.spatial.distance as dis
x=np.random.random(10)
y=np.random.random(10)
X=np.vstack([x,y])
dist=1-dis.pdist(X,metric='correlation')

余弦相似度

余弦相似度就是两个向量之间的夹角的余弦值。假设 X ( x 1 , x 2 , . . . , x n ) , Y ( y 1 , y 2 , . . . , y n ) X(x_1,x_2,...,x_n),Y(y_1,y_2,...,y_n) Xx1,x2,...,xn,Yy1,y2,...,yn)是n维空间的两个向量,它们之间的余弦相似度是:
cos ⁡ θ = X Y ∣ X ∣ ∣ Y ∣ \cos \theta = \frac{XY}{|X||Y|} cosθ=X∣∣YXY
余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离向量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度。
夹角余弦取值范围为[-1,1]。夹角余弦越大表示两个向量的夹角越小,夹角余弦越大表示两个向量的夹角越大。当两个向量的方向重合时余弦取最大值1,当两个向量的方向完全相反夹角余弦取最小值-1。
在这里插入图片描述
余弦相似度计算Python语句如下:

import numpy as np
import scipy.spatial.distance as dis
x=np.random.random(10)
y=np.random.random(10)
X=np.vstack([x,y])
dist=1-dis.pdist(X,metric='cosine')

欧几里得vs余弦距离

  • 欧几里得距离适合于基于坐标的度量。
  • 余弦距离更适合那些出现位置不重要的数据,例如文本数据。
  • 欧几里得距离对维度灾难更敏感。

杰卡德相似系数

Jaccard系数主要用于计算符号度量或布尔值度量的个体间的相似度,只关心个体间共同具有的特征是否一致这个问题。假设集合 A和 B,两个集合的杰卡德相似系数表示如下:
J ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ J(A,B)= \frac {|A∩B|}{|A∪B|} J(A,B)=ABAB

杰卡德相似距离计算Python语句如下:

import numpy as np
import scipy.spatial.distance as dis
x=np.random.random(10)
y=np.random.random(10)
X=np.vstack([x,y])
dist=dis.pdist(X,metric='jaccard')

划分聚类

K-means聚类算法

算法原理

k-means算法以k为参数,把n个对象分为k个簇,使簇内具有较高的相似度,而簇间的相似度较低。
其处理过程如下:
①随机选择k个点作为初始的聚类中心。
②对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇。
③对于每个簇,计算所有点的均值作为新的聚类中心。
④重复2、3直到聚类中心不再发生改变。

算法流程如下所示:
在这里插入图片描述

如下图所示为聚类A、B、C、D、E五个点的聚类中心的选取过程:
在这里插入图片描述

基本概念

要得到簇的个数,需要指定K值。
质心:均值,即向量各维取平均即可。
距离的度量:常用欧几里得距离余弦相似度(先标准化)
优化目标: min ⁡ ∑ i = 1 K ∑ x ∈ C i d i s t ( c i , x ) 2 \min \sum_{i=1}^{K}\sum_{x \in C_i}^{}dist(c_i,x)^2 mini=1KxCidist(ci,x)2

算法实例

题目背景

练习算法实例,要求做到:
1、理解程序中每个函数以及每个变量的含义;
2、掌握k-means算法的实现过程;
3、使用k-means算法对下表中的5个样本进行聚类(k=2)。
在这里插入图片描述

k-means的手动实现

import numpy as np
def kmeans(X, k, max_iter=300):
    # 随机选择k个初始质心
    centroids = X[np.random.choice(X.shape[0], k)]
    for i in range(max_iter):
        # 计算每个样本点到质心的距离,并分配到最近质心所在的簇中
        distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
        labels = distances.argmin(axis=0)
        # 重新计算每个簇的质心
        new_centroids = np.array([X[labels == j].mean(axis=0) for j in range(k)])
        # 检查质心是否变化,若没有则退出
        if np.all(centroids == new_centroids):
            break
        centroids = new_centroids
    return labels, centroids
X=np.array([[170,70],[178,75],[100,100],[120,40],[10,0.1]])
labels,centroids=kmeans(X,k=2)
print("当k=3时,簇划分情况为:",labels)
print("当k=3时,质心为:\n",centroids)

sklearn库中K-means算法

scikit-learn模块提供了k-Means聚类方法,原型为:
class sklearn.cluster.KMeans(n_clusters=8, init=’k-means++’, n_init=10, max_iter=300, tol=0.0001, precompute_distances=’auto’, verbose=0, random_state=None, copy_x=True, n_jobs=1, algorithm=’auto’)
主要参数包括:

  • n_clusters:整型,可选,默认参数值为8,聚类数量。
  • init:‘k-means++’,‘random’或者ndarray之一,默认为’k-means++’。
    ’k-means++’: 以一种巧妙的方式选择k-均值聚类的初始集群中心,以加快收敛速度。
    ‘random’:从初始质心的数据中随机选取 k 观察 (行)。
    ndarray:给出形状 (n_clusters, n_features)的初始中心。
  • n_init:整型,默认参数值为10。用不同的初始化质心运行算法的次数。由于k-Means是结果受初始值影响的局部最优的迭代算法,因此需要多跑几次以选择一个较好的聚类效果。
  • max_iter:整型,默认参数值为300,最大的迭代次数。
  • tol:浮点型,默认参数值为0.0001,最小容忍误差,当误差小于tol就会退出迭代。
  • algorithm:可以是‘auto’,‘full’或者’elkan’之一,默认参数值为’auto’。’full’适合于EM类算法;’elkan’适合于三角形不等式,但暂不支持稀疏数据;而当设置为’auto’时,稠密数据用’elkan’,稀疏数据用’full’。
  • random_state:整型,RandonState实例或None,默认参数值为None。具体如下:
    int:该参数用于设置随机数发生器的种子;
    RandonState instance:该参数是一个随机数发生器;
    None:使用np.random作为随机数发生器。
import numpy as np
from sklearn.cluster import KMeans
#使用k-means算法对数据进行聚类
X=np.array([[170,70],[178,75],[100,100],[120,40],[10,0.1]])
kmeans_model=KMeans(n_clusters=2,init="k-means++")
kmeans_model.fit(X)
print("当k=2时,簇划分情况为:",kmeans2_model.labels_)
print("当k=2时,质心为:\n",kmeans2_model.cluster_centers_)

聚类分析的度量

  • 聚类分析的度量指标用于对聚类结果进行评判,分为内部指标和外部指标两大类:
    外部指标指用事先指定的聚类模型作为参考来评判聚类结果的好坏。
    内部指标是指不借助任何外部参考,只用参与聚类的样本评判聚类结果好坏。
  • 聚类的目标是得到较高的簇内相似度和较低的簇间相似度,使得簇间的距离尽可能大,簇内样本与簇中心的距离尽可能小。
  • 聚类得到的簇可以用聚类中心、簇大小、簇密度和簇描述等来表示:
    聚类中心是一个簇中所有样本点的均值(质心)。
    簇大小表示簇中所含样本的数量。
    簇密度表示簇中样本点的紧密程度。
    簇描述是簇中样本的业务特征。
    注:初始质心的选择和聚类簇数k的选择都会对聚类结果产生影响,它们的选择会导致不同的聚类效果,因此需要进行多次实验,选择最优的初始质心、聚类簇数k。在极端情况下,有时候会出现局部最优解问题,即算法陷入局部最优解,无法到达全局最优解。总的来说,KMeans算法具有一定的随机性。

未完待续~~

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

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

相关文章

将本地和服务器图片上传至七牛云

少量图片上传七牛云 如果是少量图片时推荐手动上传 多张图片上传七牛云 如果是多张图片较大时,推荐使用七牛云官方提供工具(qshell) qshell 链接地址:命令行工具(qshell)_实用工具_对象存储 - 七牛开发者中心 (qiniu.com) 我们项目常用于服务器&…

JVM系列-第6章-方法区

方法区 栈、堆、方法区的交互关系 从线程共享与否的角度来看 ThreadLocal:如何保证多个线程在并发环境下的安全性?典型场景就是数据库连接管理,以及会话管理。 栈、堆、方法区的交互关系 下面涉及了对象的访问定位 Person 类的 .class …

BM61-矩阵最长递增路径

题目 给定一个 n 行 m 列矩阵 matrix ,矩阵内所有数均为非负整数。 你需要在矩阵中找到一条最长路径,使这条路径上的元素是递增的。并输出这条最长路径的长度。 这个路径必须满足以下条件: 对于每个单元格,你可以往上&#xff…

万字长文详解如何使用Swift提高代码质量 | 京东云技术团队

前言 京喜APP最早在2019年引入了Swift,使用Swift完成了第一个订单模块的开发。之后一年多我们持续在团队/公司内部推广和普及Swift,目前Swift已经支撑了70%以上的业务。通过使用Swift提高了团队内同学的开发效率,同时也带来了质量的提升&…

工服智能监测预警算法 yolov8

工服智能监测预警系统通过yolov8网络模型算法,工服智能监测预警算法对现场人员未按要求穿戴工服工装则输出报警信息,通知后台人员及时处理。Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测,核心思想就是利用整张图作为网络的输入&am…

Deepmotion: AI动作捕捉和3D身体追踪技术平台

【产品介绍】 Deepmotion是一家专注于使用AI技术进行动作捕捉和3D身体追踪的公司。自2014年成立以来,Deepmotion一直致力于让数字角色通过智能的动作技术变得栩栩如生。 Deepmotion提供了多种与动作数据相关的服务,其中最引人注目的是Animate 3D&#xf…

Java 如何在 Array 和 Set 之间进行转换

概述 在本文章中,我们对如何在 Java 中对 Array 和 Set 进行转换进行一些说明和示例。 这些示例通过使用 Core Java 和一些第三方的转换工具,例如 Guava 和 Apache Commons Collections。 更多有关的文章,请访问:Java - OSSEZ 相…

笔试强训--Day2

1.题目: 排序子序列 排序子序列https://www.nowcoder.com/questionTerminal/2d3f6ddd82da445d804c95db22dcc471?orderBy HotValue1&page1&onlyReferencefalse 【题目解析】: 本题要求解的是排序子序列,排序子序列为非递增或者非递减&#xff0…

空气炸锅CE认证/FCC认证/PSE认证/SAA认证以及METI备案

空气炸锅属于厨房小电器,出口到各个亚马逊站点的空气炸锅建议做如下认证: 美国站:FCC认证,UL测试,FDA测试,加州65测试等。 欧洲站:CE认证,RoHS认证。 德国站:GS认证。 …

【沐风老师】一步一步教你在3dMax中进行UVW贴图和展开UVW的方法

将简单或程序材质应用于对象并不难。但是当表面需要在其上显示某种纹理时,它会变得更加复杂。任何纹理贴图都放在材质的 Diffuse 插槽中,但渲染的结果可能无法预测。这就是为什么我们需要了解 3DMAX 如何将纹理应用于 3D 对象,什么是 UVW 贴图…

【STL】模拟实现vector(详解)

文章目录 前言vector的模拟实现一,搭建框架二,实现构造函数三,构造的其他方式传统写法1.拷贝构造2. 重载赋值操作符3. 使用迭代器构造4. 初始化为N个val的vector 现代写法1. 拷贝构造2. 赋值重载 四,实现vector相关函数1. reserve…

Linux centos安装Redis数据库并远程连接

目录 前言 1. Linux(centos8)安装redis数据库 2. 配置redis数据库 3. 内网穿透 3.1 安装cpolar内网穿透 3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址 4.1 保留一个固定tcp地址 4.2 配置固定TCP地址 4.3 使用固定的tcp地址连接 前言 Redis作为一款高速缓存的ke…

周杰伦官宣数智人“周同学”,数智人与数字人,不止一字之差

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 5月8日,周杰伦亮相中国移动元宇宙总部,与中国移动达成元宇宙领域系列合作,共同推出了数智人“周同学”。 周杰伦从 2003 年开始代言“动感地带”,可以说是中国移动 20 年的忠实…

6. 神经网络

6.1 非线性假设 假设有一个监督学习分类问题,训练集如图 如果利用logistic回归来解决这个问题,我们可以构造一个包含很多非线性项的logistic回归函数。 但在这个训练集只给出了两个特征,如果一旦特征变多了,多项式就会变得很多。…

1951-2023最新中国基础地理信息,包括水系、行政区、DEM高程、气象站经纬位置、土地利用,这些数据获取方法介绍

水系: 流域内所有河流、湖泊等各种水体组成的水网系统,称作水系。其中,水流最终流入海洋的称作外流水系,如太平洋水系、北冰洋水系;水流最终流入内陆湖泊或消失于荒漠之中的,称作内流水系。 [1] 流域面积的…

File 类和 InputStream, OutputStream 的用法

目录 1.文件系统操作 File 类 2.文件内容操作 InputStream 1.创建InputStream类对象 2.读文件 OutputStream 1.创建OutputStream类对象 2.写文件 上篇博客我们详情介绍了文件系统的相关知识。在文件系统操作中,由于文件是在硬盘上的,直接写代…

分布式系统入门概述

前言 随着互联网、物联网、人工智能等技术的广泛应用,计算机系统正在逐渐从单机转向网络化和分布式的趋势。那么,什么是分布式系统呢? 分布式概要 简而言之,分布式系统是由多个节点组成的,这些节点运行在不同的计算机上…

企业IDC服务器迁移上云视频教程来了(Windows和Linux)

上云是趋势,越来越多企业的IDC服务器选择迁移上云,迁移上云的方式有很多,阿里云提供服务器迁移中心SMC来帮助用户迁移上云。使用SMC服务器迁移中心,将您的源服务器方便快捷地迁移至阿里云,支持的迁移源类型包括IDC服务…

2 ElasticaSearch安装

2 ElasticaSearch安装 2.1 安装 安装配置: 1、新版本要求至少jdk1.8以上。 2、支持tar、zip、rpm等多种安装方式。 在windows下开发建议使用ZIP安装方式。 3、支持docker方式安装 详细参见:https://www.elastic.co/guide/en/elasticsearch/refere…

Unity大面积草地渲染——3、使用GPUInstancing渲染大面积的草

大家好,我是阿赵。 这里开始讲大面积草地渲染的第三个部分,使用GPU Instancing来渲染大面积的草。 一、在不使用GPU Instancing时的渲染情况 为了能看性能明显一点,我写了个工具,在10乘10的范围内生成了一万棵草。 由于我的电…