独立成分分析(Independent Component Analysis)

2023-11-07

独立成分分析(Independent Component Analysis)

1. 问题:

     1、上节提到的PCA是一种数据降维的方法,但是只对符合高斯分布的样本点比较有效,那么对于其他分布的样本,有没有主元分解的方法呢?

     2、经典的鸡尾酒宴会问题(cocktail party problem)。假设在party中有n个人,他们可以同时说话,我们也在房间中一些角落里共放置了n个声音接收器(Microphone)用来记录声音。宴会过后,我们从n个麦克风中得到了一组数据clip_image002,i表示采样的时间顺序,也就是说共得到了m组采样,每一组采样都是n维的。我们的目标是单单从这m组采样数据中分辨出每个人说话的信号。

     将第二个问题细化一下,有n个信号源clip_image004clip_image006,每一维都是一个人的声音信号,每个人发出的声音信号独立。A是一个未知的混合矩阵(mixing matrix),用来组合叠加信号s,那么

     clip_image008

     x的意义在上文解释过,这里的x不是一个向量,是一个矩阵。其中每个列向量是clip_image010clip_image012

     表示成图就是

     clip_image014

     这张图来自

     http://amouraux.webnode.com/research-interests/research-interests-erp-analysis/blind-source-separation-bss-of-erps-using-independent-component-analysis-ica/

     clip_image033

     clip_image035的每个分量都由clip_image037的分量线性表示。A和s都是未知的,x是已知的,我们要想办法根据x来推出s。这个过程也称作为盲信号分离。

     令clip_image039,那么clip_image041

     将W表示成

     clip_image042

     其中clip_image044,其实就是将clip_image046写成行向量形式。那么得到:

     clip_image048

2. ICA的不确定性(ICA ambiguities)

     由于w和s都不确定,那么在没有先验知识的情况下,无法同时确定这两个相关参数。比如上面的公式s=wx。当w扩大两倍时,s只需要同时扩大两倍即可,等式仍然满足,因此无法得到唯一的s。同时如果将人的编号打乱,变成另外一个顺序,如上图的蓝色节点的编号变为3,2,1,那么只需要调换A的列向量顺序即可,因此也无法单独确定s。这两种情况称为原信号不确定。

     还有一种ICA不适用的情况,那就是信号不能是高斯分布的。假设只有两个人发出的声音信号符合多值正态分布,clip_image050,I是2*2的单位矩阵,s的概率密度函数就不用说了吧,以均值0为中心,投影面是椭圆的山峰状(参见多值高斯分布)。因为clip_image052,因此,x也是高斯分布的,均值为0,协方差为clip_image054

     令R是正交阵clip_image056clip_image058。如果将A替换成A’。那么clip_image060。s分布没变,因此x’仍然是均值为0,协方差clip_image062

     因此,不管混合矩阵是A还是A’,x的分布情况是一样的,那么就无法确定混合矩阵,也就无法确定原信号。

3. 密度函数和线性变换

     在讨论ICA具体算法之前,我们先来回顾一下概率和线性代数里的知识。

     假设我们的随机变量s有概率密度函数clip_image064(连续值是概率密度函数,离散值是概率)。为了简单,我们再假设s是实数,还有一个随机变量x=As,A和x都是实数。令clip_image066是x的概率密度,那么怎么求clip_image066[1]

     令clip_image039[1],首先将式子变换成clip_image068,然后得到clip_image070,求解完毕。可惜这种方法是错误的。比如s符合均匀分布的话(clip_image072),那么s的概率密度是clip_image074,现在令A=2,即x=2s,也就是说x在[0,2]上均匀分布,可知clip_image076。然而,前面的推导会得到clip_image078。正确的公式应该是

     clip_image080

     推导方法

     clip_image082

     clip_image084

     更一般地,如果s是向量,A可逆的方阵,那么上式子仍然成立。

