# VB NMF Ordered Connectivity Matrix Example

← All NMath Core Code Examples

```ï»¿Imports System.Text

Imports CenterSpace.NMath.Core
Imports System.IO

Public Class NMFOrderedConnectivityMatrixExample

' A .NET example in Visual Basic showing how to create an ordered connectivity matrix to display the results of
' NMF clustering.
'
' An ordered connectivity matrix is created by taking a connectivity matrix
' and reordering the rows and columns so that the most affiliated elements
' appear as clustered values along the diagonal. The reordering is determined
' as follows:
'
' First a hierarchical cluster analysis is performed on the elements
' represented in the connectivity matrix. For the purpose of clustering
' the elements represented in the connectivity matrix are labeled 0, 1,
' 2,...,n-1, where n is the number of the elements.
'
' Given two integers, i and j, the provided distance function should return
' the distance between the ith and jth elements. If no distance function is
' provided the default distance function returns the value 1.0 - aij for
' the distance between the ith and jth elements, where aij is the i, jth
' element of the connectivity matrix A.
'
' After the hierarchical clustering process, the leaf nodes of the
' dendrogram produced from the results are traversed in order to produce a
' permutation vector. This permutation vector is used to reorder the rows
' and columns of the input connectivity matrix, causing the most affiliated
' elements to appear as clusters of higher values along the diagonal.
'
' The connectivity matrix used in this example is an NMFConsensusMatrix which
' is the result of using a Nonnegative Matrix Factorization (NMF) to cluster a set
' of samples.  The display in the example is a "heat map" with tightly clustered
' elements colored in darker "hotter" colors (red, orange, yellow) which "cooler"
' colors (green and blue) being used for the more loosely affiliated elements.

Private HeatMap As Bitmap
' Colors to use in the bitmap.

Private Colors As New List(Of Color)()
' The heat map.

Sub Painting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
If (HeatMap Is Nothing) Then
Initialize()
End If
Dim BmpUpperLeftRow As Integer = 10
Dim BmpUpperLeftCol As Integer = 10
e.Graphics.DrawImage(HeatMap, BmpUpperLeftCol, BmpUpperLeftRow)
End Sub

Private Sub Initialize()

Height = 650
Width = 630

' Colors to use in the heat map. The colors range from
' reds and oranges, for highly affiliated elements, to
' greens and blues for loosely affiliated elements.

' First read in some data to cluster. In this example columns in the
' the data frame represent samples to which we will apply a Nonnegative
' Matrix Factorization (NMF) to get a connectivity matrix in the form of a
' NMFConsensusMatrix.
Dim Data As DataFrame = DataFrame.Load("nmf_data.dat", True, True, ControlChars.Tab, True)

' Order of the NMF.
Dim K As Integer = 3

' Number of factorizations to use in constructing the consensus matrix.
Dim NumberOfRuns As Integer = 25

' Construct the consensus matrix using a Gradient Descent, Constrained Least
' Squares iterative algorithm.
Dim ConsensusMatrix As New NMFConsensusMatrix(Of NMFGdClsUpdate)(Data, K, NumberOfRuns)

' Construct the ordered connectivity matrix from the consensus matrix.
Dim OrderedConsensusMatrix As New OrderedConnectivityMatrix(ConsensusMatrix)

' Construct and display the heat map by displaying the number in the ordered consensus matrix
' a pixels whose colors are "hotter" (red, orange) for higher values (highly affiliated), and
' cooler (green, yellow) for smaller values (less affiliated). Note that all the numbers in the
' consensus matrix are between 0 and 1.
Dim BlockSize As Integer = 600 / OrderedConsensusMatrix.Order
Dim S As Integer = (BlockSize + 1) * OrderedConsensusMatrix.Order
HeatMap = New Bitmap(S, S)
Dim RowOffset As Integer = 0
Dim ColumnOffset = 0
Dim I As Integer
Dim J As Integer
Dim C As Color
Dim BI As Integer
Dim BJ As Integer
For I = 0 To (OrderedConsensusMatrix.Order - 1)
For J = 0 To (OrderedConsensusMatrix.Order - 1)
C = GetColor(OrderedConsensusMatrix(I, J))
For BI = RowOffset To (RowOffset + BlockSize - 1)
For BJ = ColumnOffset To (ColumnOffset + BlockSize - 1)
HeatMap.SetPixel(BI, BJ, C)
Next
Next
ColumnOffset += BlockSize
Next
ColumnOffset = 0
RowOffset += BlockSize
Next

End Sub

Private Function GetColor(ByVal P As Double) As Color

If (P = 1.0) Then
Return Colors(0)
End If
If (P >= 0.9) Then
Return Colors(1)
End If
If (P >= 0.8) Then
Return Colors(2)
End If
If (P >= 0.7) Then
Return Colors(3)
End If
If (P >= 0.6) Then
Return Colors(4)
End If
If (P >= 0.5) Then
Return Colors(5)
End If
If (P >= 0.4) Then
Return Colors(6)
End If
If (P >= 0.3) Then
Return Colors(7)
End If
If (P >= 0.2) Then
Return Colors(8)
End If
If (P >= 0.1) Then
Return Colors(9)
End If
Return Color.MidnightBlue

End Function

End Class

```
← All NMath Stats Code Examples
Top