精华内容
下载资源
问答
  • kmeans和knn相同点和不同点:

    千次阅读 2019-06-13 18:00:08
    kmeans和knn相同点和不同点: 一、K最近邻(kNN,k-NearestNeighbor)分类算法,找到最近的k个邻居(样本),在前k个样本中选择频率最高的类别作为预测类别。 步骤: 1)算距离:给定测试对象,计算它与训练集中的每...

    kmeans和knn相同点和不同点:

    一、K最近邻(kNN,k-NearestNeighbor)分类算法,找到最近的k个邻居(样本),在前k个样本中选择频率最高的类别作为预测类别。

    步骤:

    1)算距离:给定测试对象,计算它与训练集中的每个对象的距离 2)找邻居:圈定距离最近的k个训练对象,作为测试对象的近邻 3)做分类:根据这k个近邻归属的主要类别,来对测试对象分类

    二、K-Means算法-聚类:是一种无监督的学习,将相似的对象归到同一簇中。聚类的方法几乎可以应用所有对象,簇内的对象越相似,聚类的效果就越好。K-means算法中的k表示的是聚类为k个簇,means代表取每一个聚类中数据值的均值作为该簇的中心,或者称为质心,即用每一个的类的质心对该簇进行描述。

    步骤:

    1)首先,随机确定k个初始点的质心;

    2)然后将数据集中的每一个点分配到一个簇中(即为每一个点找到距其最近的质心,并将其分配给该质心所对应的簇);

    3)该步完成后,每一个簇的质心更新为该簇所有点的平均值

     

    区别1:聚类和分类最大的不同在于,分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来,所以,聚类有时也叫无监督学习。聚类分析试图将相似的对象归入同一簇,将不相似的对象归为不同簇

    区别2:K-means算法虽然比较容易实现,但是其可能收敛到局部最优解,且在大规模数据集上收敛速度相对较慢。

     

    分别的特点:

    KNN:

    1)KNN属于惰性学习(lazy-learning)

    这是与急切学习(eager learning)相对应的,因为KNN没有显式的学习过程!也就是说没有训练阶段,数据集事先已有了分类和特征值,待收到新样本后直接进行处理。在训练阶段只是把数据保存下来,训练时间开销为0,等收到测试样本后进行处理。

    (2)KNN的计算复杂度较高

    新样本需要与数据集中每个数据进行距离计算,计算复杂度和数据集中的数据数目n成正比,也就是说,KNN的时间复杂度为O(n),因此KNN一般适用于样本数较少的数据集。

    (3)k取不同值时,分类结果可能会有显著不同。

      优点:精度高,对异常值不敏感、无数据输入假定

      缺点:计算复杂度高、空间复杂度高

     

    K-means:

    1)在 K-means 算法中 K 是事先给定的,这个 K 值的选定是非常难以估计的。很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适;

    2)在 K-means 算法中,首先需要根据初始聚类中心来确定一个初始划分,然后对初始划分进行优化。这个初始聚类中心的选择对聚类结果有较大的影响,一旦初始值选择的不好,可能无法得到有效的聚类结果;

    3)该算法需要不断地进行样本分类调整,不断地计算调整后的新的聚类中心,因此当数据量非常大时,算法的时间开销是非常大的。

    K-means算法对于不同的初始值,可能会导致不同结果。解决方法:

    1.多设置一些不同的初值,对比最后的运算结果,一直到结果趋于稳定结束

    2.很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适。通过类的自动合并和分裂,得到较为合理的类型数目 K,例如 ISODATA 算法。

    K-means算法的其他改进算法:

    1.     k-modes 算法:实现对离散数据的快速聚类,保留了k-means算法的效率同时将k-means的应用范围扩大到离散数据。

    2.     k-Prototype算法:可以对离散与数值属性两种混合的数据进行聚类,在k-prototype中定义了一个对数值与离散属性都计算的相异性度量标准。

    KNN

    K-Means

    目的是为了确定一个点的分类

    目的是为了将一系列点集分成k类

    KNN是分类算法

    K-Means是聚类算法

    监督学习,分类目标事先已知

    非监督学习,将相似数据归到一起从而得到分类,没有外部分类

    训练数据集有label,已经是完全正确的数据

    训练数据集无label,是杂乱无章的,经过聚类后才变得有点顺序,先无序,后有序

    没有明显的前期训练过程,属于memory-based learning

    有明显的前期训练过程

    K的含义:“k”是用来计算的相邻数据数。来了一个样本x,要给它分类,即求出它的y,就从数据集中,在x附近找离它最近的K个数据点,这K个数据点,类别c占的个数最多,就把x的label设为c

    K的含义:“k”是类的数目。K是人工固定好的数字,假设数据集合可以分为K个簇,由于是依靠人工定好,需要一点先验知识

    K值确定后每次结果固定

    K值确定后每次结果可能不同,从 n个数据对象任意选择 k 个对象作为初始聚类中心,随机性对结果影响较大

    时间复杂度:O(n)

    时间复杂度:O(n*k*t),t为迭代次数

    相似点:都包含这样的过程,给定一个点,在数据集中找离它最近的点。即二者都用到了NN(Nears Neighbor)算法,一般用KD树来实现NN。

    K-means评估:

    1.轮廓系数

    轮廓系数(Silhouette Coefficient)结合了聚类的凝聚度(Cohesion)和分离度(Separation),用于评估聚类的效果。该值处于-1~1之间,值越大,表示聚类效果越好。具体计算方法如下:

    1. 对于第i个元素x_i,计算x_i与其同一个簇内的所有其他元素距离的平均值,记作a_i,用于量化簇内的凝聚度。
    2. 选取x_i外的一个簇b,计算x_i与b中所有点的平均距离,遍历所有其他簇,找到最近的这个平均距离,记作b_i,用于量化簇之间分离度。
    3. 对于元素x_i,轮廓系数s_i = (b_i – a_i)/max(a_i,b_i)
    4. 计算所有x的轮廓系数,求出平均值即为当前聚类的整体轮廓系数

    从上面的公式,不难发现若s_i小于0,说明x_i与其簇内元素的平均距离小于最近的其他簇,表示聚类效果不好。如果a_i趋于0,或者b_i足够大,那么s_i趋近与1,说明聚类效果比较好。

    2.SSE:

    一种用于度量聚类效果的指标是SSE,即误差平方和, 为所有簇中的全部数据点到簇中心的误差距离的平方累加和(SSE簇1+SSE簇2+...SSE簇n)。SSE的值如果越小,表示数据点越接近于它们的簇中心,即质心,聚类效果也越好。因为,对误差取平方后,就会更加重视那些远离中心的数据点。

     

    KNN和K-Means K值选取:

    KNN:

    有人用Cross Validation,有人用贝叶斯,还有的用bootstrap。

    K值的选择:对K近邻算法的结果会产生重大影响。

    K值较小:就相当于用较+小的领域中的训练实例进行预测,“学习”近似误差会减小, K值的减小就意味着整体模型变得复杂,容易发生过拟合;

    K值较大:就相当于用较大领域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单。k很大,那么可以减少干扰数据的影响,但是此时就导致了系统性偏差(K值太小会造成过度拟合),比如如果取k为总的训练数据数,那么每次投票肯定都是训练数据中多的类别胜利。显然训练数据的系统性偏差会影响结果。

    在实际应用中,K值一般取一个比较小的数值,例如采用交叉验证法(简单来说,就是一部分样本做训练集,一部分做测试集)来选择最优的K值。

    通常情况下,选择不同的k 会使得我们的算法的表现有好有坏,我们需要对 k 经过多种尝试,来决定到底使用多大的 k 来作为最终参数。k通常会在3~10直接取值,或者是k等于训练数据的平方根。比如15个数据,可能会取k=4。在实际中,我们应该通过交叉验证的办法来确定k值。

    K-means:

    在实际应用中,由于Kmean一般作为数据预处理,或者用于辅助分类贴标签。所以k一般不会设置很大。可以通过枚举,令k从2到一个固定值如10,在每个k值上重 复运行数次kmeans(避免局部最优解),并计算当前k的平均轮廓系数,最后选取轮廓系数最大的值对应的k作为最终的集群数目

     

    展开全文
  • http与websocket的相同点和不同点

    千次阅读 2016-09-14 15:55:16
    http与websocket的相同点和不同点

    websocket在html5中被提出,通过查阅网上相关博客文章,总结对比了一下http和websocket的相同点和区别。先说相同点

    1.都是基于TCP协议基础上,HTTP如此,websocket亦如此

    2.都是需要经过request,response阶段,其中websocket在发起请求的时候其实相当于借用了http的头部格式,区别就在于websocket请求头部有一个upgrade:websocket这样的字段(当然还有其他字段,但是这个字段最为关键)。

    3.如果请求失败,返回的错误编号都是相同的,例如:4**等

      再说不同点

    1.正如前面所说,websocket的请求的头部会跟http请求头部有区别,比如多了一个upgrade:websocket字段

    2.websocket只能是直连,不能通过代理来转发。究其原因应该怕如果通过代理转发的话,一个代理要承受如此多的websocket连接不释放,类似于一次DDOS攻击了。

    3.websocket传输的数据是二进制流,是以帧为单位的,http传输的是明文传输,是字符串传输

    4.websocket是全双工通信,有点类似于socket通信,在建立连接之后不必再像http那样你一个request我才回一个response了,想发就发,收发自如。

    以上就是我总结的http和websocket的相同点和不同点,如果有不对的地方,欢迎指正,一起进步!

    展开全文
  • 文章目录字符串,元组,列表的相同点和不同点:1.创建2.拼接3.索引和切片4.计数4.增删改查 字符串,元组,列表的相同点和不同点: 1.创建 空变量 列表: li=[] 字符串 sr='' 元组 tp=() 非空 列表 li...

    字符串,元组,列表的相同点和不同点:

    1.创建

    • 空变量

      • 列表:
      li=[]
      
      • 字符串
      sr=''
      
      • 元组
      tp=()
      
    • 非空

      • 列表
      li=[1,2,3,[1,2]]
      
      • 字符串
      sr='asdqasd '
      
      • 元组(若为单元素要在元素后加逗号)
      tp=(1,2,3,[1,3])
      

    2.拼接

    格式

    变量名+变量名
    

    eg:

    print(sr1+sr2)  #字符串
    print(tp1+tp2)  #元组
    print(li1+li2)  #列表
    

    3.索引和切片

    格式(取头不取尾)

    变量名[索引值]
    变量名[初始值:终止值:步长]
    

    eg:

    print(sr[i])                     #字符串索引
    print(sr[i:j:2])                 #字符串切片
    print(tp[i])                     #元组索引
    print(tp[i:j:2])                 #元组切片
    print(li[i])                     #列表索引
    print(li[i:j:2])                 #列表切片
    

    4.计数

    格式:

    变量名.count(指定元素)
    

    eg:

    sr.count(1)   #字符串
    li.count(1)   #列表
    tp.count(1)   #元组
    

    4.增删改查

    数据类型 函数 效果
    列表 append() 将参数整体作为一个参数插入
    列表 extend() 将参数内的元素取出分别加入
    列表 insert() 按照索引值添加但是也是把参数作为整体插入

    元组和字符串不可直接增加指定字符

    数据类型 函数 效果
    字符串 sr.strip() 删除两端的指定符号(中间不删)
    字符串 sr.lstrip() 删除左端的指定符号(中间不删)
    字符串 sr.rstrip() 删除右端的指定符号(中间不删)
    列表 remove() 删除参数值对应的参数(仅删除第一个遍历到的指定元素)
    列表 pop() 删除索引对应的元素,会返回被删除的元素(如果不指定索引默认删除最后一个元素)
    列表 clear() 直接清空列表
    元组 del 直接删除元组
    数据类型 函数 效果
    字符串 join() 指定字符插入到元素之间(产生结果为字符串)
    字符串 split() 指定字符分割字符串并去除该字符
    字符串 partition() 指定字符分割字符串并保留该字符
    字符串 sr.strip() 去除两端的指定符号(中间不删)
    字符串 sr.lower() 转小写
    字符串 sr.replace() 替换目标字符串(第三个参数为替换次数)
    字符串 sr.upper():转大写 转大写
    字符串 sr.swapcase() 大小写互换
    字符串 sr.capitalize 首字母大写
    列表 li[i]=a 直接赋值

    -查

    数据类型 函数 效果
    字符串 sr.find() 查找元素并返回第一次出现的元素索引值(范围默认为全域),查不到返回-1
    字符串 sr.index() 查找元素并返回第一次出现的元素索引值(范围默认为全域),查不到报错
    列表 enumerate() 枚举遍历
    元组 enumerate() 枚举遍历
    展开全文
  • Mongodb数据库中修改器$push和$addToSet的相同点和不同点 对于Mongodb数据库而言,数据的修改会牵扯到内容的变更,结构的变更(数组的变更),所以Mongodb数据库设计的时候就提供了一系列修改器的应用。下面是我...

    Mongodb数据库中修改器$push$addToSet的相同点和不同点


    对于Mongodb数据库而言,数据的修改会牵扯到内容的变更,结构的变更(数组的变更),所以Mongodb数据库设计的时候就提供了一系列修改器的应用。下面是我理解并总结的的其中两个修改器的相同点和不同点。

    1.相同点

    1. $push表示向指定的成员中追加内容(基本上都是数组),
      语法结构为:${'$push':{'成员':内容}}
      范例:向姓名为小七学生的课程中增加美术课程

      db.students.update({"name":"小七"},{"$push":{"course":"美术"}})

      在进行数据修改前,先查看姓名为小七的数据:

      db.students.find({"name":"小七"}).pretty()

      结果显示如下:
      小七的数据查询
      然后执行修改数据操作
      修改后的小七的数据
      可以看见原先小七数据中没有课程,执行修改操作后多了course数据。就说明,如果没有数组就重新创建数组。那么如果有数组后再执行操作了?

      db.students.update({"name":"小七"},{"$push":{"course":"舞蹈"}})

      这里写图片描述
      可以看出如果有,就直接数组内追加数据内容。
      那么如果添加的内容是一个数组呢,又会出现什么样的结果?

      db.students.update({"name":"小七"},{"$push":{"course":["数学","音乐"]}})

      这里写图片描述
      可以看到直接将数组追加到了课程中。

    2. $addToSet也表示向指定的成员中追加内容(与$push相似)。
      语法结构:${"$addToSet":{"成员":内容}}
      如果执行以上代码,其结构是一样的,大家可以自己试试。

    2.不同点

    但是两者是有区别的,$push是不进行数据过滤的,而$addToSet是进行数据过滤,简单的说就是$push不管你有没有,只要执行,就将内容追加到数组后面,而$addToSet看数组中有没有要追加的内容,如果有就不再追加,如果没有就进行追加。

    为了方便看结果,先执行下面代码

    db.students.update({"name":"小七"},{"$addToSet":{"course":"美术"}})

    $addToSet后结果
    可以看到执行代码后,数据内容没有在数组中追加,获取有人会说是不是$addToSet不管用呢,那么再执行下面的代码,看结果

    db.students.update({"name":"小七"},{"$addToSet":{"course":"音乐"}})

    这里写图片描述
    可以看到数据追加到数组中。
    接下来执行$push代码

    db.students.update({"name":"小七"},{"$push":{"course":"美术"}})

    这里写图片描述
    可以看到之前小七的课程中就有美术课程,但执行了$push代码后,依然将美术课程追加到课程数组后。

    展开全文
  • jsp和servlet有哪些相同点和不同点

    千次阅读 2012-06-14 09:32:06
    jsp和servlet有哪些相同点和不同点? jsp是servlet技术的扩展。本质上是servlet,jsp编译后是servlet。 不同点在于:servlet的应用逻辑是java文件中,没有和html分离开; 而jsp则是java代码和html组合成jsp文件。...
  • call()与apply()的作用和不同点

    千次阅读 多人点赞 2020-08-11 19:26:55
    call()与apply()的作用和不同点 call与apply都属于Function.prototype的一个方法 所以每个Function(就是每个方法)都有call,apply属性 它们的作用一样,只是使用方式不同 作用 他们两个的作用是一样的都是为了改变...
  • 栈和队列的一些相同点和不同点

    万次阅读 2018-08-23 09:07:36
    栈与队列的相同点: 1.都是线性结构。...栈与队列的不同点: 1.删除数据元素的位置不同,栈的删除操作在表尾进行,队列的删除操作在表头进行。 2.应用场景不同;常见栈的应用场景包括括号问题的求解,表达...
  • 指针和引用的相同点和不同点

    千次阅读 2019-09-02 16:51:51
    三、引用指针的相同 1、指针引用都可以优化传参效率 四、引用指针的不相同 1、指针占内存空间,引用不占内存空间 2、指针可以为空,但是引用不能为空 3、指针可以不初始化,但是引...
  • Canvas和SVG的相同点和不同点

    千次阅读 2016-07-27 18:09:36
    H5中CanvasSVG的相同点与不同点: 相同点: 1.都可在页面中绘制图形 不同点: 1.Canvas是H5的新标签,通常通过JS来绘图,SVG其实是XML用来描述二维图形的语言,SVG比Canvas历史悠久许多 2.Canvas画布是以像素点做...
  • JSP和Servlet有哪些相同点和不同点

    千次阅读 2019-06-13 20:47:42
    ServletJSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。 而JSP的情况是JavaHTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑...
  • 抽象类和接口的相同点和不同点

    千次阅读 2018-04-16 19:42:32
    不同点:1.接口比抽象类更加抽象,抽象类中可以定义构造方法(构造器),可以有抽象方法具体方法,而接口中的方法全部都是抽象方法(接口中也可以没有方法,这样的接口称为空接口)2.抽象类中的方法可以是private,protected...
  • html和xml的相同点和不同点

    千次阅读 2017-03-27 14:29:30
    xml与html在形式上很相似xmlhtml的区别第一,XHTML(或是html)只能用于web(也就是网页中),而xml则不同,它是信息交换的标准语言,他可以跨平台进行信息的交流,比如电脑与手机。第二,xml的标记灵活多变,你...
  • v-show和v-if指令的共同点和不同点

    千次阅读 2020-07-20 08:32:04
    2.不同点:实现本质⽅法不同,v-show本质就是通过控制css中的display设置为none,控制隐藏,只会编译⼀次;v-if是动态的向DOM树内添加或者删除DOM元素,若初始值为false,就不会编译了。⽽且v-if不停的销毁创建⽐...
  • 栈和队列的共同点和不同点

    万次阅读 2015-08-24 20:47:46
    共同点:都是只允许在端点处插入删除元素的数据结构; 不同点:栈是仅在栈顶进行访问,遵循后进先出的原则(LIFO);队列是在队尾插入数据,在队头删除数据(FIFO)
  • 队列都是线性表,都是限制了插入删除点的线性表(或者说是控制了访问点的... 不同点:栈的插入删除都在线性表的同一个端点,该点通称栈顶,相应地,不能插入删除的另一个端点通称栈底,其特性是 先进后出 ...
  • 文章目录PSOGA的相同点PSOGA不同点 粒子群算法(PSO)遗传算法(GA)都是优化算法,都力图在自然特性的基础上模拟个体种群的适应性,它们都采用一定的变换规则通过搜索空间求解。 PSOGA的相同点 都属于仿生...
  • JSP和 Servlet有哪些相同点和不同点?

    千次阅读 2018-05-03 18:30:52
    也就是jsp最终也是一个Servlet,本质上是Servlet的简易方式,这个 Servlet对外提供服务.2.Servlet JSP最主要的不同点在于 JSP侧重于视图,Servlet主要用于控制逻辑。Servlet如果要实现 html的功能,必须使用 Writer...
  • 栈和队列的相同点和不同点

    千次阅读 2017-12-26 16:42:57
    栈(Stack)队列(Queue)是两种操作受限的线性表。 (线性表:线性表是一种线性结构,它是一个含有n≥0个结点的有限序列,同一个线性表中的数据元素数据类型相同并且满足“一对一”的逻辑关系。 “一对一”...
  • TCP与UDP之间有什么相同点和不同点

    千次阅读 2010-04-12 15:32:00
    TCP与UDP之间有什么相同点和不同点 划分为使用TCP端口(面向连接如打电话)和使用UDP端口(无连接如写信)两种。 网络中可以被命名和寻址的通信端口是操作系统的一种可分配资源。由网络OSI(开放系统互联参考模型...
  • 不同点: 1.接口只有定义,其方法不能再接口中实现,只有实现接口的类才能实现接口中定义的方 法,而抽象类的方法可以再抽象类中被实现。 2.接口需要用implements实现,抽象类只能被继承(extends)。 3.设计理念不同...
  • Java 抽象类和接口的相同点和不同点

    千次阅读 2017-09-01 10:15:15
    两者相同 抽象类接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。 抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部...
  • 一、相同点(没有主键“_id”时): 当执行的SQL语句中没有主键“_id”时,insert save的操作完成一致,没有什么区别。 db.stud.insert({name:"zhangsan",age:1});...二、不同点(有主键“_id”...
  • 不同点: 1、JSP经编译后变成Servlet 2、jsp更擅长表现于页面显示,Servlet更擅长于逻辑控制 3、Servlet的应用逻辑是在java文件中,并且完全从表现层中的HTML里分离开来。而JSP的情况是JavaHTML可以组合成一个扩展...
  • 栈的理解操作:点击打开链接队列的理解操作:点击打开链接循环队列:点击打开链接栈(Stack)队列(Queue)是两种操作受限的线性表。线性表:线性表是一种线性结构,它是一个含有n≥0个结点的有限序列,同一个...
  • 存储过程与函数的相同点和不同点

    千次阅读 2015-12-23 14:08:00
    不同点:1、标识符不同。函数的标识符为FUNCTION,过程为:PROCEDURE。2、函数中有返回值,且必须返回,而过程可以没有返回值。3、过程无返回值类型,不能将结果直接赋值给变量;函数有返回值类型,调用时,除在...
  • 数据库中删除语句Drop、Delete、Truncate的相同点和不同点的比较(举例说明)   数据库删除语句的分别介绍: Delete:用于删除表中的行(注:可以删除某一行;也可以在不删除表的情况下(即意味着表的结构...
  • 相同点:JSPServlet本质上... 不同点:JSP侧重于视图,Servlet主要用于控制逻辑 Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及 HttpServlet对象获得。
  • 2020-10-22:谈谈java中的LongAdder和LongAccumulator的相同点和不同点
  • C#和JAVA的相同点和不同点

    千次阅读 2008-05-16 13:02:00
    因此,在C#中,右移操作符(即“>>”)对于无符号变量类型带符号变量类型(比如intlong)的处理方式不同。右移uintulong丢弃低位并把空出的高位设置为零;但对于intlong类型的变量,“>>”操作符丢弃低位,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 94,305
精华内容 37,722
关键字:

和不同点