4. ICA算法

     ICA算法归功于Bell和Sejnowski,这里使用最大似然估计来解释算法,原始的论文中使用的是一个复杂的方法Infomax principal。

     我们假定每个clip_image086有概率密度clip_image088,那么给定时刻原信号的联合分布就是

     clip_image090

     这个公式代表一个假设前提:每个人发出的声音信号各自独立。有了p(s),我们可以求得p(x)

     clip_image092

     左边是每个采样信号x(n维向量)的概率,右边是每个原信号概率的乘积的|W|倍。

     前面提到过,如果没有先验知识,我们无法求得W和s。因此我们需要知道clip_image094,我们打算选取一个概率密度函数赋给s,但是我们不能选取高斯分布的密度函数。在概率论里我们知道密度函数p(x)由累计分布函数(cdf)F(x)求导得到。F(x)要满足两个性质是:单调递增和在[0,1]。我们发现sigmoid函数很适合,定义域负无穷到正无穷,值域0到1,缓慢递增。我们假定s的累积分布函数符合sigmoid函数

     clip_image096

     求导后

     clip_image098

     这就是s的密度函数。这里s是实数。

     如果我们预先知道s的分布函数,那就不用假设了,但是在缺失的情况下,sigmoid函数能够在大多数问题上取得不错的效果。由于上式中clip_image100是个对称函数,因此E[s]=0(s的均值为0),那么E[x]=E[As]=0,x的均值也是0。

     知道了clip_image100[1],就剩下W了。给定采样后的训练样本clip_image002[1],样本对数似然估计如下:

     使用前面得到的x的概率密度函数,得

     clip_image101

     大括号里面是clip_image103

     接下来就是对W求导了,这里牵涉一个问题是对行列式|W|进行求导的方法,属于矩阵微积分。这里先给出结果,在文章最后再给出推导公式。

     clip_image105

     最终得到的求导后公式如下,clip_image107的导数为clip_image109(可以自己验证):

     clip_image110

     其中clip_image112是梯度上升速率,人为指定。

     当迭代求出W后,便可得到clip_image114来还原出原始信号。

     注意:我们计算最大似然估计时,假设了clip_image116clip_image118之间是独立的,然而对于语音信号或者其他具有时间连续依赖特性(比如温度)上,这个假设不能成立。但是在数据足够多时,假设独立对效果影响不大,同时如果事先打乱样例,并运行随机梯度上升算法,那么能够加快收敛速度。

     回顾一下鸡尾酒宴会问题,s是人发出的信号,是连续值,不同时间点的s不同,每个人发出的信号之间独立(clip_image086[1]clip_image120之间独立)。s的累计概率分布函数是sigmoid函数,但是所有人发出声音信号都符合这个分布。A(W的逆阵)代表了s相对于x的位置变化,x是s和A变化后的结果。

5. 实例

     clip_image122

     s=2时的原始信号

     clip_image124

     观察到的x信号

     clip_image126

     使用ICA还原后的s信号

6. 行列式的梯度

     对行列式求导,设矩阵A是n×n的,我们知道行列式与代数余子式有关,

     clip_image127

     clip_image129是去掉第i行第j列后的余子式,那么对clip_image131求导得

     clip_image132

     adj(A)跟我们线性代数中学的clip_image134是一个意思,因此

     clip_image135


7. ICA算法扩展描述

     上面介绍的内容基本上是讲义上的,与我看的另一篇《Independent Component Analysis:

