PCA和Softmax学习
来源:互联网 发布:马兰币数据 编辑:程序博客网 时间:2024/05/21 06:50
PCA和Softmax学习
老师上课说PCA(主成分分析)简单,不用讲,简单是简单,但也要看看,主要就是看fuldl上的教程,然后自己推导和matlab实现。
PCA
pca算法
pca是一种降维方法,可以看做是逐一取方差最大方向,就是对协方差矩阵做特征值分解,取最大特征值所对应的方向。算法描述如下:
1 对所有样本进行中心化:
2 计算样本的协方差矩阵
3 对协方差矩阵
4 取最大的
5 使用特征向量乘以原始数据得到旋转数据
代码如下:
sigma = x * x' / size(x,2); %协方差矩阵[u, s, v] = svd(sigma); %求特征xRot = u' * x; %数据旋转后的结果%降维u(:,2) = 0;xHat = u' * x;
PCA白化
白化是为了实现:
1 特征之间相关性较低
2 所有特征具有相同的方差
在使用pca降维时,需要计算协方差的特征向量,它们之间是不相关的。为了满足特征具有相同的方差,则使用
ZCA白化
ZCA是使旋转尽可能的接近原始数据,在使用时一般保留n个维度。
对于两种白化的实现,由于当特征值
epsilon = 1e-5;xPCAWhite = diag(1./sqrt(diag(s) + epsilon)) * u' * x;xZCAWhite = u * diag(1./sqrt(diag(s) + epsilon)) * u' * x;
对于教程后面的练习题,第一个照着公式撸就好了,第二个主要代码如下:
%% Step 0b: Zero-mean the data (by row)%为每个图像计算像素强度的均值avg = mean(x, 1); %每列为一张图片x = x - repmat(avg, size(x,1), 1);%% Step 1a: Implement PCA to obtain xRotsigma = x * x' / size(x,1);[s, u, v] = svd(sigma);xRot = u' * x;%% Step 1b: Check your implementation of PCAcovar = u;%% Step 2: Find k, the number of components to retaink = ceil(size(u,1) * 0.99); % 99%向上取整%% Step 3: Implement PCA with dimension reductionu(:, k + 1:end) = 0;xHat = u' * x;%% Step 4a: Implement PCA with whitening and regularisationepsilon = 0.1;xPCAWhite = zeros(size(x));%% Step 4b: Check your implementation of PCA whitening epsilon = 0.1;covar = covar + epsilon;%% Step 5: Implement ZCA whitening epsilon = 0.1;xZCAWhite = u * diag(1./(diag(u) + epsilon)) * u' * x;
Softmax回归
Softmax回归是解决多分类问题,和logistic类似(logistic是解决二分类问题)。
对于训练集
hypothesis 如下:
代价函数为:
梯度公式如下:
上述公式都是ufldl中给出的,现在给出梯度的推导:
由于:
在(1.2)中
由于在
把(1.1)(1.2)带入第一个式子可得
第一次使用lateX公式编辑,公式写的有点乱。
最后就是matlab实现,主要代码如下:
%softmaxCost.m%计算hypothesisexp0 = exp(theta * data); %10 * 100h = exp0./repmat(sum(exp0), numClasses, 1);%计算代价 权重衰减项cost = -1 / numCases * sum(sum((groundTruth.*log(h)))) + lambda / 2 * (sum(sum(theta.^2)));%计算梯度thetagrad = -1 / numCases * ((groundTruth - h)*data') + lambda * theta;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%softmaxPredict.mnumClasses = softmaxModel.numClasses;%预测exp0 = exp(theta * data);h = exp0./repmat(sum(exp0), numClasses, 1);%预测结果, 概率最大的那个[m, i] = max(h); %按列比较pred = i;
最后得到测试准确率为:92.640%
为了清洗的查看错误的结果,对识别错误的数字可视化:
%可视化出错结果view = find(sparse(labels(:) ~= pred(:)))';visualization(images(:,view), 28);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%visualization.mfunction visualization(data, pSize)%可视化图%data 输出数据%pSize 图像尺寸fsize = 10; %显示10*10张图片figure(1);%循环绘制子图for i = 1: fsize * fsize subplot(fsize, fsize, i); imshow(reshape(data(:,i), pSize, pSize));endend
结果为:
- PCA和Softmax学习
- Softmax 和Softmax-Loss在深度学习里面的求导
- LBP学习和PCA学习
- 学习笔记-PCA和白化
- 机器学习--logistic回归和softmax回归
- UFLDL练习(PCA and Whitening && Softmax Regression)
- PCA和核PCA
- 深度学习机器学习:softmax和log_softmax区分
- PCA 学习
- PCA学习
- 5.0 深度学习之公式详细推导Softmax和Overfitting
- 【深度学习技术】Softmax和SVM的区别与比较
- 机器学习(1)--logistic回归和softmax回归
- 机器学习----Softmax回归
- SoftMax回归学习
- 机器学习:Softmax回归
- Tensorflow之softmax学习
- Softmax学习笔记
- 单链表实现多项式相加
- 圆,y=x²
- 111. Minimum Depth of Binary Tree (计算二叉树最小深度)
- JQuery UI之(三)可切换面板——tabs
- HDU 2571 命运
- PCA和Softmax学习
- Android开发Bmob服务器配置
- Rxjava(Subject)-ReplaySubject--demo
- 解决eclipse导出war包时少jar包
- Extjs6 grid 与springmvc交互,批量删除
- 学习Android Architecture Blueprints(三)-contentproviders分支
- 算法:全排列
- C++中的private protected public区别
- 消息队列总结及其实现代码