Day3 LBP学习继续+PCA

SEMB-LBP

LBP对应MB-LBP

ULBP对应SEMB-LBP

只不过等价模式不同,统计图像直方图分布,排序,取前63编码为1-63,其余编码为64

clear all
clc

scale = 9;     %采样半径
str=strcat('D:\学习\LBP\lena.jpg');
I = imread(str);

count = imhist(I);  % 计算图像的直方图
[count2 id] = sort(count,'descend');
% 按照直方图排序进行编码
for i=1:256
    if i<64
        table(id(i)) = i;
    else
        table(id(i)) = 64;
    end
end

[rows cols]=size(I);
cellSize = floor(scale / 3);
offset = floor(cellSize / 2);
im = uint8(zeros(rows-2*offset, cols-2*offset));

for i=offset:(rows-offset-1)
    for j=offset:(cols-offset-1)
        temp = 0;
        for m=-offset:offset
            for n=-offset:offset
                temp = temp + int16(I(i+n+1,j+m+1));
            end
        end
        temp = floor(temp / (cellSize * cellSize));
        
        temp = uint8(temp);
        im(i - offset + 1, j - offset + 1) = temp;
    end
end
 I_LBP = LBP(im);
 [r c]=size(I_LBP);
 for i=1:r
     for j=1:c
         I_LBP(i,j) = table(I_LBP(i,j)+1);
     end
 end


[转]数据的向量表示及降维问题

(日期, 浏览量, 访客数, 下单数, 成交数, 成交金额)

其中“日期”是一个记录标志而非度量值,而数据挖掘关心的大多是度量值,因此如果我们忽略日期这个字段后,我们得到一组记录,每条记录可以被表示为一个五维向量,其中一条看起来大约是这个样子:

注意这里我用了转置,因为习惯上使用列向量表示一条记录(后面会看到原因),本文后面也会遵循这个准则。不过为了方便有时我会省略转置符号,但我们说到向量默认都是指列向量。

我们当然可以对这一组五维向量进行分析和挖掘,不过我们知道,很多机器学习算法的复杂度和数据的维数有着密切关系,甚至与维数呈指数级关联。当然,这里区区五维的数据,也许还无所谓,但是实际机器学习中处理成千上万甚至几十万维的情况也并不罕见,在这种情况下,机器学习的资源消耗是不可接受的,因此我们必须对数据进行降维。

降维当然意味着信息的丢失,不过鉴于实际数据本身常常存在的相关性,我们可以想办法在降维的同时将信息的损失尽量降低。

相关性的例子假如某学籍数据有两列M和F,其中M列的取值是如何此学生为男性取值1,为女性取值0;而F列是学生为女性取值1,男性取值0。此时如果我们统计全部学籍数据,会发现对于任何一条记录来说,当M为1时F必定为0,反之当M为0时F必定为1。在这种情况下,我们将M或F去掉实际上没有任何信息的损失,因为只要保留一列就可以完全还原另一列。

当然上面是一个极端的情况,在现实中也许不会出现,不过类似的情况还是很常见的。例如上面淘宝店铺的数据,从经验我们可以知道,“浏览量”和“访客数”往往具有较强的相关关系,而“下单数”和“成交数”也具有较强的相关关系。这里我们非正式的使用“相关关系”这个词,可以直观理解为“当某一天这个店铺的浏览量较高(或较低)时,我们应该很大程度上认为这天的访客数也较高(或较低)”。后面的章节中我们会给出相关性的严格数学定义。

这种情况表明,如果我们删除浏览量或访客数其中一个指标,我们应该期待并不会丢失太多信息。因此我们可以删除一个,以降低机器学习算法的复杂度。

上面给出的是降维的朴素思想描述,可以有助于直观理解降维的动机和可行性,但并不具有操作指导意义。例如,我们到底删除哪一列损失的信息才最小?亦或根本不是单纯删除几列,而是通过某些变换将原始数据变为更少的列但又使得丢失的信息最小?到底如何度量丢失信息的多少?如何根据原始数据决定具体的降维操作步骤?

要回答上面的问题,就要对降维问题进行数学化和形式化的讨论。而PCA是一种具有严格数学基础并且已被广泛采用的降维方法。下面我不会直接描述PCA,而是通过逐步分析问题,让我们一起重新“发明”一遍PCA。


猜你喜欢

转载自blog.csdn.net/sinat_35104160/article/details/80746605