Algorithms and Applications》(Aapo Hyvärinen and Erkki Oja)有点出入。下面总结一下这篇文章里提到的一些内容(有些我也没看明白)。

     首先里面提到了一个与“独立”相似的概念“不相关(uncorrelated)”。Uncorrelated属于部分独立,而不是完全独立,怎么刻画呢?

     如果随机变量clip_image002clip_image004是独立的,当且仅当clip_image006

     如果随机变量clip_image002[1]clip_image004[1]是不相关的,当且仅当clip_image008

     第二个不相关的条件要比第一个独立的条件“松”一些。因为独立能推出不相关,不相关推不出独立。

     证明如下:

     clip_image009

     clip_image010

     clip_image012

     反过来不能推出。

     比如,clip_image002[2]clip_image004[2]的联合分布如下(0,1),(0,-1),(1,0),(-1,0)。

     clip_image014

     因此clip_image002[3]clip_image004[3]不相关,但是

     clip_image016

     因此clip_image002[4]clip_image004[4]不满足上面的积分公式,clip_image002[5]clip_image004[5]不是独立的。

     上面提到过,如果clip_image018是高斯分布的,A是正交的,那么clip_image020也是高斯分布的,且clip_image020[1]clip_image022之间是独立的。那么无法确定A,因为任何正交变换都可以让clip_image020[2]达到同分布的效果。但是如果clip_image018[1]中只有一个分量是高斯分布的,仍然可以使用ICA。

     那么ICA要解决的问题变为:如何从x中推出s,使得s最不可能满足高斯分布?

     中心极限定理告诉我们:大量独立同分布随机变量之和满足高斯分布。

     clip_image023

     我们一直假设的是clip_image020[3]是由独立同分布的主元clip_image018[2]经过混合矩阵A生成。那么为了求clip_image018[3],我们需要计算clip_image018[4]的每个分量clip_image025。定义clip_image027,那么clip_image029,之所以这么麻烦再定义z是想说明一个关系,我们想通过整出一个clip_image031来对clip_image020[4]进行线性组合,得出y。而我们不知道得出的y是否是真正的s的分量,但我们知道y是s的真正分量的线性组合。由于我们不能使s的分量成为高斯分布,因此我们的目标求是让y(也就是clip_image033)最不可能是高斯分布时的w。

     那么问题递归到如何度量y是否是高斯分布的了。

     一种度量方法是kurtosis方法,公式如下:

     clip_image034

     如果y是高斯分布,那么该函数值为0,否则绝大多数情况下值不为0。

     但这种度量方法不怎么好,有很多问题。看下一种方法:

     负熵(Negentropy)度量方法。

     我们在信息论里面知道对于离散的随机变量Y,其熵是

     clip_image035

     连续值时是

     clip_image036

     在信息论里有一个强有力的结论是:高斯分布的随机变量是同方差分布中熵最大的。也就是说对于一个随机变量来说,满足高斯分布时,最随机。

     定义负熵的计算公式如下:

     clip_image037

     也就是随机变量y相对于高斯分布时的熵差,这个公式的问题就是直接计算时较为复杂,一般采用逼近策略。

     clip_image038

     这种逼近策略不够好,作者提出了基于最大熵的更优的公式:

     clip_image039

     之后的FastICA就基于这个公式。

     另外一种度量方法是最小互信息方法:

     clip_image040

     这个公式可以这样解释,前一个H是clip_image042的编码长度(以信息编码的方式理解),第二个H是y成为随机变量时的平均编码长度。之后的内容包括FastICA就不再介绍了,我也没看懂。

 
8. ICA的投影追踪解释(Projection Pursuit)

     投影追踪在统计学中的意思是去寻找多维数据的“interesting”投影。这些投影可用在数据可视化、密度估计和回归中。比如在一维的投影追踪中,我们寻找一条直线,使得所有的数据点投影到直线上后,能够反映出数据的分布。然而我们最不想要的是高斯分布,最不像高斯分布的数据点最interesting。这个与我们的ICA思想是一直的,寻找独立的最不可能是高斯分布的s。

     在下图中,主元是纵轴,拥有最大的方差,但最interesting的是横轴,因为它可以将两个类分开(信号分离)。

     clip_image043

9. ICA算法的前处理步骤

     1、中心化:也就是求x均值,然后让所有x减去均值,这一步与PCA一致。

     2、漂白:目的是将x乘以一个矩阵变成clip_image045,使得clip_image045[1]的协方差矩阵是clip_image047。解释一下吧,原始的向量是x。转换后的是clip_image045[2]

     clip_image045[3]的协方差矩阵是clip_image047[1],即

     clip_image048

     我们只需用下面的变换,就可以从x得到想要的clip_image045[4]

     clip_image049

     其中使用特征值分解来得到E(特征向量矩阵)和D(特征值对角矩阵),计算公式为

     clip_image050

     下面用个图来直观描述一下:

     假设信号源s1和s2是独立的,比如下图横轴是s1,纵轴是s2,根据s1得不到s2。

     clip_image051

     我们只知道他们合成后的信号x,如下

     image

     此时x1和x2不是独立的(比如看最上面的尖角,知道了x1就知道了x2)。那么直接代入我们之前的极大似然概率估计会有问题,因为我们假定x是独立的。

     因此,漂白这一步为了让x独立。漂白结果如下:

     clip_image053

     可以看到数据变成了方阵,在clip_image045[5]的维度上已经达到了独立。

     然而这时x分布很好的情况下能够这样转换,当有噪音时怎么办呢?可以先使用前面提到的PCA方法来对数据进行降维,滤去噪声信号,得到k维的正交向量,然后再使用ICA。

 
10. 小结

     ICA的盲信号分析领域的一个强有力方法,也是求非高斯分布数据隐含因子的方法。从之前我们熟悉的样本-特征角度看,我们使用ICA的前提条件是,认为样本数据由独立非高斯分布的隐含因子产生,隐含因子个数等于特征数,我们要求的是隐含因子。

     而PCA认为特征是由k个正交的特征(也可看作是隐含因子)生成的,我们要求的是数据在新特征上的投影。同是因子分析,一个用来更适合用来还原信号(因为信号比较有规律,经常不是高斯分布的),一个更适合用来降维(用那么多特征干嘛,k个正交的即可)。有时候也需要组合两者一起使用。这段是我的个人理解,仅供参考。

