程序员人生 网站导航

大数据处理之道 (MATLAB 篇<三>)

栏目:综合技术时间:2015-03-02 08:47:56

1:起因

(1)最近1直在处理大数据,从MB ----> GB的变化,是1次质的奔腾,相应的工具也在变 从widows到linux,从单机单核 到 hadoop多节点的计算

(2)问题来了,面对海量的数据,如何从中发掘实用的信息或发现潜伏的现象,可视化工具多是必不可少的 ;

(3)可视化工具可以说百度1大篇,可是作为研究者的我们,程序猿的我们可能更希望能够抽象出1种数学模型,对现实的现象进行非常好的描写和刻画

(4)Python(数据清洗和处理) + MATLAB(模型分析) 或 c++/java/hadoop(数据清洗和处理) + MATLAB(模型分析

(5)先前的1篇博文可以参考   c++ fstream + string 处理大数据  和 大数据处理之道 (MATLAB 篇(2))

(6)程序猿鄙视学习MATLAB的人,是由于对MATLAB的理解不够深入,MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室);说起处理矩阵(其实就是数值型的数组嘛)计算问题那是数一数二的快,简便。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等。

2:MATLAB学习(遍历文件夹,矩阵的重新组合,pca)

(1)  save(tofilename, 'ANS', '-ASCII')   保存结果ANS矩阵到制定路径tofilename中

(2)num2str(num)  将数字转化为string型;

(3)strcat(rootpath,num2str(i),'*.csv')  字符串拼接函数 用于绝对路径的生成

(4)[coef,score,latent,t2] = princomp(data); 主要成份分析法,latent是贡献率排序的(从大到小),score是生成的新数据,根据贡献率排序的

3:PCA讲授

(1)特点抽取是指将高纬度的特点经过某个函数映照至低纬度作为新的特点。经常使用的特点抽取方法就是PCA

(2)当贡献率累加至95%(当要求不是特别严格时,85%以上也能够),以后的维数会不再显示;所以根据贡献率(例如前两位已到达95%),那末最后可以降至2维,便可以只选取SCORE的前两列来表示原始数据。

(3)PCA算法步骤:
设有m条n维数据。
1)将原始数据按列组成n行m列矩阵X
2)将X的每行(代表1个属性字段)进行零均值化,即减去这1行的均值
3)求出协方差矩阵C=frac{1}{m}XX^mathsf{T}
4)求出协方差矩阵的特点值及对应的特点向量
5)将特点向量按对应特点值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6)Y=PX即为降维到k维后的数据

4:程序(注释比较详细)

clc; clear all; close all; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=1:7 %源文件夹路径 rootpath = 'G:zyp_thanksmetro_test esultMergeODByDay_6'; %输前途径 torootpath = 'G:zyp_thanksmetro_test esultMergeODByDay_6_zhengyu'; %源文件夹路径(获得指定类型的文件) path = strcat(rootpath,num2str(i),'*.csv'); %输前途径 topath = strcat(torootpath,num2str(i),''); %创建输出文件夹 mkdir(topath); dirs=dir(path); % 替换成你想要的路径。读取某个目录的指定类型文件列表,返回结构数组。 dataDir=strcat(rootpath,num2str(i),'');%数据目录 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% dircell=struct2cell(dirs)'; % 结构体(struct)转换成元胞类型(cell),转置1下是让文件名按列排列。 filenames=dircell(:,1); % 第1列是文件名 [m n] = size(filenames); for i=1:m strfilename = [dataDir filenames{i}]; tofilename = [topath filenames{i}]; %fprintf('文件%d:%s ',i,strfilename); X = load(strfilename); %A,B是获得的不需要改变的数据,下面作为合并用的 A = X(:,1:2); B = X(:,6:7); %获得3维向量,用作pca变换 data = X(:,3:5); %pca [coef,score,latent,t2] = princomp(data); newdata = score(:,1:2);%前 2列 ANS = [A newdata B]; save(tofilename, 'ANS', '-ASCII') end end

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