机器学习-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

 



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


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


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


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


 



 



 

 程序见附件

 

 

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

A类是山水,B类是图片


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

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

 

你可能感兴趣的:(机器学习)