http://www.cnblogs.com/jerrylead/archive/2011/04/19/2021071.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

独立成分分析(Independent Component Analysis) 的相关文章

  • R 矩阵可以包含不同的数据类型吗?这个被修改的列表矩阵有用吗?

    我读了这些 https stackoverflow com a 5159049 1175496 https stackoverflow com a 5159049 1175496 Matrices are for data of the s
  • 从 r 矩阵的每一行中减去一个常数向量

    我有一个 5 列 4 行的矩阵 我还有一个 3 列的向量 我想分别从矩阵每一行的第 3 4 和 5 列减去向量中的值 b lt matrix rep 1 20 nrow 4 ncol 5 1 2 3 4 5 1 1 5 9 13 17 2
  • RcppEigen - 从包中的内联函数到 .cpp 函数和“Map”

    一切似乎都在我的包中工作 但我想检查其步骤是否正确以及使用 Map 的内存使用情况 这是一个简单的示例 位于内联示例和fastLm 例子 这是一个内联函数 它取矩阵每一列的最大值 library Rcpp library inline li
  • 投影 - 将 3d 转换为 2d

    我有问题或者很好 我不知道如何将具有 x y z 值的 3d 点转换为 2d 点 我必须绘制投影 其中我确实有点的 x y z 值 但我不知道如何将它们转换为 2d 以便我可以将它们移动到我的轴上 我一直在浏览维基和谷歌 但是我不太确定应该
  • 如何在Matlab中计算两个矩阵之间的快速外积?

    我有两个 n m 矩阵 A and B 我想创建一个新的矩阵C类似于 for i 1 n C C outerProduct A i B i end i e C是一个大小为 m x m 的矩阵 即各行的所有外积之和A and B 有没有一种无
  • 如何在 MATLAB 中调整矩阵大小?

    假设我有一个1 by 12矩阵 我想将其调整为4 by 3矩阵 我怎么能这样做呢 我当前的解决方案有点丑陋 for n 1 length mat 3 out n 1 3 mat n 1 3 1 n 1 3 3 end 有一个更好的方法吗 r
  • 如何使用浮点数组中的数据初始化 cv::Mat

    我需要创建一个cv Mat用我的数据初始化的变量float 大批 这应该是基本的 但我很难弄清楚 我有代码 float matrixAB lt 120 floating point array created elsewhere gt cv
  • 由两个向量 (n,1) 构建的 R 距离矩阵

    我有两个向量 x n 1 and y n 1 真实值 我想创建一个矩阵M n n 这些向量包含每两对之间的距离 您可以使用outer功能 x lt sample 5 y lt sample 5 x 1 1 5 3 4 2 y 1 2 3 5
  • 将矩阵从 3d 重塑为 2d 并保持特定顺序

    我想将 4x3x5 形式的矩阵调整为 20x3 的二维矩阵 但同时保留顺序 如下所示 功能reshape 不保留这个特定的顺序 我怎样才能以最简单的方式实现这一点 让我们一劳永逸地解决这些跨越三维的串联和切割问题吧 第一部分 3D 到 2D
  • 从矩阵中删除零行(优雅的方式)

    我有一个包含一些零行的矩阵 我想删除零行 矩阵是Nx3 我所做的很简单 我创造std vector其中每三个元素代表一行 然后我将其转换为Eigen MatrixXd 有没有一种优雅的方法来删除零行 include
  • 如何在 CUDA 中执行多个矩阵乘法?

    我有一个方阵数组int M 10 以便M i 定位第一个元素i th 矩阵 我想将所有矩阵相乘M i 通过另一个矩阵N 这样我就收到了方阵数组int P 10 作为输出 我看到有不同的可能性 分配不同元素的计算M i 到不同的线程 例如 我
  • 从 Julia 中的文本文件读取数据矩阵

    我有一个包含矩阵的文本文件 我想在朱莉娅中将其作为矩阵来阅读 文本文件如下 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 1 0 在 matlab 中 您可以执行以下操作来创建矩阵M
  • Java俄罗斯方块旋转

    我知道这个问题已经被问了很多 但我想知道如何旋转俄罗斯方块 我已经做了一个又长又糟糕的解决方案 大约 170 行代码 但应该有更简单的方法来做到这一点 我的俄罗斯方块由 4 个块组成 它们都知道它们在矩阵中的位置 行和列 Matrix本身是
  • opencv中矩阵的超快中值(与matlab一样快)

    我正在 openCV 中编写一些代码 想要找到一个非常大的矩阵数组 单通道灰度 浮点数 的中值 我尝试了几种方法 例如对数组进行排序 使用 std sort 和选择中间条目 但与 matlab 中的中值函数相比 它非常慢 准确地说 在 ma
  • THREE.JS,忽略父级的轮换

    我试图使子对象跟随父级位置并表现得像一个普通的子对象 但是我希望它保持其旋转不变 在不影响性能的情况下 最好的方法是什么 我的CPU预算很紧张 已经运行了2个工作线程并且有很多对象 是否有设置只允许孩子的位置受到影响 同样重要的是 当父级旋
  • C++ 求矩阵最小和最大元素之间的元素和

    因此 我的程序按其应有的方式工作 但前提是最小和最大元素位于对角 所以我的问题是如何将二维数组从一个特定元素迭代到另一个元素 也许摆脱一些嵌套循环 我应该将这个数组转换为一维吗 这是代码的正确工作方式 就在这时 出现了问题 元素 0 1 和
  • R 和 Python 中 LU 分解结果不一致

    我有以下矩阵A in R 1 2 3 4 1 1 1527778 0 4444444 0 375 0 3333333 2 0 5555556 1 4888889 0 600 0 3333333 3 0 6250000 0 4000000 1
  • Python中矩阵元素的双重求和

    基于下面的简化示例 我想在我的代码中 from sympy import import numpy as np init printing x y symbols x y mat Matrix x 1 1 y X 1 2 3 Y 10 20
  • 根据 SSRS 矩阵中的总列计算总列的百分比

    希望在我的 SSRS 矩阵中添加一列 这将为我提供该行中总列的百分比 我正在使用以下表达式 但百分比始终为 100 我假设这是因为总计是最后评估的 所以它只是执行总计 总计 FORMAT Fields ID Value SUM Fields
  • 以 2 为底的矩阵对数

    Logm 取矩阵对数 并且log2 取矩阵每个元素以 2 为底的对数 我正在尝试计算冯 诺依曼熵 它涉及以 2 为底的矩阵对数 我该怎么做呢 如果将 以 2 为底 的矩阵指数定义为B expm log 2 A 或者如果您类似地通过特征分解直

