机器学习算法之 K-means、层次聚类,谱聚类

k-means 和层次聚类都属于划分聚类,实际中最常用的是k-means,k-means效果不好的情况下才会采用其他聚类

K-means算法

K-means算法,也称为K-平均或者K-均值,是一种使用广泛的最基础的聚类算法

假设输入样本为T=X1,X2,…,Xm;则算法步骤为(使用欧几里得距离公式):

  • Step1:随机选择初始化的k个类别中心a1,a2,…ak;
  • Step2:对于每个样本Xi,将其标记位距离类别中心aj最近的类别j
  • 更新每个类别的中心点aj为隶属该类别的所有样本的均值,然后更新中心点\frac{\partial J}{\partial a_j}=\sum^{N_j}_i(x_i-a_j)\rightarrow^{ } 0 \Rightarrow a_j=\frac{1}{N_j}\sum^{N_j}_{i=1}x_i
  • 重复上面两步操作,直到达到某个中止条件

中止条件:

迭代次数、最小平方误差MSE(样本到中心的距离平方和)、簇中心点变化率(结果相同)

算法执行过程图:

K-means算法:

记K个簇中心分别为 a_1,a_2,...a_ka  ;每个簇的样本数量为N_1,N_2,...,N_KN;

使用平方误差作为目标函数(使用欧几里得距离),公式为:

J(a_1,a_2,...a_k)=\frac{1}{2}\sum^K_{J=1}\sum^{k_j}_{i=1}(\vec{x_i}-\vec{a_j})^2

要获取最优解,也就是目标函数需要尽可能的小,对J函数求偏导数,可以得到簇中心点a更新的公式为:
\frac{\partial J}{\partial a_j}=\sum^{N_j}_i(x_i-a_j)\rightarrow^{ } 0 \Rightarrow a_j=\frac{1}{N_j}\sum^{N_j}_{i=1}x_i

K-means中的问题

1、K-means算法在迭代的过程中使用所有点的均值作为新的质点(中心点),如果簇中存在异常点,将导致均值偏差比较严重

比如一个簇中有2、4、6、8、100五个数据,那么新的质点为24,显然这个质点离绝大多数点都比较远;在当前情况下,使用中位数6可能比使用均值的想法更好,使用中位数的聚类方式叫做K-Mediods聚类(K中值聚类)

2、K-means算法是初值敏感(K值的给定和K个初始簇中心点的选择)的,选择不同的初始值可能导致不同的簇划分规则

为了避免这种敏感性导致的最终结果异常性,可以采用初始化多套初始节点构造不同的分类规则,然后选择最优的构造规则

K-means算法的初值敏感示意图

K-means算法优缺点

缺点:

  • K值是用户给定的,在进行数据处理前,K值是未知的,不同的K值得到的结果也不一样;
  • 对初始簇中心点是敏感的
  • 不适合发现非凸形状的簇或者大小差别较大的簇
  • 特殊值(离群值)对模型的影响比较大

优点:

  • 理解容易,聚类效果不错
  • 处理大数据集的时候,该算法可以保证较好的伸缩性和高效率
  • 当簇近似高斯分布的时候,效果非常不错

K-means案例

基于scikit包中的创建模拟数据的API创建聚类数据,使用K-means算法对数据进行分类操作,并获得聚类中心点以及总的样本簇中心点距离和值

二分K-Means

解决K-Means算法对初始簇心比较敏感的问题,二分K-Means算法是一种弱化初始质心的一种算法,具体思路步骤如下:

  • 将所有样本数据作为一个簇放到一个队列中。
  • 从队列中选择一个簇进行K-means算法划分,划分为两个子簇,并将子簇添加到队列中。
  • 循环迭代第二步操作,直到中止条件达到(聚簇数量、最小平方误差、迭代次数等)。
  • 队列中的簇就是最终的分类簇集合。

