当前人工智能技术实现的一种主要手段是机器学习,而机器学习能够解决的问题主要有三种:分类、聚类、回归,有监督的是分类,无监督的是聚类。所谓聚类,就是以一定的方法将一堆样本依它们本身的数据特性划分成不同的簇类,以达成不同的技术目的,k-means就是这样一种基础聚类算法。
对给定的样本集,k-means基于迭代的思想,由聚集中心点划定簇集,簇集反过来确定新的聚集中心点,周而复始,最终获得最佳划分的簇集。k-means中的k即想要划定的簇数,它是一个超参数,需由人工事先指定。样本的簇集划归由它与各个聚集中心点的距离来确定,划归到距离最近的那一个,其中距离的计算一般采用欧氏距离;新划定的簇集则进一步计算质心作为新的聚集中心,质心即样本向量的均值 \(c=\left( \bar{x^{(1)}},\bar{x^{(2)}},...,\bar{x^{(n)}} \right)\)
算法描述
输入:样本集 \(T=\left\{ x_1,x_2,...,x_N \right\}\),簇数k.
输出:质心集合 \(C=\left\{ c_1,c_2,...,c_k \right\}\),划分样本集\(D=\left\{ D_1,D_2,...,D_k \right\}\).
(1) 任意选定k个样本作为初始聚集中心.
(2) 划分簇类
1)对T中数据,计算与各个聚集中心的距离.样本x与聚集中心c的距离为
2)将样本划归到离得最近的聚集中心,形成簇类。
(3)计算质心作为聚集中心
对簇S,质心
其中
\(c^{(i)}=\frac{1}{M}\sum_{s=1}^{M}{x_{s}^{(i)}}\),\(M=\left| S \right|\).
(4)重复(2)-(3)步,直至质心不发生偏移或达到指定的迭代次数.
'''
由sklearn实现kmeans聚类。
'''
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
#初始化数据集
d1 = np.random.rand(18,2)
d2 = 1.5 + np.random.rand(17,2)
d3 = 3 + np.random.rand(20,2)
data = np.concatenate((d1,d2,d3),axis=0)
#定义kmeans模型,n_clusters为指定的簇数k
kmr = KMeans(n_clusters=3)
#数据计算
fit_kmr = kmr.fit(data)
#获取标签结果
rs_labels = fit_kmr.labels_
#获取每个簇类的中心点
rs_center_ids = fit_kmr.cluster_centers_
#绘图
#绘制数据点
plt.scatter(data[:,0],data[:,1],c=rs_labels,alpha=0.5)
#绘制质心
plt.scatter(rs_center_ids[:,0],rs_center_ids[:,1],c='red')
plt.show()
运行结果:

End.
我是Ruby和RubyonRails世界的新手。我已经阅读了一些指南,但我在使用以下语法时遇到了一些麻烦。我认为在Ruby中使用:condition语法来定义具有某种访问器的类属性,例如:classSampleattr_accessor:conditionend隐式声明“条件”属性的getter和setter。当我查看一些Rails示例代码时,我发现以下示例我并不完全理解。例如:@post=Post.find(params[:id])为什么它使用这种语法访问id属性,而不是:@post=Post.find(params[id])或者,例如:@posts=Post.find(:all):
例如,:符号-我正在尝试弄清楚:的含义,以及它与@的区别也没有任何符号。如果有真正有用的指南! 最佳答案 它是一个符号,是一种Ruby语言结构。符号类似于字符串,但thisblogpost解释细节。@表示类的实例变量:它基本上是一个在类实例的所有方法之间共享的变量。它与:无关。 关于ruby-:meaninrailsbeforeavariablename?是什么,我们在StackOverflow上找到一个类似的问题: https://stackoverflow
我一直在使用的一些开放源代码具有以下行作为函数声明:defparse_query(query=nil,options={},models=nil)“等于”符号对语句有什么影响?它只是使参数可选吗? 最佳答案 如果调用函数的人没有指定参数,它会设置参数的默认值。 关于ruby-on-rails-rubyrails:whatdoes"equals"symbolmeanasaparameter?,我们在StackOverflow上找到一个类似的问题: https:/
尝试将ActiveStorage用于简单的图像上传表单。它创建成功,但在提交时抛出错误:undefinedmethod`upload'fornil:NilClassDidyoumean?load这是它要我查看的block:@comment=Comment.create!params.require(:comment).permit(:content)@comment.image.attach(params[:comment][:image])redirect_tocomments_pathend这是在完整的Controller中:classCommentsController实际应该发
试验Ruby的基准模块...>>Benchmark.bm(7){|b|b.report('Report:'){s='';10000.times{s+='a'}}}usersystemtotalrealReport:0.1500000.0100000.160000(0.156361)“用户”、“系统”、“真实”的含义是什么? 最佳答案 这些时间与Unixtime命令或其他典型基准测试工具报告的时间相同:user:执行用户空间代码(即:您的代码)所花费的时间,system:执行内核代码所花费的时间和真实:执行代码所花费的“真实”时间(即
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whatdoesmap(&:name)meaninRuby?Post.all.map(&:id)会回来=>[1,2,3,4,5,6,7,................]map(&:id)是什么意思?特别是&。
我在aRailsCast中找到了这段代码:deftag_names@tag_names||tags.map(&:name).join('')endmap(&:name)中的(&:name)是什么意思? 最佳答案 它是tags.map(&:name.to_proc).join('')的简写如果foo是一个带有to_proc方法的对象,那么你可以将它作为&foo传递给一个方法,它将调用>foo.to_proc并将其用作方法block。Symbol#to_proc方法最初由ActiveSupport添加,但已集成到Ruby1.8.7中。这
这个问题在这里已经有了答案:Whatdocurlybracesinsideoffunctionparameterlistsdoines6?(3个答案)关闭4年前。我一直在关注thistutorial在使用Redux设置React时,我注意到一些我不熟悉的语法。函数参数定义里面的花括号是干什么的?例子:functionStream({tracks=[],onAuth}){#whatisgoingonhere?return(...#componentstuffhere);}这是React特有的吗?还是这与Babel或其他图书馆有关?我是这项技术的新手,所以不确定发生了什么。
我有以下代码来尝试让MarkerClusterer库为我的Googlemap工作,但由于某种原因它没有改变任何东西。我有一些用于循环的jinja2,但一切正常。你能看到任何错误吗?html{height:100%}body{height:100%;margin:0;padding:0}#map_canvas{height:100%}varmap;functioninitialize(){varcenterlocation={{centerlocation|json_encode|safe}};varLatLng=centerlocation.replace("(","").replac
在此JSMDN页面是这样写的:JavaScript1.8.1noteStartinginJavaScript1.8.1,settersarenolongercalledwhensettingpropertiesinobjectandarrayinitializers.我只是不明白这是要告诉我什么。 最佳答案 此代码片段:varo={};o.seven=7;和这个代码片段:varo={seven:7};通常是等价的;但如果它们前面有这段代码片段:Object.prototype.__defineSetter__('seven',fun