随机推荐

  • php使用ecc算法进行签名,ECDSA签名算法(ECC椭圆曲线算法3)

    现在有一个场景 Alice想要用私钥签名一个数据 Bob想要使用Alice的公钥验证这个签名 只有Alice能够进行计算签名然后得到签名 每个人都能验证签名值 首先Alice和Bob拥有相同的椭圆曲线参数 算法被签名称之为ECDSA 是DS
  • 关于OpenGL纹理尺寸的坑 - 图像行偏移,出现异色条纹

    学习OpenGL时想简单创建一个纹理 但马上就出现错误 错误效果如下 原图如下 由于之前没有碰过这种问题 费了好大一番功夫才找到问题所在 原始图片尺寸为210 220 OpenGL版本与教程一致 为3 3 把像素值打印出来观察之后发现 传入
  • Spring 特性

    目录 核心特性 数据存储 Web 技术 Web Servlet 技术栈 Spring 1 4的唯一支持 Web Reactive 技术栈 Spring 5引入 技术整合 Integration 测试 Testing Spring 模块化设计
  • DeformableDetr论文简介+mmdet源码解读

    文章目录 前言 一 论文解读 1 1 研究问题 1 2 可形变注意力模块 1 3 拓展到多层特征图 二 mmdet源码讲解 2 1 图像特征提取 2 2 生成mask和位置编码 2 3 送入Transformer 2 3 1 Transfo
  • 机器学习之朴树贝叶斯②——调库实现

    文章目录 多项式朴素贝叶斯 MultinomialNB 高斯朴素贝叶斯 GaussianNB 多项式朴素贝叶斯 MultinomialNB sklearn naive bayes MultinomialNB alpha 1 0 fit pr
  • 为什么HashMap线程不安全?

    我们都知道 HashMap 是线程不安全的 那 HashMap 为什么线程不安全 JDK1 8 还有这些问题吗 如何解决这些问题呢 本文将对该问题进行解密 多线程下扩容死循环 JDK1 7中的 HashMap 使用头插法插入元素 在多线程的
  • 如何在深度学习中处理图像数据?

    深度学习在图像处理领域取得了重大的突破 可以用于图像分类 目标检测 图像生成等各种任务 处理图像数据的关键是将图像转换为适合深度学习模型处理的形式 下面是处理图像数据的一般步骤 1 数据准备 收集和整理用于训练的图像数据集 数据集应包含图像
  • MySQL基础篇——第10章 DDL(数据定义):创建和管理表

    MySQL基础篇 第10章 DDL 数据定义 创建和管理表 1 基础知识 1 1 一条数据存储的过程 存储数据是处理数据的第一步 只有正确地把数据存储起来 我们才能进行有效的处理和分析 MySQ的数据存储过程 创建数据库 确认字段 创建数据
  • 基于Matlab实现图像目标边界描述

    图像目标边界描述是图像处理中的一个重要问题 边界描述可以用于目标检测和识别 图像分割等应用 Matlab提供了强大的图像处理工具箱 可以方便地实现图像目标边界描述 本文介绍一种基于边缘检测的图像目标边界描述方法 并提供一个简单的案例源码 文
  • 自定义Webpack配置

    自定义Webpack配置 1 初始化并创建要被打包的文件 2 命令行配置 3 配置文件配置 1 初始化并创建要被打包的文件 首先创建文件夹webpack demo 随便起一个 用来演示打包过程 在该文件夹下终端运行命令 对项目进行初始化操作
  • java静态编译 动态编译_Java代码的静态编译和动态编译中的问题比较

    两种技术都需要谨慎选择编译的方法以实现最高的性能 对动态编译器而言 编译器自身作出决策 而对于静态编译器 由开发人员作出选择 让 JIT 编译器选择编译的方法是不是优点很难说 取决于编译器在给定情形中推断能力的好坏 在大多数情况下 我们认为
  • Nvidia 显卡 Failed to initialize NVML Driver/library version mismatch 错误解决方案

    目录 问题复现 问题原因 问题分析 解决方案 问题复现 nvidia smi gt Failed to initialize NVML Driver library version mismatch 问题原因 出现这个问题的原因是nvidi
  • Windows修改java环境变量不生效

    Windows修改java环境变量不生效 1 运行 regedit 2 HKEY LOCAL MACHINE SOFTWARE JavaSof t Java Runtime Environment 3 删除不需要的
  • Qt中Q_D宏及d指针

    原文标题 d指针在Qt上的应用及实现 原文链接 http blog csdn net rabinsong article details 9474859 正文 Qt为了使其动态库最大程度上实现二进制兼容 引入了d指针的概念 那么为什么d指针
  • 全新服务器安装redis步骤大全

    如安装过程中报错可查看另外一篇文章 https blog csdn net Cjava math article details 108832966 第一步 下载安装包 访问https redis io download 到官网进行下载 这
  • IO进程线程day1(2023.7.25)

    一 Xmind整理 什么是IO 文件IO函数与标准IO函数 二 课上练习 练习1 标准IO函数的简单示例 scanf if OS Linux 去调用Linux的文件IO read else if OS windows 去调用windows的
  • Intel 80X86寄存器分类介绍

    开始读Linux内核相关书籍时 在书店里碰到一个计算机专业科班出身的朋友 向他请教时 他认为学习Linux内核不需要汇编和计算机体系结构等相关的知识 可是结合到现在的学习经历 我却越来越觉得为了搞清楚Linux内核相关设计和运行原理 自己那
  • 使用asp.net从零开始制作设计网站

    使用asp net从零开始制作设计网站 转载 首先感谢提供此教程的朋友 可以给大家学习的机会 很有用 留着好好学 如下正文 1 申请域名 2 购买空间 3 备案 4 使用photoshop完成设计与切图 5 使用dreamweaver建立站
  • C++ sizeof 运算符

    sizeof 是一个关键字 它是一个编译时运算符 用于判断变量或数据类型的字节大小 sizeof 运算符可用于获取类 结构 共用体和其他用户自定义数据类型的大小 使用 sizeof 的语法如下 sizeof data type 其中 dat
  • 独立成分分析(Independent Component Analysis)

    独立成分分析 Independent Component Analysis 1 问题 1 上节提到的PCA是一种数据降维的方法 但是只对符合高斯分布的样本点比较有效 那么对于其他分布的样本 有没有主元分解的方法呢 2 经典的鸡尾酒宴会问题