日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

vb.net机器学习-手写和本机数字识别-K均值和欧氏距离

發(fā)布時間:2025/3/12 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vb.net机器学习-手写和本机数字识别-K均值和欧氏距离 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、歐氏距離
二維的公式
  ρ = 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) 是實數(shù),稱為 X 的第i個坐標(biāo),兩個點 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)是聚類算法的一種,聚類分析是根據(jù)在數(shù)據(jù)中發(fā)現(xiàn)的描述對象及其關(guān)系的信息,將數(shù)據(jù)對象分組。其目標(biāo)是,組內(nèi)的對象相互之間是相似的,而不同組中的對象是不同的。組內(nèi)的相似性越大,組間差別越大,聚類就越好。

舉個例子,在二維平面上有幾百個點,在笛卡兒坐標(biāo)系中有(x,y)坐標(biāo),把它們點到紙上,問題是如何把它們分成不同組,每個組里點彼此之前都比較相近,而離其它組的成員又比較遠(yuǎn)。下面介紹的k均值就能干這種事。

基本k均值
基本k均值思想很簡單,首先,選擇k個初始質(zhì)心,其中k是用戶指定的參數(shù),即所期望的簇的個數(shù)。每個點被指派到最近的質(zhì)心,而指派到一個質(zhì)心的點集為一個簇。然后根據(jù)指派到簇的點,更新每個簇的質(zhì)心。重復(fù)指派和更新步驟,直到簇不發(fā)生變化,或等價的,直到質(zhì)心不發(fā)生變化。

三、特征提取

1、第一步,參照網(wǎng)上曾經(jīng)有人的做法:

為簡單起見,我們使用了最簡單的圖像特征——黑色像素在圖像中的分布來進(jìn)行訓(xùn)練和測試。首先,我們把圖像規(guī)范化為 3232 像素的圖片,然后按 22 分切成 16*16 共 256 個子區(qū)域,然后統(tǒng)計這 4 個像素中黑色像素的個數(shù),組成 256 維的特征矢量,如下是數(shù)字 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
相應(yīng)地,因為我們只需要識別 0~9 共 10 個數(shù)字,所以創(chuàng)建一個 10 維的矢量作為結(jié)果,數(shù)字相應(yīng)的維置為 1 值,其它值為 0。數(shù)字 2 的結(jié)果如下: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、在第一步的特征基礎(chǔ)上進(jìn)一步加工,加上位置信息,以位置做為權(quán)重,調(diào)整第一步的特征矢量,核心代碼為:

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

第三步計算每個數(shù)字的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

最后,進(jìn)行待識別數(shù)字的特征值,然后進(jìn)行歐氏距離對比

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 &= "結(jié)果是:" & jgnum

實驗表明,算法有較高的識別率,進(jìn)一步提高需要改進(jìn)算法,對于仿宋的識別率最高,達(dá)90%,黑體、楷體等識別率也可以,手寫數(shù)字,只要書寫較規(guī)范,然后寫的位置適當(dāng),在方框較中間,識別率較高,程序見附件,如果手寫識別,建議使用手寫的數(shù)字做為樣本,這樣識別率較高,如果是本機數(shù)字識別,可以自動生成樣本數(shù)據(jù)。

總結(jié)

以上是生活随笔為你收集整理的vb.net机器学习-手写和本机数字识别-K均值和欧氏距离的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。