public static XgbModel GetXgbModelFromFile(string fileName, int maxTrees) { XgbModel xgbModel = new XgbModel(); if (!File.Exists(fileName)) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(String.Format("Error: File {0} does not exist.",fileName)); Console.ResetColor(); return null; } Console.ResetColor(); Console.WriteLine(String.Format("Parsing {0}", fileName)); int numTree = 0; var fileInfo = new FileInfo(fileName); GlobalStats.ModelFileSize = fileInfo.Length; using (StreamReader sr = new StreamReader(fileName)) { while(!sr.EndOfStream) { var line = sr.ReadLine().Trim(); if (line.StartsWith("booster") || line == String.Empty) { if (xgbNodeList.Count > 0) { numTree++; Console.ForegroundColor = ConsoleColor.DarkGreen; Console.Write(String.Format("Constructing tree #{0} ", numTree)); XgbTree tree = new XgbTree(xgbNodeList[0]); ConstructXgbTree(tree); Console.WriteLine(String.Format("=> depth: {0} ({1} nodes)", tree.Height, xgbNodeList.Count)); Console.ResetColor(); xgbModel.XgbTrees.Add(tree); xgbNodeList.Clear(); if (numTree == maxTrees) break; } } else { var node = ParseXgbTreeNode(line); if (node == null) { return null; } xgbNodeList.Add(node.Number, node); } } } if (xgbNodeList.Count > 0 && (maxTrees < 0 || numTree < maxTrees)) { numTree++; Console.ForegroundColor = ConsoleColor.DarkGreen; Console.Write(String.Format("Constructing tree #{0} ", numTree)); XgbTree tree = new XgbTree(xgbNodeList[0]); ConstructXgbTree(tree); Console.WriteLine(String.Format("=> depth: {0} ({1} nodes)", tree.Height, xgbNodeList.Count)); Console.ResetColor(); xgbModel.XgbTrees.Add(tree); xgbNodeList.Clear(); } Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(String.Format("{0} trees has been constructed.\n", xgbModel.NumTrees)); Console.ResetColor(); return xgbModel; }
public static XgbModel GetXgbModelFromFile(string fileName, int maxTrees) { XgbModel xgbModel = new XgbModel(); if (!File.Exists(fileName)) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(String.Format("Error: File {0} does not exist.", fileName)); Console.ResetColor(); return(null); } Console.ResetColor(); Console.WriteLine(String.Format("Parsing {0}", fileName)); int numTree = 0; var fileInfo = new FileInfo(fileName); GlobalStats.ModelFileSize = fileInfo.Length; using (StreamReader sr = new StreamReader(fileName)) { while (!sr.EndOfStream) { var line = sr.ReadLine().Trim(); if (line.StartsWith("booster") || line == String.Empty) { if (xgbNodeList.Count > 0) { numTree++; Console.ForegroundColor = ConsoleColor.DarkGreen; Console.Write(String.Format("Constructing tree #{0} ", numTree)); XgbTree tree = new XgbTree(xgbNodeList[0]); ConstructXgbTree(tree); Console.WriteLine(String.Format("=> depth: {0} ({1} nodes)", tree.Height, xgbNodeList.Count)); Console.ResetColor(); xgbModel.XgbTrees.Add(tree); xgbNodeList.Clear(); if (numTree == maxTrees) { break; } } } else { var node = ParseXgbTreeNode(line); if (node == null) { return(null); } xgbNodeList.Add(node.Number, node); } } } if (xgbNodeList.Count > 0 && (maxTrees < 0 || numTree < maxTrees)) { numTree++; Console.ForegroundColor = ConsoleColor.DarkGreen; Console.Write(String.Format("Constructing tree #{0} ", numTree)); XgbTree tree = new XgbTree(xgbNodeList[0]); ConstructXgbTree(tree); Console.WriteLine(String.Format("=> depth: {0} ({1} nodes)", tree.Height, xgbNodeList.Count)); Console.ResetColor(); xgbModel.XgbTrees.Add(tree); xgbNodeList.Clear(); } Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(String.Format("{0} trees has been constructed.\n", xgbModel.NumTrees)); Console.ResetColor(); return(xgbModel); }
static void Main(string[] args) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("********************************"); Console.WriteLine("* XGBOOST Feature Interactions *"); Console.WriteLine("********************************"); Console.ResetColor(); ParseArgs(args); FIScoreComparer.SetComparer(GlobalSettings.SortBy); Console.WriteLine(""); Console.WriteLine("Settings:"); Console.WriteLine("========="); Console.WriteLine(String.Format("XgbModelFile: {0}", GlobalSettings.XgbModelFile)); Console.WriteLine(String.Format("OutputXlsxFile: {0}", GlobalSettings.OutputXlsxFile)); Console.WriteLine(String.Format("MaxInteractionDepth: {0}", GlobalSettings.MaxInteractionDepth)); Console.WriteLine(String.Format("MaxDeepening: {0}", GlobalSettings.MaxDeepening)); Console.WriteLine(String.Format("MaxTrees: {0}", GlobalSettings.MaxTrees)); Console.WriteLine(String.Format("TopK: {0}", GlobalSettings.TopK)); Console.WriteLine(String.Format("SortBy: {0}", FIScoreComparer.SortBy)); Console.WriteLine(); if (args.Length == 0) { Thread t1 = new Thread(() => { for (int c = 3; c >= 0; c--) { Console.Write("\rStarting in {0:00} seconds with the settings above. Press any key to abort ...", c); if (c == 0) { break; } for (int i = 0; i < 20; i++) { if (Console.KeyAvailable) { Console.ReadKey(true); Console.WriteLine(); Environment.Exit(0); } Thread.Sleep(50); } } return; }); t1.Start(); t1.Join(); Console.WriteLine("\n"); } var start = DateTime.Now; XgbModel xgbModel = XgbModelParser.GetXgbModelFromFile(GlobalSettings.XgbModelFile, GlobalSettings.MaxTrees); if (xgbModel == null) { Environment.Exit(-1); } var featureInteractions = xgbModel.GetFeatureInteractions(GlobalSettings.MaxInteractionDepth, GlobalSettings.MaxDeepening); var end = DateTime.Now; GlobalStats.ElapsedTime = (end - start); GlobalStats.ParsedTrees = xgbModel.NumTrees; GlobalStats.CollectedFeatureInteractions = featureInteractions.Count; featureInteractions.WriteToXlsx(GlobalSettings.OutputXlsxFile, GlobalSettings.TopK); end = DateTime.Now; Console.WriteLine(String.Format("Elapsed Time: {0}", (end - start))); }