package com.spbsu.exp.multiclass.spoc; import com.spbsu.commons.func.types.TypeConverter; import com.spbsu.commons.math.io.Mx2CharSequenceConversionPack; import com.spbsu.commons.math.vectors.Mx; import com.spbsu.ml.methods.multiclass.spoc.AbstractCodingMatrixLearning; import com.spbsu.ml.methods.multiclass.spoc.impl.CodingMatrixLearningGreedyParallels; import org.apache.commons.cli.MissingArgumentException; import java.io.*; /** * User: qdeee * Date: 06.06.14 */ public class GreedyCML { public static void main(String[] args) throws MissingArgumentException, IOException { if (args.length < 1) { throw new MissingArgumentException("Enter the path to mx S"); } final String path = args[0]; final int l = Integer.parseInt(args[1]); final double lac = Double.parseDouble(args[2]); final double lar = Double.parseDouble(args[3]); final double la1 = Double.parseDouble(args[4]); final Mx S = loadMxFromFile(path); final AbstractCodingMatrixLearning cml = new CodingMatrixLearningGreedyParallels(S.rows(), l, lac, lar, la1); final Mx codingMatrix = cml.trainCodingMatrix(S); writeMxToFile(codingMatrix, "resultMxFile.txt"); } private static void writeMxToFile(final Mx mx, final String filename) throws FileNotFoundException { final PrintWriter writer = new PrintWriter(new BufferedOutputStream(new FileOutputStream(filename))); final TypeConverter<Mx, CharSequence> converter = new Mx2CharSequenceConversionPack.Mx2CharSequenceConverter(); final CharSequence mxStr = converter.convert(mx); writer.write(mxStr.toString()); writer.flush(); } private static Mx loadMxFromFile(final String filename) throws IOException { final TypeConverter<CharSequence, Mx> converter = new Mx2CharSequenceConversionPack.CharSequence2MxConverter(); final BufferedReader reader = new BufferedReader(new FileReader(new File(filename))); final StringBuilder builder = new StringBuilder(); String s; while ((s = reader.readLine()) != null) { builder.append(s); builder.append("\n"); } return converter.convert(builder.toString()); } }