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

机器学习-手写和本机数字识别-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是用户指定的参数,即所期望的簇的个数。每个点被指派到最近的质心,而指派到一个质心的点集为一个簇。然后根据指派到簇的点,更新每个簇的质心。重复指派和更新步骤,直到簇不发生变化,或等价的,直到质心不发生变化。

 

三、特征提取

 

1、第一步,参照网上曾经有人的做法:

为简单起见,我们使用了最简单的图像特征——黑色像素在图像中的分布来进行训练和测试。首先,我们把图像规范化为 32*32 像素的图片,然后按 2*2 分切成 16*16 共 256 个子区域,然后统计这 4 个像素中黑色像素的个数,组成 256 维的特征矢量,如下是数字 2 的一个特征矢量:
0 0 4 4 4 2 0 0 0 0 0 0 0 0 2 4 0 0 4 4 4 2 0 0 0 0 0 0 0 0 2 4 2 2 4 4 2 1 0 0 0 0 0 0 1 2 3 4 4 4 4 4 0 0 0 0 0 0 0 0 2 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 2 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 2 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 2 4 4 4 4 4 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 2 2 2 2 2 2 2 4 4 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 2 4 4 4 2 2 2 2 4 3 2 2 2 2 2 0 2 4 4 4 0 0 0 0 4 2 0 0 0 0 0 0 2 4 4 4 0 0 0 0 4 2 0 0 0 0 0 0 2 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 2 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 2 4 4 4
相应地,因为我们只需要识别 0~9 共 10 个数字,所以创建一个 10 维的矢量作为结果,数字相应的维置为 1 值,其它值为 0。数字 2 的结果如下:0 0 1 0 0 0 0 0 0 0

核心代码为:

           For m_i As Integer = 1 To 16
                myinitwidth = myendwidth
                myendwidth += jiange
                For myi As Integer = myinitwidth To myendwidth
                    For myj As Integer = myinitheight To myendheight
                        mycolor = myybcominfo.mybitmap.GetPixel(myi, myj)
                        If mycolor.B = 0 And mycolor.R = 255 And mycolor.G = 0 Then
                            While (Not Monitor.TryEnter(mymonitorobj))
                                Thread.Sleep(1)
                            End While
                            myjgtz(mycount) += 1
                            Monitor.Exit(mymonitorobj)
                            Thread.Sleep(1)
                        End If
                    Next
                Next
                mycount += 1
                myendwidth += 1
            Next

 

2、在第一步的特征基础上进一步加工,加上位置信息,以位置做为权重,调整第一步的特征矢量,核心代码为:

 

 

            For mi As Integer = 0 To 15
                If myjgtz(mi) > 0 Then
                    pictz(myii, myjj, m_j) += mi * myjgtz(mi)
                End If
                myjgtz(mi) = 0
            Next

 

3、第三步计算每个数字的K均值,核心代码为:

   

 '计算K均值
        Dim mmsum As Double = 0
        For myii As Integer = 0 To 9
            mystr &= vbCrLf & myii & "的样本均值是:" & vbCrLf
            For myk As Integer = 0 To 15
                mmsum = 0
                For myjj As Integer = 0 To 9
                    mmsum += pictz(myii, myjj, myk)
                    ProgressBar1.Value = count
                    count += 1
                Next
                mmsum /= 10
                ktz(myii, myk) = mmsum
                mystr &= ktz(myii, myk) & ","
            Next
            mystr &= vbCrLf
        Next

 

 

最后,进行待识别数字的特征值,然后进行欧氏距离对比

Dim jqtz(16) As Integer
                '欧氏距离 
        Dim mys(10) As Integer
        Dim temp As Integer = 1000000000
        Dim jgnum As Integer = -1
        For m_iii As Integer = 0 To 9
            mys(m_iii) = 0
            For m_jjj As Integer = 0 To 15
                mys(m_iii) += Pow(ktz(m_iii, m_jjj) - jqtz(m_jjj), 2)
            Next
            If mys(m_iii) < temp Then
                temp = mys(m_iii)
                jgnum = m_iii
            End If
        Next
        jg.Text = ""
        For m_iii = 0 To 9
            jg.Text &= m_iii & ":" & mys(m_iii) & vbCrLf
        Next
        jg.Text &= "结果是:" & jgnum

实验表明,算法有较高的识别率,进一步提高需要改进算法,对于仿宋的识别率最高,达90%,黑体、楷体等识别率也可以,手写数字,只要书写较规范,然后写的位置适当,在方框较中间,识别率较高,程序见附件,如果手写识别,建议使用手写的数字做为样本,这样识别率较高,如果是本机数字识别,可以自动生成样本数据。

 



 

 

 

 

 

 

 


 
 

 

 

 

 

 

 



 

 



 

 

 

 

  • 大小: 125.5 KB
  • 大小: 126.7 KB
  • 大小: 126.5 KB
  • 大小: 127 KB
  • 大小: 125.7 KB
  • 大小: 128.9 KB
  • 大小: 129.6 KB
  • 大小: 129.6 KB
  • 大小: 129.3 KB
  • 大小: 129.5 KB
  • 大小: 128.9 KB
1
5
分享到:
评论

相关推荐

    模式识别:三种方法进行手写数字识别程序包(附带minist数据集).zip

    在本项目中,我们主要探讨的是手写数字识别这一领域,这是模式识别的一个经典应用,广泛应用于自动柜员机(ATM)和智能手机等设备。手写数字识别主要依靠计算机视觉和机器学习技术来实现,这包括神经网络、人工智能...

    offline-character-recognise.rar_fisher_手写数字识别_模板匹配_神经网络 识别

    **手写数字识别**是图像处理和机器学习的一个重要应用。模板匹配法是一种直观的识别方法,它将待识别的数字图像与已知的数字模板进行比较,找到最佳匹配的模板,从而确定数字。这种方法依赖于高质量的模板库,对于...

    课程数据集_Kmeans_K._minist数据集_数据集_

    - **距离度量**:K-means依赖于欧氏距离,但在处理图像数据时,其他距离度量(如曼哈顿距离、切比雪夫距离或余弦相似度)可能更合适。 - **处理异常值**:异常值可能会影响聚类结果,需要考虑是否剔除或采用其他方法...

    模式识别实验报告:KNN最近邻算法

    MNIST数据集被广泛用于机器学习和计算机视觉领域的算法测试,因其庞大而多样化的样本集合,它能很好地评估算法在实际应用中的性能。实验中,为了提高计算效率,采用了随机抽取10000个样本作为实验数据集,并将数据...

    k-nearest-neighbour:Burak Kanber 启发了 k 近邻算法

    - 图像识别:识别手写数字、人脸识别等。 - 文本分类:情感分析、主题分类等。 - 推荐系统:基于用户历史行为推荐相似产品或服务。 - 医疗诊断:根据病患的特征预测疾病。 - 社交网络分析:用户兴趣推荐、社交网络...

    Kn近邻估计法

    **Kn近邻估计法**,简称KNN(K-Nearest Neighbors),是机器学习领域中最基础且重要的算法之一,特别是在分类与回归问题上。它是一种典型的实例驱动的学习方法,根据训练集中最近邻的样本来预测未知数据的类别或属性...

    数据预处理和特征工程.rar

    综上所述,数据预处理和特征工程是提升机器学习模型性能的关键步骤,它们涉及多种技术和策略,需要根据具体的数据集和问题进行灵活应用。通过深入理解和实践,我们可以更好地驾驭数据,从而构建出更准确、更具洞察力...

Global site tag (gtag.js) - Google Analytics