`
deepfuture
  • 浏览: 4321122 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:79301
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:68099
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:101182
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:280241
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:14534
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:65149
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:31183
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45067
社区版块
存档分类
最新评论

机器学习-K均值算法与欧氏距离进行图片分类

 
阅读更多

 一、欧氏距离

二维的公式

  ρ = sqrt( (x1-x2)^2+(y1-y2)^2 )

三维的公式

  ρ = sqrt( (x1-x2)^2+(y1-y2)^2+(z1-z2)^2 )

n维空间的公式

  n维欧氏空间是一个点集,它的每个点 X 可以表示为 (x[1],x[2],…,x[n]) ,其中 x[i](i = 1,2,…,n) 是实数,称为 X 的第i个坐标,两个点 A = (a[1],a[2],…,a[n]) 和 B = (b[1],b[2],…,b[n]) 之间的距离 ρ(A,B) 定义为下面的公式。

  ρ(A,B) =sqrt [ ∑( a[i] - b[i] )^2 ] (i = 1,2,…,n)

二、K均值算法

k均值(k-means)是聚类算法的一种,聚类分析是根据在数据中发现的描述对象及其关系的信息,将数据对象分组。其目标是,组内的对象相互之间是相似的,而不同组中的对象是不同的。组内的相似性越大,组间差别越大,聚类就越好。

举个例子,在二维平面上有几百个点,在笛卡儿坐标系中有(x,y)坐标,把它们点到纸上,问题是如何把它们分成不同组,每个组里点彼此之前都比较相近,而离其它组的成员又比较远。下面介绍的k均值就能干这种事。

 

基本k均值

基本k均值思想很简单,首先,选择k个初始质心,其中k是用户指定的参数,即所期望的簇的个数。每个点被指派到最近的质心,而指派到一个质心的点集为一个簇。然后根据指派到簇的点,更新每个簇的质心。重复指派和更新步骤,直到簇不发生变化,或等价的,直到质心不发生变化。

 

三、部分核心代码

 

 

        '计算相似度,欧氏距离
        xsd_label.Text = ""
        sumpic3 = 0
        For myjj As Integer = 0 To 2000
            If IsNothing(pic3tz(myjj)) Then
                Exit For
            End If
            sumpic3 += Pow(pic3tz(myjj) - sumpic1(myjj), 2)
        Next
        xsd1 = Sqrt(sumpic3)
        sumpic3 = 0
        For myjj As Integer = 0 To 2000
            If IsNothing(pic3tz(myjj)) Then
                Exit For
            End If
            sumpic3 += Pow(pic3tz(myjj) - sumpic2(myjj), 2)
        Next
        xsd2 = Sqrt(sumpic3)
        Dim mydis As Integer = kdistance.Text
        If mydis < 0 Then
            kdistance.Text = 50
            mydis = 50
        End If
        xsd_label.Text &= "与A类的距离:" & vbCrLf & xsd1 & vbCrLf
        xsd_label.Text &= "与B类的距离:" & vbCrLf & xsd2 & vbCrLf
        If xsd1 > mydis And xsd2 > mydis Then
            xsd_label.Text &= "不属A和B类"
        ElseIf xsd1 > xsd2 Then
            xsd_label.Text &= "属于B类"
        Else
            xsd_label.Text &= "属于A类"
        End If

 




 



 



 



 


 



 



 

 程序见附件

 

 

下面是这个小程序对山水和瀑布图片的分类

A类是山水,B类是图片





 

 

 

  • 大小: 90.8 KB
  • 大小: 86.4 KB
  • 大小: 112.2 KB
  • 大小: 109.8 KB
  • 大小: 100.5 KB
  • 大小: 113.4 KB
  • 大小: 120.9 KB
3
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics