本文主要是介绍C#调用外部EXE-LibSVM为例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
主要是前一段做客流预测的时候,发现不会写SVM,想直接用http://baike.baidu.com/view/598089.htm“>LibSVM来进行预测。因为LibSVM可以直接将运算结果生成文件,
所以打算通过C#调用EXE的形式进行调用,同时读取结果数据。
核心方法
执行EXE
/// <summary>/// 执行EXE文件/// </summary>/// <param name="exePath"></param>/// <param name="args"></param>/// <param name="outputFile">若有指定输出重定向才填写</param>private void executeEXE(String exePath, String args, bool logout){Process proc = new Process();proc.StartInfo.FileName = exePath;proc.StartInfo.CreateNoWindow = true;proc.StartInfo.Arguments = args;proc.StartInfo.RedirectStandardOutput = true;proc.StartInfo.UseShellExecute = false;proc.Start();StreamReader sr = new StreamReader(proc.StandardOutput.BaseStream);string line = "";while ((line = sr.ReadLine()) != null){if (logout){Console.WriteLine(line);}}sr.Close();proc.WaitForExit();}//把console输出到文件private void executeEXE(String exePath, String args, String outputFile, bool logout){Process proc = new Process();proc.StartInfo.FileName = exePath;proc.StartInfo.CreateNoWindow = true;proc.StartInfo.Arguments = args;proc.StartInfo.RedirectStandardOutput = true;proc.StartInfo.UseShellExecute = false;proc.Start();StreamReader sr = new StreamReader(proc.StandardOutput.BaseStream);string line = "";while ((line = sr.ReadLine()) != null){if (logout){Console.WriteLine(line);FileUtil.AppendText(outputFile, line);FileUtil.AppendText(outputFile, FileUtil.NewLine);}}sr.Close();proc.WaitForExit();}
算法调度
以下调用均是由上述的执行EXE方法
将数据转换为LibSVM格式的文本文件
调用svmscale.exe进行归一化
svmscale.exe feature.txt feature.scaled
- 调用svmtrtrain.exe进行训练
svmtrain.exe -s 3 -p 0.0001 -t 2 -g 32 -c 0.53125 -n 0.99 feature.scaled
- 调用svmpredict.exe进行预测
svmpredict.exe feature_test.scaled feature.scaled.model feature_test.predicted
- 将结果文本转为DataSet导入C#中进行进一步处理
这篇关于C#调用外部EXE-LibSVM为例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!