从队列中选择划分聚簇的规则一般有两种方式;分别如下:

  • 对所有簇计算误差和SSE(SSE也可以认为是距离函数的一种变种),选择SSE最大的聚簇进行划分操作(优选这种策略)。
  •  选择样本数据量最多的簇进行划分操作。
  • SSE=\sum_{i=1}^n w_i(\vec{x}_i-\vec{a}_{x_i}), \,\,\, w_i表示对应的权重

K-Means++算法

解决K-Means算法对初始簇心比较敏感的问题,K-Means++算法和K-Means算法的区别主要在于初始的K个中心点的选择方面,K-Means算法使用随机给定的方式,K-Means++算法采用下列步骤给定K个初始质点:

  • STEP1:从数据集中任选一个节点作为第一个聚类中心
  • STEP2:对数据集中的每个点x,计算x到所有已有聚类中心点的距离和D(X),D(x)比较大的点作为下一个簇的中心。
  • STEP3:重复2和3直到k个聚类中心被选出来
  • STEP4:利用这k个初始的聚类中心来运行标准的k-means算法

缺点:由于聚类中心点选择过程中的内在有序性,在扩展方面存在着性能方面的问题(第k个聚类中心点的选择依赖前k-1个聚类中心点的值)

K-Means||算法

解决K-Means++算法缺点而产生的一种算法;主要思路是改变每次遍历时候的取样规则,并非按照K-Means++算法每次遍历只获取一个样本,而是每次获取K个样本,重复该取样操作O(logn)次,然后再将这些抽样出来的样本聚类出K个点,最后使用这K个点作为K-Means算法的初始聚簇中心点。实践证明:一般5次重复采用就可以保证一个比较好的聚簇中心点。

Canopy算法

Canopy算法属于一种“粗”聚类算法,执行速度较快,但精度较低,算法执行步骤如下:

  • 给定样本列表L=x_1,x_2,...,x_m以及先验值 r_1 ​和 r_2(r_1>r_2)
  • 从列表L中获取一个节点P,计算P到所有聚簇中心点的距离(如果不存在聚簇中心,那么此时点P形成一个新的聚簇),并选择出最小距离D(P,a_j)
  •  如果距离D小于r_1  ,表示该节点属于该聚簇,添加到该聚簇列表中
  • 如果距离D小于r_2 ,表示该节点不仅仅属于该聚簇,还表示和当前聚簇中心点非常近,所以将该聚簇的中心点设置为该簇中所有样本的中心点,并将P从列表L中删除
  • 如果距离D大于r_1,那么节点P形成一个新的聚簇,并将P从列表L中删除
  • 直到列表L中的元素数据不再有变化或者元素数量为0的时候,结束循环操作

Canopy算法得到的最终结果的值,聚簇之间是可能存在重叠的,但是不会存在某个对象不属于任何聚簇的情况

Canopy算法过程图形说明

Canopy算法常用应用场景

由于K-Means算法存在初始聚簇中心点敏感的问题,常用使用Canopy+K-Means算法混合形式进行模型构建

先使用canopy算法进行“粗”聚类得到K个聚类中心点

K-Means算法使用Canopy算法得到的K个聚类中心点作为初始中心点,进行“细”聚类

优点:

  • 执行速度快(先进行了一次聚簇中心点选择的预处理)
  • 不需要给定K值,应用场景多
  • 能够缓解K-Means算法对于初始聚类中心点敏感的问题

Mini Batch K-Means算法

Mini Batch K-Means算法是K-Means算法的一种优化变种,采用小规模的数据子集(每次训练使用的数据集是在训练算法的时候随机抽取的数据子集)减少计算时间,同时试图优化目标函数;Mini Batch K-Means算法可以减少K-Means算法的收敛时间,而且产生的结果效果只是略差于标准K-Means算法

