1. 程式人生 > >模糊聚類演算法(FCM)和硬聚類演算法(HCM)的VB6.0實現及其應用

模糊聚類演算法(FCM)和硬聚類演算法(HCM)的VB6.0實現及其應用

Private Function Fcm(ByRef Data() As Double, ByVal Cluster As Long, Optional ByVal CreateIniCenter As IniCenterMethod = IniCenterMethod.CreateByHcm, Optional AntiFuzzy As AntiFuzzyMethod = Max, Optional Exponent As Byte = 2, Optional Maxiterations As Long = 400, Optional MinImprovement As Double = 0.01, Optional ByRef CenterByHandle As Variant) As FcmInfo
    If ArrayRange(Data) <> 2 Then
        Fcm.ErrMsg = "資料只能為二維陣列"
        Exit Function
    End If
    Dim i As Long, j As Long, k As Long, l As Long, m As Long
    Dim DataNumber As Long, DataSize As Long
    Dim Temp As Double, Sum1 As Double, Sum2 As Double, Sum3 As Double, Index As Integer
    Dim OldCenter() As Double
    Fcm.TimeUse = GetTickCount
    DataNumber = UBound(Data, 1): DataSize = UBound(Data, 2)
    ReDim Fcm.center(1 To Cluster, 1 To DataSize) As Double
    ReDim Fcm.Degree(1 To Cluster, 1 To DataNumber) As Double
    ReDim Fcm.Class(1 To DataNumber) As Byte
    ReDim OldCenter(1 To Cluster, 1 To DataSize) As Double
    On Error GoTo ErrHandle:
    Randomize
    If CreateIniCenter = CreateRandom Then
        For i = 1 To Cluster
            For j = 1 To DataSize
                OldCenter(i, j) = Data(Rnd * DataNumber, j)    '產生隨機初始中心點
            Next
        Next
    ElseIf CreateIniCenter = CreateByHcm Then
        Dim HcmCenter As HcmInfo
        HcmCenter = Hcm(Data, Cluster)
        For i = 1 To Cluster
            For j = 1 To DataSize
                OldCenter(i, j) = HcmCenter.center(i, j)   '產生HCM初始中心點
            Next
        Next
    ElseIf CreateIniCenter = CreateByRandomZadeh Then
        ReDim RndDegree(1 To Cluster, 1 To DataNumber) As Double
        Dim RndSum As Double
        For i = 1 To Cluster
            For j = 1 To DataNumber
                RndDegree(i, j) = Rnd           '建立隨機的隸屬度
            Next
        Next
        For j = 1 To DataNumber
            RndSum = 0
            For i = 1 To Cluster
                RndSum = RndSum + RndDegree(i, j)
            Next
            For i = 1 To Cluster
                RndDegree(i, j) = RndDegree(i, j) / RndSum   '隸屬度矩陣每列之後必須為1
            Next
        Next
       
        For i = 1 To Cluster
            For j = 1 To DataSize
                Sum1 = 0: Sum2 = 0
                For k = 1 To DataNumber
                    Temp = Exp(Log(RndDegree(i, k)) * Exponent)  '其實就是RndDegree(i, k)^Exponent
                    Sum1 = Sum1 + Temp * Data(k, j)           '隸屬度的平方乘以數值
                    Sum2 = Sum2 + Temp                        '隸屬度的和
                Next
                OldCenter(i, j) = Sum1 / Sum2                 '得到聚類中心
            Next
        Next
    ElseIf CreateIniCenter = CreateByHand Then
        If IsMissing(CenterByHandle) Then
            Fcm.ErrMsg = "請提供初始聚類中心。."
            Exit Function
        ElseIf UBound(CenterByHandle, 1) <> Cluster Or UBound(CenterByHandle, 2) <> DataSize Then
            Fcm.ErrMsg = "手工提供的初始聚類中心維數有錯誤."
            Exit Function
        End If
        For i = 1 To Cluster
            For j = 1 To DataSize
                OldCenter(i, j) = CenterByHandle(i, j)
            Next
        Next
    End If

相關推薦

模糊演算法FCM演算法HCM)的VB6.0實現及其應用

