<pre style='margin:0'>
Perry E. Metzger (pmetzger) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/a9e549e1e0611ea3e9a966c33a6e6ce7b52e4ba8">https://github.com/macports/macports-ports/commit/a9e549e1e0611ea3e9a966c33a6e6ce7b52e4ba8</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit a9e549e1e0611ea3e9a966c33a6e6ce7b52e4ba8
</span>Author: nilason <n_larsson@yahoo.com>
AuthorDate: Wed Oct 4 16:02:11 2023 +0200
<span style='display:block; white-space:pre;color:#404040;'> libsvm: update to version 3.32
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> The version update follows a general overhaul of the port and:
</span><span style='display:block; white-space:pre;color:#404040;'> - python subports replaces the python variants
</span><span style='display:block; white-space:pre;color:#404040;'> - the tools variant is not included by default
</span><span style='display:block; white-space:pre;color:#404040;'> - the java variant has been dropped
</span>---
math/libsvm/Portfile | 140 ++++-----
math/libsvm/files/fselect.py | 566 ----------------------------------
math/libsvm/files/gridregression.py | 311 -------------------
math/libsvm/files/patch-Makefile.diff | 103 +++++--
math/libsvm/files/patch-tools.diff | 35 +++
math/libsvm/files/plotroc.py | 219 -------------
6 files changed, 191 insertions(+), 1183 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/math/libsvm/Portfile b/math/libsvm/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index b6ed3408076..38c91ddc0c5 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/math/libsvm/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/math/libsvm/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,115 +1,117 @@
</span> # -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
PortSystem 1.0
<span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup makefile 1.0
</span>
name libsvm
epoch 3
<span style='display:block; white-space:pre;background:#ffe0e0;'>-version 3.20
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-revision 2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version 3.32
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> categories math
maintainers nomaintainer
license BSD
<span style='display:block; white-space:pre;background:#ffe0e0;'>-platforms darwin
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-description A free Support Vector Machine implementation.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+description A free Support Vector Machine implementation
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-long_description ${description} By Chih-Chung Chang and Chih-Jen Lin of \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+long_description {*}${description} By Chih-Chung Chang and Chih-Jen Lin of \
</span> National Taiwan University. \"LIBSVM is an integrated \
software for support vector classification, (C-SVC, nu-SVC), \
regression (epsilon-SVR, nu-SVR) and distribution estimation \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- (one-class SVM ). It supports multi-class classification.\"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (one-class SVM). It supports multi-class classification.\"
</span>
homepage https://www.csie.ntu.edu.tw/~cjlin/libsvm/
master_sites ${homepage}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums rmd160 857fc1fed153e72c894e3579e3b6cb92309e82fb \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 0f122480bef44dec4df6dae056f468c208e4e08c00771ec1b6dae2707fd945be \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 609951
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums rmd160 a023d5345971f207059dc1b713bb9e1e62db8c81 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 8644cc6518ca88bbc50d8c8ead1734f1ab9b6f17017045ef9ae38773aa653dad \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 908323
</span>
patchfiles patch-Makefile.diff
<span style='display:block; white-space:pre;background:#ffe0e0;'>-post-patch {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- reinplace "s|../libsvm.so.2|${prefix}/lib/libsvm.dylib|g" ${worksrcpath}/python/svm.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-use_configure no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> variant universal {}
set libver ${version}.0
build.target all
<span style='display:block; white-space:pre;background:#ffe0e0;'>-build.args CXX="${configure.cxx} [get_canonical_archflags cxx]" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- PREFIX=${prefix} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- VERSION=${libver}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+build.env-append VERSION=${libver}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+destroot.env-append VERSION=${libver}
</span>
set docdir ${prefix}/share/doc/${name}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-set libsvm_dir ${prefix}/share/${name}
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-destroot {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 755 -W ${worksrcpath} svm-train svm-predict svm-scale ${destroot}${prefix}/bin
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 644 -W ${worksrcpath} libsvm.a libsvm.${libver}.dylib ${destroot}${prefix}/lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 644 -W ${worksrcpath} svm.h ${destroot}${prefix}/include
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# create Python subports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set python_versions {310 311}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+foreach v ${python_versions} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ subport py${v}-${name} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set python_branch [string index ${v} 0].[string range ${v} 1 end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set python_prefix ${frameworks_dir}/Python.framework/Versions/${python_branch}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set python_bindir ${python_prefix}/bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set python_bin ${python_prefix}/bin/python${python_branch}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set python_pkgd ${python_prefix}/lib/python${python_branch}/site-packages
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ln -sf ${name}.${libver}.dylib ${destroot}${prefix}/lib/${name}.dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ description Python ${python_branch} bindings for {*}${name}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ long_description This package provides Python ${python_branch} modules for {*}${name}.
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 755 -d ${destroot}${docdir}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 755 -d ${destroot}${libsvm_dir}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 644 -W ${worksrcpath} COPYRIGHT README FAQ.html ${destroot}${docdir}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 644 -W ${worksrcpath} heart_scale ${destroot}${libsvm_dir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ categories math python
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # install python interface.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 755 -d ${destroot}${libsvm_dir}/python
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 644 -W ${worksrcpath}/python README svm.py svmutil.py ${destroot}${libsvm_dir}/python
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ patchfiles-append patch-tools.diff
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-variant java description {Install Java JAR files} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- depends_run-append bin:java:kaffe
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- post-destroot {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set jdir ${destroot}${prefix}/share/java
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 755 -d ${jdir}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- file rename ${worksrcpath}/java ${jdir}/${name}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_lib-append port:${name}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_lib-append port:py${v}-numpy \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ port:py${v}-scipy
</span> }
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-variant python27 description {Install Python 2.7 interface} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- depends_lib-append port:python27
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- post-destroot { install_py 2.7 }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-variant python37 description {Install Python 3.7 interface} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- depends_lib-append port:python37
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- post-destroot { install_py 3.7 }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {${subport} eq ${name}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pre-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -m 0755 -d ${destroot}${docdir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -m 0755 -d ${destroot}${docdir}/example
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-proc install_py {branch} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global frameworks_dir destroot worksrcpath
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set py_prefix ${frameworks_dir}/Python.framework/Versions/${branch}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set dir ${destroot}${py_prefix}/lib/python${branch}/site-packages
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 755 -d ${dir}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 644 -W ${worksrcpath}/python svm.py svmutil.py ${dir}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -m 0644 -W ${worksrcpath} COPYRIGHT README FAQ.html \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${destroot}${docdir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -m 0644 -W ${worksrcpath} heart_scale \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${destroot}${docdir}/example
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} elseif {[string match "py*" ${subport}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ build {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pre-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -m 0755 -d ${destroot}${python_pkgd}/libsvm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -m 0755 -d ${destroot}${prefix}/share/doc/${subport}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -m 0755 -d ${destroot}${python_bindir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# TODO: matlab and svm-toy.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -m 0644 {*}[glob ${worksrcpath}/python/libsvm/*.py] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${destroot}${python_pkgd}/libsvm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -m 0644 -W ${worksrcpath}/python README \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${destroot}${prefix}/share/doc/${subport}/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fs-traverse f ${destroot}${python_pkgd}/libsvm {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[file extension ${f}] eq ".py"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ reinplace -q "s|#!/usr/bin/env python||" ${f}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-variant tools description {Install useful tools} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# depends_run-append port:gnuplot
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach tool {checkdata.py easy.py grid.py subset.py} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set new_tool ${destroot}${python_bindir}/svm-${tool}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -m 0755 -W ${worksrcpath}/tools $tool ${new_tool}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ reinplace -q "s|/usr/bin/env python|${python_bin}|" ${new_tool}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ reinplace -q "s|@PREFIX@|${prefix}|" ${new_tool}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # fselect.py, plotroc.py and gridregression.py are taken from
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # fselect/fselect.py, roc/plotroc.py, gridsvr/gridregression.py
</span> post-destroot {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- file rename ${worksrcpath}/tools ${destroot}${libsvm_dir}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 755 -W ${filespath} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fselect.py plotroc.py gridregression.py ${destroot}${libsvm_dir}/tools
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach py {easy.py grid.py fselect.py plotroc.py gridregression.py} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- reinplace "s|\"\\.\\./|\"${prefix}/bin/|g" ${destroot}${libsvm_dir}/tools/${py}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- reinplace "s|\"\\./|\"${libsvm_dir}/tools/|g" ${destroot}${libsvm_dir}/tools/${py}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- reinplace "s|\"/usr/bin/|\"${prefix}/bin/|g" ${destroot}${libsvm_dir}/tools/${py}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach bin [glob -nocomplain -tails -directory "${destroot}${python_bindir}" *] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {file type "${destroot}${prefix}/bin/${bin}${python.link_binaries_suffix}"}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ln -s "${python_prefix}/bin/${bin}" "${destroot}${prefix}/bin/${bin}-${python_branch}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> }
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ notes-append "The tool scrips are renamed with the added prefix 'svm-',\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ eg. 'svm-checkdata.py'."
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-default_variants +java +python27 +tools
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# TODO: consider adding java and matlab support (preferably as subports),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# and 'svm-toy' (as non-default variant).
</span>
livecheck.type regex
livecheck.regex {Version ([0-9.]+) }
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/math/libsvm/files/fselect.py b/math/libsvm/files/fselect.py
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 93cfbd294ac..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/math/libsvm/files/fselect.py
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,566 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#!/usr/bin/env python
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-import random
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from random import randrange
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-import sys
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from time import time
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from datetime import datetime
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#import string
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#from string import *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-import os
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from os import system
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from os import unlink
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from subprocess import *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-##### Path Setting #####
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is_win32 = (sys.platform == 'win32')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if not is_win32:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gridpy_exe = "./grid.py -log2c -2,9,2 -log2g 1,-11,-2"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- svmtrain_exe="../svm-train"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- svmpredict_exe="../svm-predict"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gridpy_exe = r".\grid.py -log2c -2,9,2 -log2g 1,-11,-2"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- svmtrain_exe=r"..\windows\svmtrain.exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- svmpredict_exe=r"..\windows\svmpredict.exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-##### Global Variables #####
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-train_pathfile=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-train_file=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test_pathfile=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-test_file=""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if_predict_all=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-whole_fsc_dict={}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-whole_imp_v=[]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def arg_process():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global train_pathfile, test_pathfile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global train_file, test_file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global svmtrain_exe, svmpredict_exe
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if len(sys.argv) not in [2,3]:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print('Usage: %s training_file [testing_file]' % sys.argv[0])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- raise SystemExit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- train_pathfile=sys.argv[1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- assert os.path.exists(train_pathfile),"training file not found"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- train_file = os.path.split(train_pathfile)[1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if len(sys.argv) == 3:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- test_pathfile=sys.argv[2]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- assert os.path.exists(test_pathfile),"testing file not found"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- test_file = os.path.split(test_pathfile)[1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-##### Decide sizes of selected feautures #####
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def feat_num_try_half(max_index):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- v=[]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- while max_index > 1:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- v.append(max_index)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- max_index //= 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return v
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def feat_num_try(f_tuple):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for i in range(len(f_tuple)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if f_tuple[i][1] < 1e-20:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- i=i-1; break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #only take first eight numbers (>1%)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return feat_num_try_half(i+1)[:8]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def random_shuffle(label, sample):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- random.seed(1) # so that result is the same every time
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size = len(label)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for i in range(size):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ri = randrange(0, size-i)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- tmp = label[ri]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- label[ri] = label[size-i-1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- label[size-i-1] = tmp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- tmp = sample[ri]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sample[ri] = sample[size-i-1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sample[size-i-1] = tmp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### compare function used in list.sort(): sort by element[1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#def value_cmpf(x,y):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# if x[1]>y[1]: return -1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# if x[1]<y[1]: return 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# return 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def value_cmpf(x):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return (-x[1]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### cal importance of features
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### return fscore_dict and feat with desc order
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def cal_feat_imp(label,sample):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print("calculating fsc...")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- score_dict=cal_Fscore(label,sample)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- score_tuples = list(score_dict.items())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- score_tuples.sort(key = value_cmpf)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- feat_v = score_tuples
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for i in range(len(feat_v)): feat_v[i]=score_tuples[i][0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print("fsc done")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return score_dict,feat_v
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### select features and return new data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def select(sample, feat_v):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- new_samp = []
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- feat_v.sort()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #for each sample
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for s in sample:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- point={}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #for each feature to select
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for f in feat_v:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if f in s: point[f]=s[f]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- new_samp.append(point)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return new_samp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### Do parameter searching (grid.py)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def train_svm(tr_file):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd = "%s %s" % (gridpy_exe,tr_file)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print(cmd)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print('Cross validation...')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- std_out = Popen(cmd, shell = True, stdout = PIPE).stdout
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- line = ''
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- while 1:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- last_line = line
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- line = std_out.readline()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if not line: break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- c,g,rate = map(float,last_line.split())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print('Best c=%s, g=%s CV rate=%s' % (c,g,rate))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return c,g,rate
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### Given (C,g) and training/testing data,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### return predicted labels
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def predict(tr_label, tr_sample, c, g, test_label, test_sample, del_model=1, model_name=None):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global train_file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- tr_file = train_file+".tr"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- te_file = train_file+".te"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if model_name: model_file = model_name
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else: model_file = "%s.model"%tr_file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- out_file = "%s.o"%te_file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # train
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writedata(tr_sample,tr_label,tr_file)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd = "%s -c %f -g %f %s %s" % (svmtrain_exe,c,g,tr_file,model_file)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- os.system(cmd)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # test
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writedata(test_sample,test_label,te_file)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmd = "%s %s %s %s" % (svmpredict_exe, te_file,model_file,out_file )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print(cmd)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- os.system(cmd)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # fill in pred_y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pred_y=[]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fp = open(out_file)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- line = fp.readline()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- while line:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pred_y.append( float(line) )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- line = fp.readline()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rem_file(tr_file)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #rem_file("%s.out"%tr_file)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #rem_file("%s.png"%tr_file)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rem_file(te_file)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if del_model: rem_file(model_file)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fp.close()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rem_file(out_file)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return pred_y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def cal_acc(pred_y, real_y):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- right = 0.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for i in range(len(pred_y)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if(pred_y[i] == real_y[i]): right += 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print("ACC: %d/%d"%(right, len(pred_y)))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return right/len(pred_y)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### balanced accuracy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def cal_bacc(pred_y, real_y):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- p_right = 0.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- n_right = 0.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- p_num = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- n_num = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size=len(pred_y)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for i in range(size):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if real_y[i] == 1:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- p_num+=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if real_y[i]==pred_y[i]: p_right+=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- n_num+=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if real_y[i]==pred_y[i]: n_right+=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print([p_right,p_num,n_right,n_num])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog(" p_yes/p_num, n_yes/n_num: %d/%d , %d/%d\n"%(p_right,p_num,n_right,n_num))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if p_num==0: p_num=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if n_num==0: n_num=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return 0.5*( p_right/p_num + n_right/n_num )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-##### Log related #####
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def initlog(name):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global logname
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- logname = name
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- logfile_fd = open(logname, 'w')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- logfile_fd.close()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-VERBOSE_MAX=100
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-VERBOSE_ITER = 3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-VERBOSE_GRID_TIME = 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-VERBOSE_TIME = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def writelog(str, vlevel=VERBOSE_MAX):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global logname
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if vlevel > VERBOSE_ITER:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- logfile_fd = open(logname, 'a')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- logfile_fd.write(str)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- logfile_fd.close()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def rem_file(filename):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #system("rm -f %s"%filename)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- unlink(filename)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-##### MAIN FUNCTION #####
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def main():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global train_pathfile, train_file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global test_pathfile, test_file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global whole_fsc_dict,whole_imp_v
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- times=5 #number of hold-out times
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- accuracy=[]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ### Read Data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print("reading....")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- t=time()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- train_label, train_sample, max_index = readdata(train_pathfile)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- t=time()-t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog("loading data '%s': %.1f sec.\n"%(train_pathfile,t), VERBOSE_TIME)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print("read done")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ### Randomly shuffle data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- random_shuffle(train_label, train_sample)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ###calculate f-score of whole training data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #whole_imp_v contains feat with order
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- t=time()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- whole_fsc_dict,whole_imp_v = cal_feat_imp(train_label,train_sample)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- t=time()-t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog("cal f-score time: %.1f\n"%t, VERBOSE_TIME)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ###write (sorted) f-score list in another file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- f_tuples = list(whole_fsc_dict.items())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- f_tuples.sort(key = value_cmpf)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fd = open("%s.fscore"%train_file, 'w')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for t in f_tuples:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fd.write("%d: \t%.6f\n"%t)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fd.close()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ### decide sizes of features to try
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fnum_v = feat_num_try(f_tuples) #ex: [50,25,12,6,3,1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for i in range(len(fnum_v)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- accuracy.append([])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog("try feature sizes: %s\n\n"%(fnum_v))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog("%#Feat\test. acc.\n")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- est_acc=[]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #for each possible feature subset
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for j in range(len(fnum_v)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fn = fnum_v[j] # fn is the number of features selected
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fv = whole_imp_v[:fn] # fv is indices of selected features
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- t=time()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #pick features
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- tr_sel_samp = select(train_sample, fv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- tr_sel_name = train_file+".tr"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- t=time()-t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog("\n feature num: %d\n"%fn, VERBOSE_ITER)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog(" pick time: %.1f\n"%t, VERBOSE_TIME)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- t=time()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writedata(tr_sel_samp,train_label,tr_sel_name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- t=time()-t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog(" write data time: %.1f\n"%t, VERBOSE_TIME)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- t=time()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # choose best c, gamma from splitted training sample
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- c,g, cv_acc = train_svm(tr_sel_name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- t=time()-t
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog(" choosing c,g time: %.1f\n"%t, VERBOSE_GRID_TIME)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- est_acc.append(cv_acc)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog("%d:\t%.5f\n"%(fnum_v[j],cv_acc) )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print(fnum_v)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print(est_acc)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fnum=fnum_v[est_acc.index(max(est_acc))]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# print(est_acc.index(max(est_acc)))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print('Number of selected features %s' % fnum)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print('Please see %s.select for details' % train_file)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #result for features selected
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sel_fv = whole_imp_v[:fnum]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog("max validation accuarcy: %.6f\n"%max(est_acc))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog("\nselect features: %s\n"%sel_fv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog("%s features\n"%fnum)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # REMOVE INTERMEDIATE TEMPORARY FILE: training file after selection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rem_file(tr_sel_name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rem_file("%s.out"%tr_sel_name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rem_file("%s.png"%tr_sel_name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ### do testing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- test_label=None
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- test_sample=None
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if test_pathfile != "":
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print("reading testing data....")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- test_label, test_sample, max_index = readdata(test_pathfile)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog("\nloading testing data '%s'\n"%test_pathfile)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print("read done")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #picking features
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- train_sel_samp = select(train_sample, sel_fv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- test_sel_samp = select(test_sample, sel_fv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #grid search
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- train_sel_name = "%s.%d"%(train_file,fnum)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writedata(train_sel_samp,train_label,train_sel_name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- c,g, cv_acc = train_svm(train_sel_name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog("best (c,g)= %s, cv-acc = %.6f\n"%([c,g],cv_acc))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # REMOVE INTERMEDIATE TEMPORARY FILE: training file after selection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rem_file(train_sel_name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ### predict
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pred_y = predict(train_label, train_sel_samp, c, g, test_label, test_sel_samp, 0, "%s.model"%train_sel_name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #calculate accuracy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- acc = cal_acc(pred_y, test_label)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ##acc = cal_bacc(pred_y, test_label)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog("testing accuracy = %.6f\n"%acc)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #writing predict labels
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- out_name = "%s.%d.pred"%(test_file,fnum)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fd = open(out_name, 'w')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for y in pred_y: fd.write("%f\n"%y)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fd.close()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-### predict all possible sets ###
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def predict_all():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global train_pathfile, train_file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global test_pathfile, test_file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global whole_fsc_dict,whole_imp_v
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- train_label, train_sample, max_index = readdata(train_pathfile)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- test_label, test_sample, m = readdata(test_pathfile)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- random_shuffle(train_label, train_sample)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ###whole_fsc_dict, ordered_feats = cal_feat_imp(train_label,train_sample)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ordered_feats = whole_imp_v
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- f_tuples = whole_fsc_dict.items()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- f_tuples.sort(key = value_cmpf)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fnum_v = feat_num_try(f_tuples) #ex: [50,25,12,6,3,1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog("\nTest All %s\n"%fnum_v)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for fnum in fnum_v:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sel_fv = ordered_feats[:fnum]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #picking features
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- train_sel_samp = select(train_sample, sel_fv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- test_sel_samp = select(test_sample, sel_fv)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #grid search
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- train_sel_name = "%s.%d"%(train_file,fnum)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writedata(train_sel_samp,train_label,train_sel_name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- c,g, cv_acc = train_svm(train_sel_name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog("best (c,g)= %s, cv-acc = %.6f\n"%([c,g],cv_acc))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # REMOVE INTERMEDIATE TEMPORARY FILE: training file after selection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rem_file(train_sel_name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #predict
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pred_y = predict(train_label, train_sel_samp, c, g, test_label, test_sel_samp)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #calculate accuracy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- acc = cal_acc(pred_y, test_label)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ##acc = cal_bacc(pred_y, test_label)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- writelog("feat# %d, testing accuracy = %.6f\n"%(fnum,acc))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #writing predict labels
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- out_name = "%s.%d.pred"%(test_file,fnum)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fd = open(out_name, 'w')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for y in pred_y: fd.write("%f\n"%y)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fd.close()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- del_out_png = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if del_out_png:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rem_file("%s.out"%train_sel_name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rem_file("%s.png"%train_sel_name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-###return a dict containing F_j
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def cal_Fscore(labels,samples):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- data_num=float(len(samples))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- p_num = {} #key: label; value: data num
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sum_f = [] #index: feat_idx; value: sum
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sum_l_f = {} #dict of lists. key1: label; index2: feat_idx; value: sum
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sumq_l_f = {} #dict of lists. key1: label; index2: feat_idx; value: sum of square
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- F={} #key: feat_idx; valud: fscore
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- max_idx = -1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ### pass 1: check number of each class and max index of features
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for p in range(len(samples)): # for every data point
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- label=labels[p]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- point=samples[p]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if label in p_num: p_num[label] += 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else: p_num[label] = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for f in point.keys(): # for every feature
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if f>max_idx: max_idx=f
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ### now p_num and max_idx are set
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ### initialize variables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sum_f = [0 for i in range(max_idx)]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for la in p_num.keys():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sum_l_f[la] = [0 for i in range(max_idx)]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sumq_l_f[la] = [0 for i in range(max_idx)]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ### pass 2: calculate some stats of data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for p in range(len(samples)): # for every data point
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- point=samples[p]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- label=labels[p]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for tuple in point.items(): # for every feature
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- f = tuple[0]-1 # feat index
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- v = tuple[1] # feat value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sum_f[f] += v
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sum_l_f[label][f] += v
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sumq_l_f[label][f] += v**2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ### now sum_f, sum_l_f, sumq_l_f are done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ### for each feature, calculate f-score
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- eps = 1e-12
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for f in range(max_idx):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SB = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for la in p_num.keys():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SB += (p_num[la] * (sum_l_f[la][f]/p_num[la] - sum_f[f]/data_num)**2 )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SW = eps
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for la in p_num.keys():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SW += (sumq_l_f[la][f] - (sum_l_f[la][f]**2)/p_num[la])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- F[f+1] = SB / SW
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return F
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-###### svm data IO ######
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def readdata(filename):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- labels=[]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- samples=[]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- max_index=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #load training data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fp = open(filename)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- line = fp.readline()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- while line:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # added by untitled, allowing data with comments
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- line=line.strip()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if line[0]=="#":
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- line = fp.readline()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- elems = line.split()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sample = {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for e in elems[1:]:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- points = e.split(":")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- p0 = int( points[0].strip() )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- p1 = float( points[1].strip() )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sample[p0] = p1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if p0 > max_index:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- max_index = p0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- labels.append(float(elems[0]))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- samples.append(sample)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- line = fp.readline()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fp.close()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return labels,samples,max_index
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def writedata(samples,labels,filename):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fp=sys.stdout
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if filename:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fp=open(filename,"w")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- num=len(samples)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for i in range(num):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if labels:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fp.write("%s"%labels[i])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fp.write("0")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kk=list(samples[i].keys())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kk.sort()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for k in kk:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fp.write(" %d:%f"%(k,samples[i][k]))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fp.write("\n")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fp.flush()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fp.close()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-###### PROGRAM ENTRY POINT ######
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-arg_process()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-initlog("%s.select"%train_file)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-writelog("start: %s\n\n"%datetime.now())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# do testing on all possible feature sets
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if if_predict_all :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- predict_all()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-writelog("\nend: \n%s\n"%datetime.now())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/math/libsvm/files/gridregression.py b/math/libsvm/files/gridregression.py
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 24892556c07..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/math/libsvm/files/gridregression.py
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,311 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#!/usr/bin/env python
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-import os, sys, traceback
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-import getpass
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from threading import Thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from subprocess import *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if(sys.hexversion < 0x03000000):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- import Queue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-else:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- import queue as Queue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# svmtrain and gnuplot executable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-is_win32 = (sys.platform == 'win32')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-svmtrain_exe = "../svm-train"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-gnuplot_exe = "/usr/bin/gnuplot"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# example for windows
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# svmtrain_exe = r"c:\tmp\libsvm-2.4\windows\svmtrain.exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# gnuplot_exe = r"c:\tmp\gp373w32\pgnuplot.exe"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# global parameters and their default values
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-fold = 5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-c_begin, c_end, c_step = -1, 6, 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-g_begin, g_end, g_step = 0, -8, -1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-p_begin, p_end, p_step = -8, -1, 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-global dataset_pathname, dataset_title, pass_through_string
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-global out_filename, png_filename
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# experimental
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ssh_workers = []
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# ssh_workers = ['linux1','linux1','linux2','linux2','linux3', 'linux4', 'linux6','linux7','linux8','linux8','linux9','linux10','linux11','linux12']
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-nr_local_worker = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# process command line options, set global parameters
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def process_options(argv=sys.argv):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global fold
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global c_begin, c_end, c_step
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global g_begin, g_end, g_step
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global p_begin, p_end, p_step
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global dataset_pathname, dataset_title, pass_through_string
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global svmtrain_exe, gnuplot_exe, gnuplot, out_filename, png_filename
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- usage = """\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Usage: grid.py [-log2c begin,end,step] [-log2g begin,end,step] [-log2p begin,end,step] [-v fold]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[-svmtrain pathname] [-gnuplot pathname] [-out pathname] [-png pathname]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-[additional parameters for svm-train] dataset"""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if len(argv) < 2:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print(usage)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sys.exit(1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dataset_pathname = argv[-1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dataset_title = os.path.split(dataset_pathname)[1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- out_filename = '%s.out' % dataset_title
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- png_filename = '%s.png' % dataset_title
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pass_through_options = []
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- i = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- while i < len(argv) - 1:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if argv[i] == "-log2c":
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- i = i + 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- (c_begin,c_end,c_step) = map(float,argv[i].split(","))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- elif argv[i] == "-log2g":
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- i = i + 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- (g_begin,g_end,g_step) = map(float,argv[i].split(","))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- elif argv[i] == "-log2p":
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- i = i + 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- (p_begin,p_end,p_step) = map(float,argv[i].split(","))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- elif argv[i] == "-v":
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- i = i + 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fold = argv[i]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- elif argv[i] in ('-c','-g'):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print("Option -c and -g are renamed.")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print(usage)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sys.exit(1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- elif argv[i] == '-svmtrain':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- i = i + 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- svmtrain_exe = argv[i]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- elif argv[i] == '-gnuplot':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- i = i + 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot_exe = argv[i]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- elif argv[i] == '-out':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- i = i + 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- out_filename = argv[i]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- elif argv[i] == '-png':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- i = i + 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- png_filename = argv[i]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pass_through_options.append(argv[i])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- i = i + 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pass_through_string = " ".join(pass_through_options)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- assert os.path.exists(svmtrain_exe),"svm-train executable not found"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- assert os.path.exists(gnuplot_exe),"gnuplot executable not found"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- assert os.path.exists(dataset_pathname),"dataset not found"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# gnuplot = Popen(gnuplot_exe,stdin = PIPE).stdin
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def range_f(begin,end,step):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # like range, but works on non-integer too
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- seq = []
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- while True:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if step > 0 and begin > end: break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if step < 0 and begin < end: break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- seq.append(begin)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- begin = begin + step
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return seq
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def permute_sequence(seq):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- n = len(seq)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if n <= 1: return seq
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- mid = int(n/2)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- left = permute_sequence(seq[:mid])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- right = permute_sequence(seq[mid+1:])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ret = [seq[mid]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- while left or right:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if left: ret.append(left.pop(0))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if right: ret.append(right.pop(0))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return ret
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def redraw (db,tofile=0):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if len(db) == 0: return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- begin_level = round(max(map(lambda x: (x[2],db)))) - 3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- step_size = 0.5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if tofile:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.write(b"set term png transparent small color\n")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.write(b"set output \"%s\"\n" % png_filename.replace('\\','\\\\'))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #gnuplot.write("set term postscript color solid\n".encode())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #gnuplot.write(("set output \"%s.ps\"\n" % dataset_title).encode())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if is_win32:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.write(b"set term windows\n")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.write(b"set term x11\n")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.write(b"set xlabel \"lg(C)\"\n")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.write(b"set ylabel \"lg(gamma)\"\n")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.write(b"set xrange [%s:%s]\n" % (c_begin,c_end))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.write(b"set yrange [%s:%s]\n" % (g_begin,g_end))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.write(b"set contour\n")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.write(b"set cntrparam levels incremental %s,%s,100\n" % (begin_level,step_size))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.write(b"set nosurface\n")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.write(b"set view 0,0\n")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.write(b"set label \"%s\" at screen 0.4,0.9\n" % dataset_title)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.write(b"splot \"-\" with lines\n")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- db.sort(key = lambda x:(x[0], -x[1]))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- prevc = db[0][0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for line in db:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if prevc != line[0]:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.write(b"\n")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- prevc = line[0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.write(b"%s %s %s\n" % line)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.write(b"e\n")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.write(b"\n") # force gnuplot back to prompt when term set failure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot.flush()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def calculate_jobs():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- c_seq = permute_sequence(range_f(c_begin,c_end,c_step))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- g_seq = permute_sequence(range_f(g_begin,g_end,g_step))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- p_seq = permute_sequence(range_f(p_begin,p_end,p_step))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- nr_c = len(c_seq)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- nr_g = len(g_seq)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- nr_p = len(p_seq)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- jobs = []
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for i in range(0,nr_c):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for j in range(0,nr_g):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for s in range(0,nr_p):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- line = []
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- line.append((c_seq[i],g_seq[j],p_seq[s]))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- jobs.append(line)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return jobs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-class WorkerStopToken: # used to notify the worker to stop
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pass
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-class Worker(Thread):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- def __init__(self,name,job_queue,result_queue):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Thread.__init__(self)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.name = name
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.job_queue = job_queue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.result_queue = result_queue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- def run(self):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- while True:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- (cexp,gexp,pexp) = self.job_queue.get()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if cexp is WorkerStopToken:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.job_queue.put((cexp,gexp,pexp))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # print 'worker %s stop.' % self.name
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- try:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rate = self.run_one(2.0**cexp,2.0**gexp,2.0**pexp)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if rate is None: raise RuntimeError("get no rate")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- except:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # we failed, let others do that and we just quit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- traceback.print_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.job_queue.put((cexp,gexp,pexp))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print('worker %s quit.' % self.name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.result_queue.put((self.name,cexp,gexp,pexp,rate))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-class LocalWorker(Worker):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- def run_one(self,c,g,p):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmdline = '%s -s 3 -c %s -g %s -p %s -v %s %s %s' % \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- (svmtrain_exe,c,g,p,fold,pass_through_string,dataset_pathname)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- result = Popen(cmdline,shell=True,stdout=PIPE).stdout
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for line in result.readlines():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if str(line).find("Cross") != -1:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return float(line.split()[-1])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-class SSHWorker(Worker):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- def __init__(self,name,job_queue,result_queue,host):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Worker.__init__(self,name,job_queue,result_queue)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.host = host
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.cwd = os.getcwd()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- def run_one(self,c,g,p):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmdline = 'ssh %s "cd %s; %s -s 3 -c %s -g %s -p %s -v %s %s %s"' % \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- (self.host,self.cwd,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- svmtrain_exe,c,g,p,fold,pass_through_string,dataset_pathname)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# print cmdline
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- result = Popen(cmdline,shell=True,stdout=PIPE).stdout
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for line in result.readlines():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if str(line).find("Cross") != -1:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return float(line.split()[-1])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def main():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # set parameters
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- process_options()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # put jobs in queue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- jobs = calculate_jobs()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #print(len(jobs))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- job_queue = Queue.Queue(0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- result_queue = Queue.Queue(0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for line in jobs:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for (c,g,p) in line:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- job_queue.put((c,g,p))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # hack the queue to become a stack --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # this is important when some thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # failed and re-put a job. It we still
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # use FIFO, the job will be put
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # into the end of the queue, and the graph
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # will only be updated in the end
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- job_queue._put = job_queue.queue.appendleft
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # fire ssh workers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ssh_workers:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for host in ssh_workers:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SSHWorker(host,job_queue,result_queue,host).start()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # fire local workers
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for i in range(nr_local_worker):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- LocalWorker('local',job_queue,result_queue).start()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # gather results
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- done_jobs = {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- result_file = open(out_filename,'w')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- db = []
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- best_mse = float('+inf')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for line in jobs:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for (c,g,p) in line:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- while (c,g,p) not in done_jobs:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- (worker,c1,g1,p1,mse) = result_queue.get()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- done_jobs[(c1,g1,p1)] = mse
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- result_file.write('%s %s %s %s\n' % (c1,g1,p1,mse))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- result_file.flush()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if mse < best_mse:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- best_mse = mse
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- best_c = 2.0**c1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- best_g = 2.0**g1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- best_p = 2.0**p1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print("[%s] %s %s %s %s (best c=%s, g=%s, p=%s, mse=%s)" % \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-(worker,c1,g1,p1,mse,best_c,best_g,best_p,best_mse))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# db.append((c,g,r,done_jobs[(c,g,r)]))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- job_queue.put((WorkerStopToken,None,None))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print("%s %s %s %s" % (best_c,best_g,best_p,best_mse))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-main()
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/math/libsvm/files/patch-Makefile.diff b/math/libsvm/files/patch-Makefile.diff
</span><span style='display:block; white-space:pre;color:#808080;'>index ab1028490c2..1cdd3ae9b2b 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/math/libsvm/files/patch-Makefile.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/math/libsvm/files/patch-Makefile.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,26 +1,93 @@
</span> --- Makefile.orig 2012-04-12 03:37:14.000000000 +0900
+++ Makefile 2012-11-10 08:41:14.000000000 +0900
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -3,7 +3,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- SHVER = 2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- OS = $(shell uname)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1,28 +1,67 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-CXX ?= g++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-CFLAGS = -Wall -Wconversion -O3 -fPIC
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-SHVER = 3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-OS = $(shell uname)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-ifeq ($(OS),Darwin)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- SHARED_LIB_FLAG = -dynamiclib -Wl,-install_name,libsvm.so.$(SHVER)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- SHARED_LIB_FLAG = -shared -Wl,-soname,libsvm.so.$(SHVER)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++CC ?= clang
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++CXX ?= clang++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# Uncomment the following lines to enable parallelization with OpenMP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# CFLAGS += -fopenmp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# SHARED_LIB_FLAG += -fopenmp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++CPPFLAGS +=
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++CFLAGS +=
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++LDFLAGS += -L.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++LIBS +=
</span>
-all: svm-train svm-predict svm-scale
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+all: svm-train svm-predict svm-scale libsvm.a libsvm.dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++VMAJOR := $(shell echo $(VERSION) | sed -rne 's/([0-9]*)\.[0-9].*/\1/p')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++VMINOR := $(shell echo $(VERSION) | sed -rne 's/[0-9]\.([0-9]*)\..*/\1/p')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++VPATCH := $(shell echo $(VERSION) | sed -rne 's/[0-9]*\.[0-9]*\.([0-9]*).*/\1/p')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++SHVER = $(VMAJOR)
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- lib: svm.o
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if [ "$(OS)" = "Darwin" ]; then \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -21,5 +21,14 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $(CXX) $(CFLAGS) svm-scale.c -o svm-scale
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- svm.o: svm.cpp svm.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- $(CXX) $(CFLAGS) -c svm.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+libsvm.a: svm.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-lib: svm.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- $(CXX) $(SHARED_LIB_FLAG) svm.o -o libsvm.so.$(SHVER)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-svm-predict: svm-predict.c svm.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- $(CXX) $(CFLAGS) svm-predict.c svm.o -o svm-predict -lm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-svm-train: svm-train.c svm.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- $(CXX) $(CFLAGS) svm-train.c svm.o -o svm-train -lm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++DYLIBFILE = libsvm.$(VERSION).dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++LIB_LIBS += $(LIBS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++LIB_CFLAGS += $(CFLAGS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++LIB_LDFLAGS += $(LIBS) -fPIC
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++EXE_CFLAGS += $(CFLAGS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++EXE_LDFLAGS += $(LDFLAGS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++incdir ?= $(PREFIX)/include
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++bindir ?= $(PREFIX)/bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++libdir ?= $(PREFIX)/lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++incdest = $(DESTDIR)$(incdir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++bindest = $(DESTDIR)$(bindir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++libdest = $(DESTDIR)$(libdir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++all: svm-train svm-predict svm-scale libsvm.a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++svm-predict: svm-predict.c $(DYLIBFILE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ $(CC) $(CPPFLAGS) $(EXE_CFLAGS) $(EXE_LDFLAGS) svm-predict.c -o $@ -lm -lsvm -lstdc++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++svm-train: svm-train.c $(DYLIBFILE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ $(CC) $(CPPFLAGS) $(EXE_CFLAGS) $(EXE_LDFLAGS) svm-train.c -o $@ -lm -lsvm -lstdc++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ svm-scale: svm-scale.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- $(CXX) $(CFLAGS) svm-scale.c -o svm-scale
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-svm.o: svm.cpp svm.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- $(CXX) $(CFLAGS) -c svm.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ $(CC) $(CPPFLAGS) $(EXE_CFLAGS) $(EXE_LDFLAGS) svm-scale.c -o $@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$(DYLIBFILE): svm.cpp svm.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ $(CXX) $(CPPFLAGS) $(LIB_CFLAGS) $(LIB_LDFLAGS) -dynamiclib \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ -install_name $(libdir)/$@ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ -current_version $(VERSION) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ -compatibility_version $(SHVER).$(VMINOR) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ -o $@ svm.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ rm -f libsvm.$(SHVER).dylib libsvm.dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ln -s $@ libsvm.$(SHVER).dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ln -s libsvm.$(SHVER).dylib libsvm.dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++libsvm.a:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ $(CXX) $(CPPFLAGS) $(LIB_CFLAGS) -c -o svm.o svm.cpp
</span> + ar rc libsvm.a svm.o
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ranlib libsvm.a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+libsvm.dylib: svm.o
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ $(CXX) $(CFLAGS) -dynamiclib -install_name $(PREFIX)/lib/libsvm.dylib \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ -current_version $(VERSION) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ -compatibility_version $(VERSION) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ -o libsvm.$(VERSION).dylib svm.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ranlib -c libsvm.a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++install: all
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ $(INSTALL) -d $(bindest) $(libdest)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ $(INSTALL) -m 755 svm-train svm-predict svm-scale $(bindest)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ $(INSTALL) -m 644 libsvm.a $(libdest)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ $(INSTALL) -m 644 $(DYLIBFILE) $(libdest)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ $(INSTALL) -m 644 svm.h $(incdest)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ cd $(libdest) && ln -s $(DYLIBFILE) libsvm.$(SHVER).dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ cd $(libdest) && ln -s libsvm.$(SHVER).dylib libsvm.dylib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span> clean:
<span style='display:block; white-space:pre;background:#ffe0e0;'>- rm -f *~ svm.o svm-train svm-predict svm-scale libsvm.so.$(SHVER)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- rm -f *~ svm.o svm-train svm-predict svm-scale libsvm.so.$(SHVER)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ rm -f *~ svm.o svm-train svm-predict svm-scale
</span> + rm -f *.a *.dylib
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/math/libsvm/files/patch-tools.diff b/math/libsvm/files/patch-tools.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..121b3a317ba
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/math/libsvm/files/patch-tools.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,35 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- tools/grid.py.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ tools/grid.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -18,8 +18,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ def __init__(self, dataset_pathname, options):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dirname = os.path.dirname(__file__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if sys.platform != 'win32':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- self.svmtrain_pathname = os.path.join(dirname, '../svm-train')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- self.gnuplot_pathname = '/usr/bin/gnuplot'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ self.svmtrain_pathname = '@PREFIX@/bin/svm-train'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ self.gnuplot_pathname = '@PREFIX@/bin/gnuplot'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # example for windows
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ self.svmtrain_pathname = os.path.join(dirname, r'..\windows\svm-train.exe')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- tools/easy.py.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ tools/easy.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -12,11 +12,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ is_win32 = (sys.platform == 'win32')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if not is_win32:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- svmscale_exe = "../svm-scale"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- svmtrain_exe = "../svm-train"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- svmpredict_exe = "../svm-predict"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- grid_py = "./grid.py"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- gnuplot_exe = "/usr/bin/gnuplot"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ svmscale_exe = "@PREFIX@/bin/svm-scale"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ svmtrain_exe = "@PREFIX@/bin/svm-train"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ svmpredict_exe = "@PREFIX@/bin/svm-predict"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ grid_py = "@PREFIX@/bin/snm-grid.py"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ gnuplot_exe = "@PREFIX@/bin/gnuplot"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # example for windows
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ svmscale_exe = r"..\windows\svm-scale.exe"
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/math/libsvm/files/plotroc.py b/math/libsvm/files/plotroc.py
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 71cef78eb54..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/math/libsvm/files/plotroc.py
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,219 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#!/usr/bin/env python
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#This tool allow users to plot SVM-prob ROC curve from data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from svmutil import *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from sys import argv, platform
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from os import path, popen
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from random import randrange , seed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from operator import itemgetter
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-from time import sleep
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#search path for gnuplot executable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#be careful on using windows LONG filename, surround it with double quotes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#and leading 'r' to make it raw string, otherwise, repeat \\.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-gnuplot_exe_list = [r'"C:\Program Files\gnuplot\pgnuplot.exe"', "/usr/bin/gnuplot","/usr/local/bin/gnuplot"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def get_pos_deci(train_y, train_x, test_y, test_x, param):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- model = svm_train(train_y, train_x, param)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #predict and grab decision value, assure deci>0 for label+,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #the positive descision value = val[0]*labels[0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- labels = model.get_labels()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- py, evals, deci = svm_predict(test_y, test_x, model)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- deci = [labels[0]*val[0] for val in deci]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return deci,model
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#get_cv_deci(prob_y[], prob_x[], svm_parameter param, nr_fold)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#input raw attributes, labels, param, cv_fold in decision value building
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#output list of decision value, remember to seed(0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def get_cv_deci(prob_y, prob_x, param, nr_fold):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if nr_fold == 1 or nr_fold==0:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- deci,model = get_pos_deci(prob_y, prob_x, prob_y, prob_x, param)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return deci
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- deci, model = [], []
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- prob_l = len(prob_y)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #random permutation by swapping i and j instance
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for i in range(prob_l):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- j = randrange(i,prob_l)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- prob_x[i], prob_x[j] = prob_x[j], prob_x[i]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- prob_y[i], prob_y[j] = prob_y[j], prob_y[i]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #cross training : folding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for i in range(nr_fold):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- begin = i * prob_l // nr_fold
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- end = (i + 1) * prob_l // nr_fold
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- train_x = prob_x[:begin] + prob_x[end:]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- train_y = prob_y[:begin] + prob_y[end:]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- test_x = prob_x[begin:end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- test_y = prob_y[begin:end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- subdeci, submdel = get_pos_deci(train_y, train_x, test_y, test_x, param)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- deci += subdeci
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return deci
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#a simple gnuplot object
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-class gnuplot:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- def __init__(self, term='onscreen'):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # -persists leave plot window on screen after gnuplot terminates
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if platform == 'win32':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmdline = gnuplot_exe
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.__dict__['screen_term'] = 'windows'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cmdline = gnuplot_exe + ' -persist'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.__dict__['screen_term'] = 'x11'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.__dict__['iface'] = popen(cmdline,'w')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.set_term(term)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- def set_term(self, term):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if term=='onscreen':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.writeln("set term %s" % self.screen_term)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #term must be either x.ps or x.png
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if term.find('.ps')>0:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.writeln("set term postscript eps color 22")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- elif term.find('.png')>0:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.writeln("set term png")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print("You must set term to either *.ps or *.png")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- raise SystemExit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.output = term
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- def writeln(self,cmdline):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.iface.write(cmdline + '\n')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- def __setattr__(self, attr, val):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if type(val) == str:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.writeln('set %s \"%s\"' % (attr, val))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print("Unsupport format:", attr, val)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- raise SystemExit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #terminate gnuplot
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- def __del__(self):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.writeln("quit")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.iface.flush()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.iface.close()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- def __repr__(self):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return "<gnuplot instance: output=%s>" % term
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #data is a list of [x,y]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- def plotline(self, data):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.writeln("plot \"-\" notitle with lines linewidth 1")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for i in range(len(data)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.writeln("%f %f" % (data[i][0], data[i][1]))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sleep(0) #delay
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- self.writeln("e")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if platform=='win32':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sleep(3)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#processing argv and set some global variables
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def proc_argv(argv = argv):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #print("Usage: %s " % argv[0])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #The command line : ./plotroc.py [-v cv_fold | -T testing_file] [libsvm-options] training_file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- train_file = argv[-1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- test_file = None
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fold = 5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- options = []
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- i = 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- while i < len(argv)-1:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if argv[i] == '-T':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- test_file = argv[i+1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- i += 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- elif argv[i] == '-v':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fold = int(argv[i+1])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- i += 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else :
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- options += [argv[i]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- i += 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return ' '.join(options), fold, train_file, test_file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def plot_roc(deci, label, output, title):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #count of postive and negative labels
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- db = []
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pos, neg = 0, 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for i in range(len(label)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if label[i]>0:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- pos+=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- neg+=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- db.append([deci[i], label[i]])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #sorting by decision value
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- db = sorted(db, key=itemgetter(0), reverse=True)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #calculate ROC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xy_arr = []
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- tp, fp = 0., 0. #assure float division
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for i in range(len(db)):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if db[i][1]>0: #positive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- tp+=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fp+=1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xy_arr.append([fp/neg,tp/pos])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #area under curve
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- aoc = 0.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- prev_x = 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for x,y in xy_arr:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if x != prev_x:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- aoc += (x - prev_x) * y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- prev_x = x
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #begin gnuplot
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if title == None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- title = output
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #also write to file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- g = gnuplot(output)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- g.xlabel = "False Positive Rate"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- g.ylabel = "True Positive Rate"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- g.title = "ROC curve of %s (AUC = %.4f)" % (title,aoc)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- g.plotline(xy_arr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #display on screen
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- s = gnuplot('onscreen')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- s.xlabel = "False Positive Rate"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- s.ylabel = "True Positive Rate"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- s.title = "ROC curve of %s (AUC = %.4f)" % (title,aoc)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- s.plotline(xy_arr)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def check_gnuplot_exe():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global gnuplot_exe
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot_exe = None
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for g in gnuplot_exe_list:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if path.exists(g.replace('"','')):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- gnuplot_exe=g
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if gnuplot_exe == None:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print("You must add correct path of 'gnuplot' into gnuplot_exe_list")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- raise SystemExit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-def main():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- check_gnuplot_exe()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if len(argv) <= 1:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print("Usage: %s [-v cv_fold | -T testing_file] [libsvm-options] training_file" % argv[0])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- raise SystemExit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- param,fold,train_file,test_file = proc_argv()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- output_file = path.split(train_file)[1] + '-roc.png'
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #read data
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- train_y, train_x = svm_read_problem(train_file)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if set(train_y) != set([1,-1]):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print("ROC is only applicable to binary classes with labels 1, -1")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- raise SystemExit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #get decision value, with positive = label+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- seed(0) #reset random seed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if test_file: #go with test_file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- output_title = "%s on %s" % (path.split(test_file)[1], path.split(train_file)[1])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- test_y, test_x = svm_read_problem(test_file)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if set(test_y) != set([1,-1]):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- print("ROC is only applicable to binary classes with labels 1, -1")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- raise SystemExit
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- deci,model = get_pos_deci(train_y, train_x, test_y, test_x, param)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- plot_roc(deci, test_y, output_file, output_title)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else: #single file -> CV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- output_title = path.split(train_file)[1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- deci = get_cv_deci(train_y, train_x, param, fold)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- plot_roc(deci, train_y, output_file, output_title)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if __name__ == '__main__':
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- main()
</span></pre><pre style='margin:0'>
</pre>