# Tag: matlab

## PCA的实现

PCA，全称是Principal component analysis，中文叫做主成分分析，是一种常用的数据处理手段。 直观的说，PCA是一种降维的手法。比如现在我们有1000个数据点，每个数据点是一个128维的向量，存储上可以是一个1000×128维的数组。经过PCA处理，我们仍然得到1000个数据点，但是每个数据点是一个小于128维的向量，比如我们用PCA将128维的数据降到64维。 PCA可以保证，在降维之后，数据表示的信息损失最小。 “损失最小”具体怎么定义？ 还是以1000个128维的点为例，这1000个点，也就是1000个向量在一个128维的空间中。从在任何一维，也就是一个方向上来看，如果在这个方向上，各个向量大小差异很大，那么这个方向是很重要的。 也就是，反过来看，如果在某个方向上，每一个向量大小都很接近，那么如果不考虑这个方向，也就是去掉这一维的数据，对我们分析这1000个点并没有多大的影响。所以，“损失最小”对应着“差异最小”。 那么具体怎么做呢？ 这里是两种常用的方法: SVD分解和EIG分解（特征值分解）。 共同点在于先从数据得到一个矩阵M，M的特征值个数对应着数据的维度，特征值越大那么对应的这一维越重要，也就是“差异越大”。 SVD分解, matlab sub_input_data = (input_data - repmat(mean(input_data),count,1))/sqrt(count-1); [U,S,V] = svd(sub_input_data); % First out_dim columns as PCA bases pcaV = V(:,1:out_dim); output_data = input_data * pcaV; EIG分解, matlab mean_input_data = mean(input_data); sub_input_data = input_data - repmat(mean_input_data, count,1); mean_mat = sub_input_data' * sub_input_data ./ (count

## Draw ROC Curve

A piece of fairly simple Matlab script to draw the ROC Curve from an array of scores and an array of labels. function [Tps, Fps] = ROC(scores, labels) %% Sort Labels and Scores by Scores sl = [scores; labels]; [d1 d2] = sort(sl(1,:)); sorted_sl = sl(:,d2); s_scores = sorted_sl(1,:); s_labels = round(sorted_sl(2,:)); %% Constants counts

## [Libsvm]libsvm for matlab compilation error on mac

Error: >> make /bin/bash: -c: line 0: unexpected EOF while looking for matching `"' /bin/bash: -c: line 1: syntax error: unexpected end of file ??? Error using ==> mex at 208 Unable to complete successfully. Error in ==> make at 5 mex -O -largeArrayDims -I..\ -c ..\svm.cpp Fix: Under folder ./libsvm-3.1/matlab Open file make.m replace