python聚类分析成绩反思_机器学习python实践——二分K-means聚类

说这算法之前的话,前期的准备工作,请看我前面的博客。上一篇,我说到了K-means聚类算法,但是有很多的不足,有很多能够改进的地方,例如,怎样使得聚类效果达到全局最优(可能的最好结果)呢?

那么接下来的二分K-means算法就来解决这个问题了。

一、二分K-means算法

二分K均值算法的基本思想:首先将所有的点作为一个簇来对待,并对这个簇进行K均值聚类,然后计算划分开的两个簇的总误差平方和SSE(Sum of Squared Error),将SSE较小的那个簇经行划分,以此类推,每次repeat对每个Current簇经行SSE比较,每次都是对最小SSE的簇划分(这样好贪心啊),最后当簇的个数达到K值的时候,那么整个循环就over了,我们的聚类也是完成了,最后就是显示结果了。

算法伪代码如下:

##############################################################################

###########################################################################

将所有的点看成一个簇

当簇的数目小于K时

对于每一个簇

计算总误差

在给定的簇上面进行K均值聚类(K=2)

计算将该簇一分为二后的总误差

选择使得误差最小的那个簇进行划分操作

############################################################################################

二、python实现

数据集和需要的包和安装过程,我前面的博客中都有了详细的讲解,因为二分K-means的基础还是K聚类,所以我把他们放一起了,这样的话,统一的接口,统一的数据类型,这真是极好的,接下来,我就直接贴代码了。

k-means.py

###########################################################################

def euclDistance1(point1,point2):

b=sum(np.power(point1-point2,2))

return

np.sqrt(b[0,0]+b[0,1])

#init points with random using list

def initPoints1(tt,k):

num,dim=tt.shape

points=np.zeros((k,dim))

r_list=range(0,80)

b_list=random.sample (r_list,k)

for

i in range(k):

index1=int(random.uniform (0,num))

points[i,:]=tt[index1,:]

return

points

#kmeans cluster using list

def

kmeans1(tt,k):

clusterState=True

clusterAssment=np.zeros([len(tt),2])

points=initPoints1(tt,k)

while

clusterState:

clusterState=False

for i in range(len(tt)):

minDist=euclDistance1(points[0,:], tt[i,:])

#print(minDist)

#minDist=100000.0

minIndex=0

for j in range(k):

distance = euclDistance1(points[j,:],tt[i,:])

if distance < minDist:

minDist=distance

minIndex=j

#calculate the count of each cluster

#update cluster

if clusterAssment[i, 0] != minIndex:

clusterState = True

clusterAssment[i, :] = minIndex, minDist**2

for j in range(k):

sumX=0

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

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

相关文章

apache spark_如何将自定义数据源集成到Apache Spark中

apache spark如今&#xff0c;流数据是一个热门话题&#xff0c;而Apache Spark是出色的流框架。 在此博客文章中&#xff0c;我将向您展示如何将自定义数据源集成到Spark中。 Spark Streaming使我们能够从各种来源流式传输&#xff0c;同时使用相同的简洁API访问数据流&#…

python采用函数编程模式_浅谈Python 函数式编程

匿名函数lambda表达式什么是匿名函数&#xff1f;匿名函数&#xff0c;顾名思义就是没有名字的函数&#xff0c;在程序中不用使用 def 进行定义&#xff0c;可以直接使用 lambda 关键字编写简单的代码逻辑。lambda 本质上是一个函数对象&#xff0c;可以将其赋值给另一个变量&a…

【安卓开发 】Android初级开发(一)控件通用属性

控件通用属性 match_parent 是指和父容器宽高相等的值&#xff0c;其他的同理可证。 android:layout_marginTop"XXXXXXdp" 距离顶部的距离 Android TextView属性详解 该控件相关属性 Android EditText属性大全 相关属性查看地址 事件监听处理 package com.examp…

dynamodb java_使用Java将项目插入DynamoDB表

dynamodb java在上一篇文章中&#xff0c;我们学习了如何使用Java创建DynamoDB表。 下一步是将项目插入到先前创建的DynamoDB表中。 请记住&#xff0c;对于插入操作&#xff0c;最基本的步骤是指定主键。 对于表用户&#xff0c;主键是属性电子邮件。 您可以根据需要添加任意…

成都python数据分析师职业技能_数据分析师需要什么技能,数据分析行业都有什么职业?...

就目前而言&#xff0c;很多人看到了数据分析行业的光明前景&#xff0c;于是就想进入数据分析的行业中&#xff0c;但是&#xff0c;想成为一名合格的数据分析师&#xff0c;需要掌握很多的技能&#xff0c;那么一名合格的数据分析师需要掌握哪些技能呢&#xff1f;现在的数据…

【安卓开发 】Android初级开发(零)各种布局

线性布局的重要属性 (LinearLayout) 相关属性链接 layout_width 和 layout_height是布局器相对于外部构件的一个宽高距离。 layout_margin是指与外部控件的整个边缘距离。 padding是指与控件的内边距离 android:orientation 方向作用于整个布局中的所有控件 android:layo…

jboss fuse 教程_JBoss Fuse:使用JEXL的动态蓝图文件

jboss fuse 教程在本文中&#xff0c;我将展示如何在Apache Aries Blueprint xml文件中添加一些内联脚本。 我不一定会称其为最佳实践&#xff0c;但我一直有这样的想法&#xff1a;这种能力可能有用。 可能当我被迫使用xml来模拟命令式编程结构&#xff08;例如使用Apache An…