算法步骤如下:

  1. 首先抽取部分数据集,使用K-Means算法构建出K个聚簇点的模型
  2. 继续抽取训练数据集中的部分数据集样本数据,并将其添加到模型中,分配给距离最近的聚簇中心点
  3. 更新聚簇的中心点值(每次更新都只用抽取出来的部分数据集)
  4. 循环迭代第二步和第三步操作,直到中心点稳定或者达到迭代次数,停止计算操作

K-Means和Mini Batch K-Means算法比较案例

基于scikit包中的创建模拟数据的API创建聚类数据,使用K-means算法和MiniBatch K-Means算法对数据进行分类操作,比较这两种算法的聚类效果以及聚类的消耗时间长度

聚类算法的衡量指标

均一性(类似正确率)

一个簇中只包含一个类别的样本,则满足均一性;其实也可以认为就是正确率(每个聚簇中正确分类的样本数占该聚簇总样本数的比例和)
p=\frac{1}{k} \sum_{i=1}^k \frac{N(C_i ==K_i)}{N(K_i)}

完整性(类似召回率)

同类别样本被归类到相同簇中,则满足完整性;每个聚簇中正确分类的样本数占该类型的总样本数比例的和。
r=\frac{1}{k} \sum_{i=1}^k \frac{N(C_i ==K_i)}{N(C_i)}

V-measure均一性和完整性的加权平均

V_\beta = \frac{(1+\beta^2) \cdot pr}{\beta^2 \cdot p + r}

调整兰德系数(ARI)

Rand index(兰德指数)(RI),RI取值范围为[0,1],值越大意味着聚类结果与真实情况越吻合。

RI=\frac{a+b}{C_2^{n_{samples}}}

其中C表示实际类别信息,K表示聚类结果,a表示在C与K中都是同类别的元素对数(也就是行),b表示在C与K中都是不同类别的元素对数(也就是列),C_2^{n_{samples}}C表示数据集中可以组成的对数,即从样本中取两个.

调整兰德系数(ARI,Adjusted Rnd Index),ARI取值范围[-1,1],值越大,表示聚类结果和真实情况越吻合。从广义的角度来将,ARI是衡量两个数据分布的吻合程度的。

ARI=\frac{(RI-E[RI])}{\max [RI]-E[RI]}    E[RI]表示均值

调整互信息(AMI)

调整互信息(AMI,Adjusted Mutual Information),类似ARI,内部使用信息熵    

S=\{s_1,s_2,...,s_N\} \quad U=\{U_1,U_2,...,U_R\} \quad V={V_1,V_2,...,V_C}

U_j = V_i \cap V_j = \emptyset \quad \cup _{i=1}^R U_i = \cup_{j=1}^C V_j = S \quad n_{ij} =|U_i \cap V_j|

P(i)=\frac{|U_i|}{N} \quad P(j)=\frac{|V_i|}{N} \quad H(U) = -\sum_{i=1}^R P(i) \log P(i) \quad H(V) = -\sum_{j=1}^C P^{'}(j) \log P^{'}(j)