Private Function Fcm(ByRef Data() As Double, ByVal Cluster As Long, Optional ByVal CreateIniCenter As IniCenterMethod = IniCenterMethod.CreateByHcm, Option

java中接口interface虛基abstract class的區別

private 特定 知識庫 價值 ceo 實現 相互 定義 協調 在Java語言中,abstract class和interface是支持抽象類定義的兩種機制。正是由於這兩種機制的存在,才賦予了Java強大的面向對象能力。abstract class和interface之

先來先服務演算法FCFS 短作業優先演算法SJF

先來先服務演算法(FCFS) FCFS是最簡單的排程演算法,既可以用作作業排程,也可以用作程序排程 這種演算法優先考慮系統中等待時間最長的作業(程序),而不管作業所需執行時間長短, 做法是從後備佇列中選擇幾個最先進入該佇列的作業,將它們調入記憶體,為它們分配資源和建

圖的遍歷演算法-深度優先搜尋演算法dfs廣度優先搜尋演算法bfs

一、前提須知圖是一種資料結構,一般作為一種模型用來定義物件之間的關係或聯絡。物件:頂點(V)表示;物件之間的關係或者關聯:通過圖的邊(E)來表示。一般oj題中可能就是點與點,也有可能是具體生活中的物體圖

短路與&&或 ||非短路與&或 |的區別

static ole pri args 驗證 java system string rgs 短路與是JAVA語言中的一個邏輯運算符,記作&& A&&B, 當A為false時,不去計算B的值而直接返回false;當A為true時,計算B的值。

說明反轉控制IOC面向方向編程AOP在spring中的應用

cto 代碼 規範 factory 聲明式 控制 反轉 反轉控制 方向 說明反轉控制(IOC)和面向方向編程(AOP)在spring中的應用 解答:Spring 核心容器(Core)提供Spring框架的基本功能。核心容器的主要組件是BeanFactory,它是工廠模式

全國外語水平考試WSK全國英語等級考試PETS的關係是什麼?

全國外語水平考試(WSK)是教育部舉辦的主要用於考查國家公派出國留學人員外語水平的考試,共包括英語(PETS- 5)、法語(TNF)、德語(NTD)、日語(NNS)和俄語(TПPЯ)五個語種的水平考試。從1999年9月開始,全國英語等級考試(PETS)第五級正式替代原有的公派出國留學人員英語水平考試(WSK.

序列模型5-----雙向神經網路BRNN深層迴圈神經網路Deep RNN

一、雙向迴圈神經網路BRNN 採用BRNN原因: 雙向RNN,即可以從過去的時間點獲取記憶,又可以從未來的時間點獲取資訊。為什麼要獲取未來的資訊呢? 判斷下面句子中Teddy是否是人名,如果只從前面兩個詞是無法得知Teddy是否是人名,如果能有後面的資訊就很好判斷了,這就需要用的雙向迴圈神經網路。

市場塵埃中的黃金?為什麼要價值投資以太幣ETH艾達幣CARDANO ADA

以太幣(ETH)價格最近持續下滑,在業界引起各種猜測,甚至有人預測以太幣會歸零;雖然其他分散式應用(Dapp)平臺的崛起現在很普遍,但以太幣不會歸零,而可能會再次上升到前所未有的水平。 為什麼這樣說?我們可以來看一下為什麼今天市場上有這麼多 “ 以太坊殺手”。

圖的深度優先遍歷DFS廣度優先遍歷BFS

1 建立測試圖(鄰接矩陣和鄰接表儲存形式) 首先建立一個圖用於後續程式碼的測試,在此以無向圖為例,且所有邊的權值都為1。儲存方式分別為鄰接矩陣和鄰接表(見上一篇介紹) 鄰接矩陣: class Graph{ constructor(v,vr){ let len = v.le

使用樹莓派RaspberryPissr進行免流 西電

使用樹莓派(RaspberryPi)進行免流 (西電) 安裝ubuntu系統 由於樹莓派官方的系統相容性並不是很好,所以還是刷一個比較穩定的ubuntu 下載所需要的映象檔案: 訪問此網站下載所需要的映象檔案,我所下載的是ubuntu-16.04-prei

C++中堆heap棧(stack)的區別面試中被問到的題目

說起會了解這個東西,還是比較尷尬的,在學校裡面老師一般不會講解C++的堆和棧,大多數人瞭解的堆和棧是資料結構裡面的概念,而這裡一般面試官想問的是C++的記憶體分割槽管理方式。 首先說明,在C++中,記憶體分為5個區:堆、佔、自由儲存區、全域性/靜態儲存區、常量儲存區 棧:

oracle叢集RAC主備資料同步DataGuard思路

Oracle主備庫資料同步使用DataGuard。Data Guard 是Oracle的遠端複製技術,它有物理和邏輯之分,但是總的來說,它需要在異地有一套獨立的系統,這是兩套硬體配置可以不同的系統,但是這兩套系統的軟體結構保持一致,包括軟體的版本,目錄儲存結構,以及資料的

寬字元unicode多位元組的轉換std::string與std::wstring轉換

#include <string> #include <windows.h> using namespace std; //Converting a WChar string to a Ansi string std::string W

一維插值interp1二維插值interp2

一、一維插值 1.定義 插值:已知f(x)的N個數據點,f(x)不知道。根據N個數據點估計任意點的函式值f(x)。 2. interp1函式 呼叫格式: yi = interp1(x,y,xi,method)    其中x,y為已知的資料點,通常xi為比x更加密集的資料點,

Linux 中 ln 軟連線-s 連線-d 的區別

軟連線 先說軟連線,一個認為這個比較好理解,一個也是因為柿子專挑軟的捏啊,哈哈,建立一個軟連線的命令: 【ln -s 原始檔名 軟連線檔名】 使用ls命令檢視檔案資訊可以驗證一下,對檔案和目錄都可以建立軟連線 在網上看到很多人說快捷方式這個比喻,個人認

圖的深度優先遍歷DFS廣度優先遍歷BFS--解析

圖的資料結構不像二叉樹那樣,有明顯的父子節點和兄弟節點的關係,它只有一個關係就是鄰接關係。故對圖中頂點的訪問要採用標誌陣列(來確定改結點是否被訪問,去除重複訪問)。並且對圖的深度遍歷採用遞迴的方式是較高效的。 1.深度遍歷(DFS) #include<iostream

理清jsp的filter過濾器struct2的攔截器Interceptor

先放著,待會寫 先記住下面這幾點: 1、filter是servlet,jsp裡面的東西,應該說是屬於規範了,而攔截器是struts的東西,不通用。 2、一個請求,get,post等方式,到後臺,必須先經過filter,然後經過Interceptor,最後在通過在filter

二叉樹的深度優先遍歷廣度優先遍歷佇列

前序,中序和後序遍歷都是深度優先遍歷的特例 :所以直接先序中序後續遍歷也可以 深度優先遍歷(棧,先壓右節點,再壓左節點) 也就深入的遍歷,沿著每一個分支直到走到最後,然後才返回來遍歷剩餘的節點。二叉樹不同於圖,圖需要標記節點是否已經訪問過,因為可能會存在環,而二叉樹不會

單軸快排SinglePivotQuickSort雙軸快排DualPivotQuickSort及其JAVA實現

快速排序使用的是分治思想,將原問題分成若干個子問題進行遞迴解決。通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列