认证令牌_Java应用程序的令牌认证

认证令牌建筑物身份管理&#xff0c;包括身份验证和授权&#xff1f; 尝试Stormpath&#xff01; 我们的REST API和强大的Java SDK支持可以消除您的安全风险&#xff0c;并且可以在几分钟内实现。 注册 &#xff0c;再也不会建立auth了&#xff01; 2016年5月12日更新&#xf…

java package报错_Java基础知识总结 - 超详细篇(上)

1&#xff0c;JDK&#xff1a;Java Development Kit&#xff0c;java的开发和运行环境&#xff0c;java的开发工具和jre。2&#xff0c;JRE&#xff1a;Java Runtime Environment&#xff0c;java程序的运行环境&#xff0c;java运行的所需的类库JVM(java虚拟机)。3&#xff0c…

【安卓开发 】Android初级开发(二)Activity启动模式

Activity页面跳转在业务逻辑页面添加以下代码 //跳转到下一个activityIntent intent new Intent(this,MainActivity2.class);startActivity(intent); Activity四种启动模式 具体链接

weblogic 建立websocket连接报404_基于 Serverless 与 Websocket 的聊天工具实现

传统业务实现 Websocket 并不难&#xff0c;然而函数计算基本上都是事件驱动&#xff0c;不支持长链接操作。如果将函数计算与 API 网关结合&#xff0c;是否可以有 Websocket 的实现方案呢&#xff1f;API 网关触发器实现 WebsocketWebSocket 协议是基于 TCP 的一种新的网络协…

java的默认值规则_Java 8:默认方法解析规则

java的默认值规则随着Java 8中默认方法的引入&#xff0c;一个类现在可以从多个位置&#xff08;例如另一个类或接口&#xff09;继承相同的方法。 在这种情况下&#xff0c;可以使用以下规则来确定选择哪种方法&#xff1a; 类或超类方法声明始终优先于默认方法 否则&#x…

【Android OpenGL ES 开发 (五)】纹理相关(二)

纹理放大和缩小的过滤参数 1.使用线性插值效果最佳 2.通过修改 float maxscale 4.0f //放大 float minscale 0.5f //缩小 vertices[0].mPosition[0]0.5f * maxscale; //x vertices[0].mPosition[1]0.5f * maxscale; //y 实现模糊效果 1.利用显卡的并行计算的强大功能对…

python与sqlite3_sqlite3与python2.5,pysqlite和apsw有什么区别

我想知道python2.5,pysqlite和apsw的sqlite3之间的区别&#xff1f;当我尝试使用python2.5在windows vista上安装pysqlite时,我有一个颠簸的运行,请参阅以下内容&#xff1a;>从http://sqlite.org/download.html下载sqlite并将它们解压缩到windows / system32文件夹并将sqli…

monolith_将Java EE Monolith雕刻成微服务

monolith在介绍了为什么微服务应该由事件驱动的简介博客之后&#xff0c;我想采取一些其他步骤&#xff0c;并在有关博客的同时准备我即将进行的一系列演讲&#xff08;在jBCNconf和Red Hat Summit上与您见面&#xff09; 。旧金山 &#xff09;。 在Twitter christianposta上关…

【H.264/AVC视频编解码技术】第四章【SPS序列参数集】

1.H264码流中重要的组成部分,保存针对整个视频序列的参数,丢失SPS的码流通常无法正常解码。 2.SPS信息的保存位置: 封装格式: FLV======会保存在 Tag中的Video Tag Data 部分,会有AVC VIDEO PACKET结构。SPS就包含在其中。 MP4===== H264裸码流: 保存…

spring内容协商管理_Spring框架中的内容协商

spring内容协商管理1.简介 使用BeanNameViewResolver完成的工作就是&#xff0c;我们刚刚在Spring上下文中创建了多个bean视图以生成预期的输出。 Spring很快引入了内容协商策略 &#xff0c;该策略可以使用传统的RESTful ResponseBody方法和HTTP消息转换器&#xff0c;以JSON或…

二叉树专题

二叉树 &#xff08;一&#xff09;二叉树的三种遍历方式&#xff1a; 前序遍历 &#xff1a; 1 2 4 5 3 6 7 &#xff1b; 中序遍历 &#xff1a; 4 2 5 1 6 3 7 &#xff1b; 后序遍历 &#xff1a; 4 5 2 6 7 3 1 &#xff1b; 本质是在递归序的基础上…

echart中拆线点的偏移_Real BIM | Rhino+Grasshopper在双曲异形玻璃幕墙中的应用

转载请联系并注明来源你好&#xff0c;我以自己所做的项目为例&#xff0c;介绍一下我的认知里&#xff0c;BIM技术对于真实项目的作用。案例是一个异形、双曲面的玻璃屋盖幕墙系统。如效果图所示&#xff0c;玻璃屋盖呈波浪状&#xff0c;塔楼装饰条与屋盖装饰条需要无缝连接。…

【安卓开发】Android初级开发(okhttp3发送带header与带参数的GET请求)

1.首先需要先加入相应依赖 dependencies{implementation com.squareup.okhttp3:okhttp:3.13.1 implementation com.squareup.okio:okio:2.2.2} 2.加入互联网权限 <!-- 互联网 --><uses-permission android:name"android.permission.INTERNET" /> <!…