MI(U,V)=\sum_{i=1}^R \sum_{j=1}^C P(i,j) \log \frac{P(i,j)}{P(i)P^{'}(j)} \quad P(i,j)=\frac{|U_i \cap V_j|}{N}

 AMI(U,V)=\frac{MI(U,V)-E\{MI(U,V)\}}{\max \{ H(U),H(V)\} -E\{MI(U,V)\}}

S 表示整个数据集,U 表示整个预测的数据集,V 实际数据集(y值),C 表示原始的,R 表示预测的。一个样本只属于一个簇,所以 U_i\cap U_j=\varnothing;一个样本只能预测出一种结果,所以 V_i \cap V_j=\varnothing,n_{ij}=|U_i\cap V_j |,表示实际和预测是相同的个数.

聚类算法的衡量指标-轮廓系数

簇内不相似度:计算样本i到同簇其它样本的平均距离为 a_{i} ; a_{i} 越小,表示样本i越应该被聚类到该簇,簇C中的所有样本的 a_{i} 的均值被称为簇C的簇不相似度。

簇间不相似度:计算样本i到其它簇 C_{j}​ 的所有样本的平均距离 b_{ij},b_{i}=\min\{​{b_{i1},b_{i2},...,b_{ik}}\}越大,表示样本i越不属于其它簇。

轮廓系数: s_{i} 值越接近1表示样本i聚类越合理,越接近-1,表示样本i应该分类到另外的簇中,近似为0,表示样本i应该在边界上;所有样本的 s_{i}的均值被称为聚类结果的轮廓系数

s(i)=\frac{b(i)-a(i)}{\max \{a(i),b(i)\}}

s(i)=\begin{cases}1-\frac{a(i)}{b(i)}, a(i)<b(i)\\0, a(i)=b(i)\\\frac{b(i)}{a(i)}-1, a(i)>b(i)\\\end{cases}

 

层次聚类方法

层次聚类方法对给定的数据集进行层次的分解或者合并,直到满足某种条件为止,传统的层次聚类算法主要分为两大类算法:

凝聚的层次聚类:AGNES算法(AGglomerative NESting)—>采用自底向上的策略。最初将每个对象作为一个簇,然后这些簇根据某些准则被一步一步合并,两个簇间的距离可以由这两个不同簇中距离最近的数据点的相似度来确定,聚类的合并过程反复进行直到所有的对象满足簇数目。

分裂的层次聚类:DIANA算法(DIvisive ANALysis)—>采用自顶向下的策略。首先将所有对象置于一个簇中,然后按照某种既定的规则逐渐细分为越来越小的簇(比如最大的欧式距离),直到达到某个终结条件(簇数目或者簇距离达到阈值)。

AGNES和DIANA算法优缺点

  • 简单,理解容易
  • 合并点/分裂点选择不太容易
  • 合并/分裂的操作不能进行撤销
  • 大数据集不太适合(数据量大到内存中放不下)
  • 执行效率较低O(t*n2),t为迭代次数,n为样本点数

AGNES算法中簇间距离

最小距离(SL聚类)
    两个聚簇中最近的两个样本之间的距离(single/word-linkage聚类法)
    最终得到模型容易形成链式结构
最大距离(CL聚类)
    两个聚簇中最远的两个样本的距离(complete-linkage聚类法)
    如果存在异常值,那么构建可能不太稳定
平均距离(AL聚类)
    两个聚簇中样本间两两距离的平均值(average-linkage聚类法)
    两个聚簇中样本间两两距离的中值(median-linkage聚类法)

层次聚类优化算法

BIRCH算法(平衡迭代削减聚类法)(重要):聚类特征使用3元组进行一个簇的相关信息,通过构建满足分枝因子和簇直径限制的聚类特征树来求聚类,聚类特征树其实是一个具有两个参数分枝因子和类直径的高度平衡树;分枝因子规定了树的每个节点的子女的最多个数,而类直径体现了对这一类点的距离范围;非叶子节点为它子女的最大特征值;聚类特征树的构建可以是动态过程的,可以随时根据数据对模型进行更新操作。

优缺点:

  • 适合大规模数据集,线性效率;
  • 只适合分布呈凸形或者球形的数据集、需要给定聚类个数和簇之间的相关参数。

CURE算法(使用代表点的聚类法):该算法先把每个数据点看成一类,然后合并距离最近的类直至类个数为所要求的个数为止。但是和AGNES算法的区别是:取消了使用所有点或用中心点+距离来表示一个类,而是从每个类中抽取固定数量、分布较好的点作为此类的代表点,并将这些代表点乘以一个适当的收缩因子,使它们更加靠近类中心点。代表点的收缩特性可以调整模型可以匹配那些非球形的场景,而且收缩因子的使用可以减少噪音对聚类的影响。

优缺点:

  • 能够处理非球形分布的应用场景。
  • 采用随机抽样和分区的方式可以提高算法的执行效率。

BRICH算法案例

密度聚类

密度聚类方法的指导思想: 只要样本点的密度大于某个阈值,则将该样本添加到最近的簇中。

这类算法可以克服基于距离的算法只能发现凸聚类的缺点,可以发现任意形状的聚类,而且对噪声数据不敏感。

计算复杂度高,计算量大。

常用算法:DBSCAN、密度最大值算法

DBSCAN算法

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)

一个比较有代表性的基于密度的聚类算法,相比于基于划分的聚类方法和层次聚类方法,DBSCAN算法将簇定义为密度相连的点的最大集合,能够将足够高密度的区域划分为簇,并且在具有噪声的空间数据商能够发现任意形状的簇。

DBSCAN算法的核心思想是:用一个点的ε邻域内的邻居点数衡量该点所在空间的密度,该算法可以找出形状不规则的cluster,而且聚类的时候事先不需要给定cluster的数量。

基本概念

ε邻域(ε neighborhood,也称为Eps):给定对象在半径ε内的区域。N_{\varepsilon }=\{y \in X:dist(x,y)\leqslant \varepsilon\}

密度(density):ε邻域中x的密度,是一个整数值,依赖于半径ε。p(x) = | N_{\varepsilon } \left ( x \right )|

MinPts定义核心点时的阈值,也简记为M。

核心点(core point):如果 p(x)>=M ,那么称 x 为 X 的核心点;记由X中所有核心点构成的集合为Xc并记Xnc=X\Xc表示由X中所有非核心点构成的集合。直白来讲,核心点对应于稠密区域内部的点。

边界点(border point): 如果非核心点x的ε邻域中存在核心点,那么认为x为X的边界点。由X中所有的边界点构成的集合为Xbd。边界点对应稠密区域边缘的点。x\in X_{nc}; \exists y\in X; y\in N_{\varepsilon}(x)\cap X_{c}

噪音点(noise point):集合中除了边界点和核心点之外的点都是噪音点,所有噪音点组成的集合叫做Xnoi;,噪音点对应稀疏区域的点。X_{noi}=X\setminus (x_{c}\cup X_{bd})

直接密度可达(directly density-reachable):给定一个对象集合X,如果y是在x的ε邻域内,而且x是一个核心对象,可以说对象y从对象x出发是直接密度可达的。x,y\in X; y\in X_{c}; y\in N_{\varepsilon}(x)

密度可达(density-reachable):如果存在一个对象链p1,p2…pm,如果满足pi+1是从pi直接密度可达的,那么称p1是从p1密度可达的。

密度相连(density-connected):在集合X中,如果存在一个对象o,使得对象x和y是从o关于ε和m密度可达的,那么对象x和y是关于ε和m密度相连的。

簇(cluster):一个基于密度的簇是最大的密度相连对象的集合C;满足以下两个条件:

  • Maximality:若x属于C,而且y是从x密度可达的,那么y也属于C。
  • Connectivity:若x属于C,y也属于C,则x和y是密度相连的。

算法流程

  • 如果一个点x的ε邻域包含多余m个对象,则创建一个x作为核心对象的新簇;
  • 寻找并合并核心对象直接密度可达的对象;
  • 没有新点可以更新簇的时候,算法结束。

算法特征描述:

  • 每个簇至少包含一个核心对象。
  • 非核心对象可以是簇的一部分,构成簇的边缘。
  • ·包含过少对象的簇被认为是噪声。

DBSCAN算法总结

优点:

  • 不需要事先给定cluster的数目
  • 可以发现任意形状的cluster
  • 能够找出数据中的噪音,且对噪音不敏感
  • 算法只需要两个输入参数
  • 聚类结果几乎不依赖节点的遍历顺序

缺点:

  • DBSCAN算法聚类效果依赖距离公式的选取,最常用的距离公式为欧几里得距离。但是对于高维数据,由于维数太多,距离的度量已变得不是那么重要。
  • DBSCAN算法不适合数据集中密度差异很小的情况。

密度最大值聚类算法(MDCA)

MDCA(Maximum Density Clustering Application)算法基于密度的思想引入划分聚类中,使用密度而不是初始点作为考察簇归属情况的依据,能够自动确定簇数量并发现任意形状的簇;另外MDCA一般不保留噪声,因此也避免了阈值选择不当情况下造成的对象丢弃情况。

MDCA算法的基本思路是寻找最高密度的对象和它所在的稠密区域;MDCA算法在原理上来讲,和密度的定义没有关系,采用任意一种密度定义公式均可,一般情况下采用DBSCAN算法中的密度定义方式。

MDCA相关概念

最大密度点:å¨è¿éæå¥å¾çæè¿°

有序序列: 根据所有对象与pmax的距离对数据重新排序:å¨è¿éæå¥å¾çæè¿°

密度阈值density0;当节点的密度值大于密度阈值的时候,认为该节点属于一个比较固定的簇,在第一次构建基本簇的时候,就将这些节点添加到对应簇中,如果小于这个值的时候,暂时认为该节点为噪声节点。

簇间距离:对于两个簇C1和C2之间的距离,采用两个簇中最近两个节点之间的距离作为簇间距离。

å¨è¿éæå¥å¾çæè¿°

聚簇距离阈值dist0:当两个簇的簇间距离小于给定阈值的时候,这两个簇的结果数据会进行合并操作。
M值:初始簇中最多数据样本个数。

算法流程

MDCA算法聚类过程步骤如下:

将数据集划分为基本簇;

  • 对数据集X选取最大密度点Pmax,形成以最大密度点为核心的新簇Ci,按照距离排序计算出序列Spmax,对序列的前M个样本数据进行循环判断,如果节点的密度大于等于density0,那么将当前节点添加Ci中;
  • 循环处理剩下的数据集X,选择最大密度点Pmax,并构建基本簇Ci+1,直到X中剩余的样本数据的密度均小于density0。

使用凝聚层次聚类的思想,合并较近的基本簇,得到最终的簇划分;

  • 在所有簇中选择距离最近的两个簇进行合并,合并要求是:簇间距小于等于dist0,如果所有簇中没有簇间距小于dist0的时候,结束合并操作

处理剩余节点,归入最近的簇。

  • 最常用、最简单的方式是:将剩余样本对象归入到最近的簇。

密度聚类算法案例

谱聚类

谱聚类是基于谱图理论基础上的一种聚类方法,与传统的聚类方法相比:具有在任意形状的样本空间上聚类并且收敛于全局最优解的优点。

通过对样本数据的拉普拉斯矩阵特征向量进行聚类,从而达到对样本数据进行聚类的目的;其本质是将聚类问题转换为图的最优划分问题,是一种点对聚类算法。

谱聚类算法将数据集中的每个对象看做图的顶点V,将顶点间的相似度量化为相应顶点连接边E的权值w,这样就构成了一个基于相似度的无向加权图G(V,E),于是聚类问题就转换为图的划分问题。基于图的最优划分规则就是子图内的相似度最大,子图间的相似度最小。

谱聚类的构建

谱聚类的构建过程主要包含以下几个步骤:

  • 构建表示对象相似度的矩阵W。
  • 构建度矩阵D(对角矩阵)。
  • 构建拉普拉斯矩阵L。
  • 计算矩阵L的前k个特征值的特征向量(k个列向量)。
  • 将k个列向量组成矩阵U。
  • 对矩阵U中的n行数据利用K-means或其它经典聚类算法进行聚类得出最终结果。

应用场景及存在的问题

应用场景:图形聚类、计算机视觉、非凸球形数据聚类等。

存在的问题:

  • 相似度矩阵的构建问题:业界一般使用高斯相似函数或者k近邻来作为相似度量,一般建议 使用k近邻的方式来计算相似度权值。
  • 聚类数目的给定。
  • 如何选择特征向量。
  • 如何提高谱聚类的执行效率。

谱聚类应用案例

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

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

相关文章

mapper注解的主要作用_Mybatis中mapper的xml解析详解

上一篇文章分析了mapper注解关键类MapperAnnotationBuilder&#xff0c;今天来看mapper的项目了解析关键类XMLMapperBuilder。基础介绍回顾下之前是在分析configuration的初始化过程&#xff0c;已经进行到了最后一步mapperElement(root.evalNode("mappers"))&#x…

机器学习之梯度下降法(GD)和坐标轴下降法(CD)

梯度下降法 梯度下降法&#xff08;Gradient Descent, GD&#xff09;常用于求解无约束情况下凸函数&#xff08;Convex Function&#xff09;的极小值&#xff0c;是一种迭代类型的算法&#xff0c;因为凸函数只有一个极值点&#xff0c;故求解出来的极小值点就是函数的最小值…

阿里云Https部署网站

0、开始之前 文章图片很多&#xff0c;注意流量 首先你得准备好一个已经备案成功的域名&#xff0c;并且有一个在阿里云的服务器部署了的网站。 然后就是你迫切的希望升级网站为HTTPS部署。 那么我们开始吧&#xff01; 1、申请CA证书 1.1登录阿里云控制台&#xff0c;选择菜单…

rabbitmq direct 多个消费者_一文解析 RabbitMQ 最常用的三大模式

Direct 模式所有发送到 Direct Exchange 的消息被转发到 RouteKey 中指定的 Queue。Direct 模式可以使用 RabbitMQ 自带的 Exchange: default Exchange&#xff0c;所以不需要将 Exchange 进行任何绑定(binding)操作。消息传递时&#xff0c;RouteKey 必须完全匹配才会被队列接…

C# 读取保存App.config配置文件的完整源码参考

最近出差在北京做一个小项目&#xff0c;项目里需要读取配置文件的小功能&#xff0c;觉得挺有参考意义的就把代码发上来给大家参考一下。我们选择了直接用微软的读取配置文件的方法。 这个是程序的运行设计效果&#xff0c;就是把这些参数可以进行灵活设置&#xff0c;灵活保存…

TensorFlow 简介

TensorFlow介绍 Tagline&#xff1a;An open-source software library for Machine Intelligence.Definition&#xff1a;TensorFlow TM is an open source software library fornumerical computation using data flow graphs.GitHub&#xff1a;https://github.com/tensorfl…

webbrowser设置为相应的IE版本

注册表路径&#xff1a; HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 或者HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 究竟选择哪一个…

jmeter压力测试_用Jmeter实现对接口的压力测试

一、多个真实用户对接口的压力测试1. 获取多个真实用户的token的两种方法&#xff1a;1)第一种&#xff1a;让开发帮忙生成多个token(多个用户账户生成的token)&#xff0c;导出为csv格式的文件(以下步骤均以该方法为基础)2)第二种&#xff1a;自己设置多个用户账户和密码&…

程序员成长之路(转)

什么时候才能成为一个专业程序员呢&#xff1f;三年还是五年工作经验&#xff1f;其实不用的&#xff0c;你马上就可以了&#xff0c;我没有骗你&#xff0c;因为专业程序员与业余程序员的区别主要在于一种态度&#xff0c;如果缺乏这种态度&#xff0c;拥有十年工作经验也还是…

嵌入式开发——PWM高级定时器

学习目标 加强掌握PWM开发流程理解定时器与通道的关系掌握多通道配置策略掌握互补PWM配置策略掌握定时器查询方式掌握代码抽取优化策略掌握PWM调试方式学习内容 需求 点亮8个灯,采用pwm的方式。 定时器 通道 <

TensorFlow 基本操作

Tensorflow基本概念 图(Graph):图描述了计算的过程&#xff0c;TensorFlow使用图来表示计算任务。张量(Tensor):TensorFlow使用tensor表示数据。每个Tensor是一个类型化的多维数组。操作(op):图中的节点被称为op(opearation的缩写)&#xff0c;一个op获得/输入0个或多个Tensor…

TensorFlow 分布式

一、简介 使用单台机器或者单个GPU/CPU来进行模型训练&#xff0c;训练速度会受资源的影响&#xff0c;因为毕竟单个的设备的计算能力和存储能力具有一定的上限的&#xff0c;针对这个问题&#xff0c;TensorFlow支持分布式模型运算&#xff0c;支持多机器、多GPU、多CPU各种模…

第五周测试

---恢复内容开始--- 一 视频知识 1 linux系统下如何区分内核态与用户态 在内核态&#xff1a;cs:eip可以是任意的地址&#xff0c;4G的内存地址空间 在用户态&#xff1a;cs:eip只能访问0x00000000—0xbfffffff的地址空间 2 系统调用的三层皮&#xff1a;xyz、system_call和sys…

latex公式对齐_Word 写公式最方便的方法

自从用上了word 2016之后&#xff0c;发现他的公式编辑器真香!真香!!他有了latex的优雅&#xff0c;又有了Mathtype的可视化效果&#xff0c;甚至更好哈&#xff0c;当编辑大量公式时也不会因为插件问题卡掉当前的努力。学起来也不复杂&#xff0c;反正是word. 强烈推荐。我们最…

路要怎么走?关于程序员成长的一点思考

程序员的我们&#xff0c;是否想过今后的路该怎么走、如何发展、技术怎样提高?其实这也是我一直在思考的问题。下面就此问题&#xff0c;分享下我的看法。因为我阅历有限&#xff0c;有什么说的不对的&#xff0c;大家见谅&#xff0c;千万不要喷…… 一、程序员应该打好基础 …

TensorFlow 常见API

数据类型转换相关API Tensor Shape获取以及设置相关API Tensor合并、分割相关API Error相关类API 常量类型的Tensor对象相关API 序列和随机Tensor对象相关API Session相关API 逻辑运算符相关API 比较运算符相关API 调试相关API 图像处理-编码解码相关API 图像处理-调整大小相关…

8.2 命令历史

2019独角兽企业重金招聘Python工程师标准>>> 命令历史 history //查看之前的命令.bash_history //存放之前敲过的命令&#xff0c;在 /root/ 目录下最大1000条 //默认参数值是1000条变量HISTSIZE/etc/profile中修改 //在其中可编辑HISTSIZE参数HISTTIMEFORMAT"…

TensorFlow 实例一:线性回归模型

代码 # -- encoding:utf-8 -- """ Create by ibf on 2018/5/6 """import numpy as np import tensorflow as tf# 1. 构造一个数据 np.random.seed(28) N 100 x np.linspace(0, 6, N) np.random.normal(loc0.0, scale2, sizeN) y 14 * x - …

Dapper的基本使用

Dapper是.NET下一个micro的ORM&#xff0c;它和Entity Framework或Nhibnate不同&#xff0c;属于轻量级的&#xff0c;并且是半自动的。也就是说实体类都要自己写。它没有复杂的配置文件&#xff0c;一个单文件就可以了。给出官方地址。 http://code.google.com/p/dapper-dot-n…

易语言神经网络验证码识别_递归神经网络 GRU+CTC+CNN 教会验证码识别

利用 NLP 技术做简单数据可视化分析Chat 简介&#xff1a;用递归神经网络采用端到端识别图片文字&#xff0c;递归神经网络大家最早用 RNN &#xff0c;缺陷造成梯度消失问题&#xff1b;然后采用了 LSTM&#xff0c;解决 RNN 问题&#xff0c;并且大大提高准确率&#xff1b;现…