nuget server logo nuget api documents
↑

API Docs / Microsoft.VisualBasic.MachineLearning.t-SNE / tSNE

tSNE

Full name Microsoft.VisualBasic.MachineLearning.tSNE.tSNE Assembly Microsoft.VisualBasic.MachineLearning.t-SNE Members 27

01 Syntax

Microsoft.VisualBasic.MachineLearning.tSNE.tSNE

02 Methods

NameOverloadsSummary
.ctor 2 创建一个 t-SNE 降维器
EffectiveK 1 Barnes-Hut 模式下每行实际保留的近邻数量
GetEmbedding 1 return current solution
InitDataRaw 1 this function takes a set of high-dimensional points and creates matrix P from them using gaussian kernel
SyncFlatFromY 1 把嵌入结果由锯齿数组同步到一维镜像
SyncYFromFlat 1 把嵌入结果由一维镜像同步回锯齿数组

03 Properties

NameOverloadsSummary
nthreads 1 并行计算所使用的线程数量
UseBarnesHut 1 是否启用 Barnes-Hut 近似
theta 1 Barnes-Hut 近似阈值
LeafSize 1 Barnes-Hut 空间划分树的叶子容量
KNN 1 Barnes-Hut 模式下每一行保留的近邻数量
SparseNonZeros 1 Barnes-Hut 模式下稀疏概率矩阵的非零条目数量;精确模式下为 0

04 Fields

NameOverloadsSummary
mPerplexity 1 effective number of nearest neighbors
mEpsilon 1 learning rate
mP 1 联合概率矩阵(精确模式下的稠密 N×N,行主序)
mSparseP 1 联合概率矩阵(Barnes-Hut 模式下的稀疏 CSR 表示)
mY 1 Y is an array of 2-D points that you can plot
mYFlat 1 Y 的一维行主序镜像,索引为 i * mDim + d
mGains 1 step gains to accelerate progress in unchanging directions(行主序一维,长度 N*dim)
mYStep 1 momentum accumulator(行主序一维,长度 N*dim)
bhNegF 1 Barnes-Hut 模式下的斥力累加器
bhPosF 1 Barnes-Hut 模式下的引力累加器
mGrad 1 梯度,行主序一维数组,长度为 N*dim
mDim 1 dimensionality of the embedding
opts 1 并行度封装,随 tSNE.nthreads 一同更新
mThreads 1 实际的并行线程数

05 Members

method .ctor overload 2 #
#ctor(Double, Int32, Double)

创建一个 t-SNE 降维器,并行度取当前主机的 CPU 核心数

Parameters
NameTypeDescription
perplexityDouble

困惑度

dimInt32

嵌入维度,通常为 2 或 3

epsilonDouble

学习率

method .ctor #
#ctor(Double, Int32, Double, Int32, Boolean)

创建一个 t-SNE 降维器

Parameters
NameTypeDescription
perplexityDouble

困惑度

dimInt32

嵌入维度,通常为 2 或 3

epsilonDouble

学习率

nthreadsInt32

并行线程数,<= 0 时取当前主机的 CPU 核心数

useBarnesHutBoolean

是否启用 Barnes-Hut 近似,默认关闭(走精确路径)

method EffectiveK #
EffectiveK

Barnes-Hut 模式下每行实际保留的近邻数量

method GetEmbedding #
GetEmbedding

return current solution

method InitDataRaw #
InitDataRaw(IEnumerable(Of Double()))

this function takes a set of high-dimensional points and creates matrix P from them using gaussian kernel

Parameters
NameTypeDescription
XIEnumerable(Of Double())

-

method SyncFlatFromY #
SyncFlatFromY

把嵌入结果由锯齿数组同步到一维镜像

method SyncYFromFlat #
SyncYFromFlat

把嵌入结果由一维镜像同步回锯齿数组

property nthreads #
nthreads

并行计算所使用的线程数量

Remarks

默认取当前主机的 CPU 逻辑核心数(App.CPUCoreNumbers)。 由于 t-SNE 的 O(N^2) 热循环是内存带宽受限而非算力受限的, 实际的加速比会低于线程数,调低此值有时反而更快。

property UseBarnesHut #
UseBarnesHut

是否启用 Barnes-Hut 近似

Remarks

默认关闭,此时走与改造前完全一致的精确稠密路径。 启用之后概率矩阵改为稀疏表示、梯度改用空间划分树做远场近似, 时间与内存复杂度由 O(N^2) 降至 O(N log N) 与 O(N·k), 代价是结果为近似值(由 tSNE.theta 与近邻数控制精度)。

注意:必须在调用 tSNE.InitDataRaw() 或 tSNE.InitDataDist() 之前设置, 因为它决定了概率矩阵的构建方式。

property theta #
theta

Barnes-Hut 近似阈值

Remarks

当某个 cell 的角宽度(宽度 / 到质心的距离)小于该阈值时, 就用其质心一次性近似整棵子树。取值越大越快越粗糙,取 0 退化为精确计算, 参考实现中的经验取值为 0.5。仅当 tSNE.UseBarnesHut 为 True 时生效。

property LeafSize #
LeafSize

Barnes-Hut 空间划分树的叶子容量

Remarks

叶子内的所有点在遍历时会被其质心所替代,因此这个值越大树越浅、遍历越快, 但近似误差也越大。取 1 时叶子只装一个点,此时把 tSNE.theta 设为 0 即可退化成精确计算。

实测(N=500,随机布局)配分函数 Z 相对于暴力解的相对误差: theta=0.5 时 leaf=1 约 1.2%,leaf=4 约 4.9%,leaf=24 约 7.2%; theta=0 且 leaf=1 时误差为 1e-16(机器精度)。

property KNN #
KNN

Barnes-Hut 模式下每一行保留的近邻数量

Remarks

取 0(默认值)时自动取 3 * perplexity(参考实现的经验取值)。 这个值直接决定稀疏概率矩阵的内存占用 O(N·k),是精度与开销之间最主要的调节旋钮。

property SparseNonZeros #
SparseNonZeros

Barnes-Hut 模式下稀疏概率矩阵的非零条目数量;精确模式下为 0

Remarks

稀疏矩阵的内存占用约为 nnz * 12 字节(4 字节列索引 + 8 字节概率值), 调节 tSNE.KNN 时可以据此权衡精度与内存。

field mPerplexity #
mPerplexity

effective number of nearest neighbors

field mEpsilon #
mEpsilon

learning rate

field mP #
mP

联合概率矩阵(精确模式下的稠密 N×N,行主序)

field mSparseP #
mSparseP

联合概率矩阵(Barnes-Hut 模式下的稀疏 CSR 表示)

field mY #
mY

Y is an array of 2-D points that you can plot

Remarks

这是嵌入结果的权威存储,tSNE.GetEmbedding() 直接返回其引用, 因此必须始终保持为锯齿数组形态以维持既有的公开语义。 热循环则一律走 tSNE.mYFlat 一维镜像以获得更好的缓存局部性。

field mYFlat #
mYFlat

Y 的一维行主序镜像,索引为 i * mDim + d

field mGains #
mGains

step gains to accelerate progress in unchanging directions(行主序一维,长度 N*dim)

field mYStep #
mYStep

momentum accumulator(行主序一维,长度 N*dim)

field bhNegF #
bhNegF

Barnes-Hut 模式下的斥力累加器

field bhPosF #
bhPosF

Barnes-Hut 模式下的引力累加器

field mGrad #
mGrad

梯度,行主序一维数组,长度为 N*dim

field mDim #
mDim

dimensionality of the embedding

field opts #
opts

并行度封装,随 tSNE.nthreads 一同更新

field mThreads #
mThreads

实际的并行线程数