Matlab版LibSVM定义线性核和高斯核的使用方法

(1)如何采用线性核? matlab> % Linear Kernel matlab> model_linear = svmtrain(train_label, train_data, ‘-t 0′);  严格讲,线性核也要像高斯核一样调整c这个参数,Libing wang讲一般C=1效果比较好,可能调整效果差异不大,当然要看具体的数据集。c大,从SVM目标函数可以看出,c越大,相当于惩罚松弛变量,希望松弛变量接近0,即都趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但推广能力未必好,即在测试集上未必好。c小点,相当于边界的有些点容许分错,将他们当成噪声点,这样外推能力比较好。 (2)如何采用高斯核? matlab> load heart_scale.mat matlab> model = svmtrain(heart_scale_label, heart_scale_inst, ‘-c 1 -g 0.07′); 参考:http://www.cppblog.com/guijie/archive/2012/03/26/169034.html

后台挂起运行Matlab

由于Matlab后台挂起的方式和 Java略有不同,这里做个记录。 直接上例子,例如我的主函数 为 main_jacoxu.m,则后台挂起运行的方式为: nohup matlab.ln <main_jacoxu.m> 1.out& 如果以系统时间来命名输出日志文件,则,如下: nohup ../matlab.ln $(date ‘+%Y-%m-%d_%H-%M-%S’).out& 注意不同的地方:1,文件.m 用 < 指向 matlab程序,用 > 指向输出日志文件! 2, 如果不后台运行的话,采用 matlab.ln <main_jacoxu.m 3,建议后台运行程序时捕捉pid,以防止多个程序运行混淆 #!/bin/sh ls main_jacoxu.m | (while read line; do echo “Start to run the matlab … 继续阅读

Matlab下大矩阵运算

通过memory和whos可以看到当前系统的内存使用情况和每个变量所占用的内存,例如: K>> memory    Maximum possible array:               7414 MB (7.774e+009 bytes) *    Memory available for all arrays:      7414 MB (7.774e+009 bytes) *    Memory used by MATLAB:                2433 MB (2.552e+009 bytes)    Physical Memory (RAM):                5823 MB (6.106e+009 bytes)       *  Limited by System Memory (physical + swap file) available.   可以看到本地机器的物理内存RAM有将近6G,最大可能内存7G左右,目前已经被Matlab使用的内存有2G多,通过whos指令可以知道有那些变量占用的内存比较大: K>> whos      Name                      Size                    Bytes  Class     Attributes            temp_instance_2       20229×10059            1627868088  double                    temp_instance_3       20229×10059               2095424  double    sparse                      train_data                1×10059              86199419  struct                 可以看到同样20139*10059的矩阵,double型的full矩阵要占用1.6G左右的内存,double型的sparse矩阵只占用了2M左右内存。 在运算速度方面 tic,toc来知道每段代码的执行时间。但要知道每条语句的详细运行情况的话,非profile莫属。先运行profile on,再运行需要测试的代码,然后使用profile viewer来查看报告。 Sparse矩阵在指定下标的循环运算中不占优势。但是,当一个矩阵中有大量的0时就一定要采用sparse型进行运算,不只大大减少内存会消耗,而且时间消耗也会大大减少。注意,一般Sparse矩阵运算如sum, diag等之后还是sparse矩阵,而当sparse矩阵和full矩阵一起参加运算时,结果会被强制转为full矩阵。要注意,当一个矩阵并不是很稀疏时尽量不要采用sparse方式存储,不便于矩阵运算,对于一些矩阵操作,如求矩阵转置等操作会变得异常异常的慢! 下面是一个2W*2W的double型全1矩阵full型和sparse型的占内存情况: >> A = ones(20229,20229);    >> whos      Name          Size                    Bytes  Class     Attributes       … 继续阅读

Matlab Tricks

很多人说Matlab没有C高效,而其实上很多相同功能的数学运算,Matlab比C等语言高效的多。使用Matlab时脑子里要时刻警惕自己避免使用for循环,Matlab的强大就在于矩阵运算,其实很多逻辑矩阵运算就能够完成。(C语言的for循环是很低效的,可能会导致算法效率低下无法求解)。 1. 有时进行矩阵运算时会出现奇异矩阵无法计算,这时需要定位矩阵的全零行:find(sum(abs(A),2)==0) 2. 发现全零后需要删除矩阵的某一行:A(i,:)==[] 3. 把matlab结果保存到文本中:save result.txt p -ascii 4. 把矩阵中的某些元素值为a的全部替换为b:C(C==a)=b 5. 无界面情况下如何绘图并保存:set(gca, ‘UserData’, {‘gscatter’ x y g}); saveas(gca, ['D:/test.fig']) 6. 习惯性在程序开头加上rand(‘state’,1); randn(‘state’,1); 以保证实验结果可以重现。

Transform TXT 2 MAT in matlab

%transfer txt to mat format    for i=0:19        sourceFileName=['topic400digit4Train',num2str(i)];        matData = load(sourceFileName);        save([sourceFileName,'.mat'],’matData’)    end   Matlab数据转换成txt文本的方法: save file.txt testTF -ascii 如果文件名 file.txt有变量存储,如filename 则应采用如下格式进行保存 save(filename, ‘testTF’, ‘-ascii’)