示例#1
0
        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;
        }
示例#2
0
        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);
        }
示例#3
0
        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)));
        }