⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 class1.cs

📁 id3算法进行决策树生成 以信息增益最大的属性作为分类属性
💻 CS
📖 第 1 页 / 共 2 页
字号:
		public static void PrintNum()
		{
			Console.WriteLine("the rule number is "+RuleNum.ToString());
		}

		static bool verifyNode(TreeNode root)
		{
			string str = root.attribute.ToString();

			if(root.attribute.values == null)
			{
				if((str == "True")&&(dv[16,1] == "democrat"))
					return true;
				else
					if((str == "False")&&(dv[16,1] == "republican"))
					return true;
				else
					return false;
			}
			else
			{
				int i=0;
				for(i= 0; i< 16; ++i)//找到相应的属性索引
				{
					if(dv[i,0]== str)
						break;
				}
				int j=0;
				for (j = 0; j < root.attribute.values.Length; ++j)
				{
					if(dv[i,1] == root.attribute.values[j])
						break;
					
				}
				TreeNode childNode = root.getChildByBranchName(root.attribute.values[j]);
				return verifyNode(childNode);
			}
		}

		static void VerifyTestData(TreeNode root)
		{

			dv[0,0]= "handicapped";
			dv[1,0]= "water";
			dv[2,0]= "adoption";
			dv[3,0]= "physician";
			dv[4,0]="el";
			dv[5,0]="religious";
			dv[6,0]="anti";
			dv[7,0]="aid";
			dv[8,0]="mx";
			dv[9,0]="immigration";
			dv[10,0]="synfuels";
			dv[11,0]="education";
			dv[12,0]="superfund";
			dv[13,0]="crime";
			dv[14,0]="duty";
			dv[15,0]="export";
			dv[16,0]="rusult";
			int RightNum=0;
			int WorryNum=0;
			StreamReader strmReader=new StreamReader("vote test.txt");
			string str=null;
			str=strmReader.ReadLine();
			int Ln=1;
			while(str!=null)
			{
				
				str=str.Trim();
				int i=str.IndexOf(",");
				dv[0,1]=str.Substring(0,i);
				//Console.WriteLine(outlook);
				 
				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				dv[1,1]=str.Substring(0,i);
				//Console.WriteLine(temperture);
				
				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				
				i=str.IndexOf(",");
				dv[2,1]=str.Substring(0,i);
				//Console.WriteLine(humidity);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				dv[3,1]=str.Substring(0,i);
				//Console.WriteLine(windy);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				dv[4,1]=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				dv[5,1]=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				dv[6,1]=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				dv[7,1]=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				dv[8,1]=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				dv[9,1]=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				dv[10,1]=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				dv[11,1]=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				dv[12,1]=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				dv[13,1]=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				dv[14,1]=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				dv[15,1]=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//i=str.IndexOf(" ");
				dv[16,1] = str;
				
				if(verifyNode(root))
				{
					Ln++;
					RightNum++;
				}
				else
				{
					WorryNum++;
					Console.WriteLine("wrong line is "+ Ln.ToString());
					Ln++;
				}

				str=strmReader.ReadLine();

			}
			strmReader.Close();
		
			Console.WriteLine("RightNum is " + RightNum.ToString());
			Console.WriteLine("WorryNum is " + WorryNum.ToString());
		}

		
		static DataTable getDataTable()
		{
			DataTable result = new DataTable("mysamples");
			DataColumn column=result.Columns.Add("handicapped");
			column.DataType=typeof(string);

			column = result.Columns.Add("water");
			column.DataType = typeof(string);

			column = result.Columns.Add("adoption");
			column.DataType = typeof(string);

			column = result.Columns.Add("physician");
			column.DataType = typeof(string);

			column = result.Columns.Add("el");
			column.DataType = typeof(string);

			column = result.Columns.Add("religious");
			column.DataType = typeof(string);

			column = result.Columns.Add("anti");
			column.DataType = typeof(string);

			column = result.Columns.Add("aid");
			column.DataType = typeof(string);

			column = result.Columns.Add("mx");
			column.DataType = typeof(string);

			column = result.Columns.Add("immigration");
			column.DataType = typeof(string);

			column = result.Columns.Add("synfuels");
			column.DataType = typeof(string);

			column = result.Columns.Add("education");
			column.DataType = typeof(string);

			column = result.Columns.Add("superfund");
			column.DataType = typeof(string);

			column = result.Columns.Add("crime");
			column.DataType = typeof(string);

			column = result.Columns.Add("duty");
			column.DataType = typeof(string);

			column = result.Columns.Add("export");
			column.DataType = typeof(string);

			column = result.Columns.Add("result");
			column.DataType = typeof(bool);

			StreamReader strmReader=new StreamReader("b.txt");
			string handicapped;
			string water;
			string adoption;
			string physician;
			string el;
			string religious;
			string anti;
			string aid;
			string mx;
			string immigration;
			string synfuels;
			string education;
			string superfund;
			string crime;
			string duty;
			string export;

			string classresult;

			bool t_or_f;
			string str=null;
			str=strmReader.ReadLine();
			while(str!=null)
			{
				//Console.WriteLine(str);
				
				str=str.Trim();
				int i=str.IndexOf(",");
				handicapped=str.Substring(0,i);
				//Console.WriteLine(outlook);
				 
				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				water=str.Substring(0,i);
				//Console.WriteLine(temperture);
				
				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				
				i=str.IndexOf(",");
				adoption=str.Substring(0,i);
				//Console.WriteLine(humidity);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				physician=str.Substring(0,i);
				//Console.WriteLine(windy);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				el=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				religious=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				anti=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				aid=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				mx=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				immigration=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				synfuels=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				education=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				superfund=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				crime=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				duty=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//Console.WriteLine(str);

				i=str.IndexOf(",");
				export=str.Substring(0,i);

				str=str.Remove(0,i+1);//把空格也一起删去
				//i=str.IndexOf(" ");
				classresult=str;
				//Console.WriteLine(str);

				if(classresult=="democrat")
					t_or_f=true;
				else
					t_or_f=false;

				result.Rows.Add(new object[] {handicapped,water,adoption,physician,el,religious,anti,aid,mx,immigration,synfuels,education,superfund,crime,duty,export,t_or_f});
				
				str=strmReader.ReadLine();

			}
			strmReader.Close();
			//	result.Rows.Add(new object[] {"long", "square","waffle",false});
			//	result.Rows.Add(new object[] {"long", "rectangle", "waffle", false});
			//	result.Rows.Add(new object[] {"short", "square", "two-way",  true});
			//	result.Rows.Add(new object[] {"short", "rectangle", "one-way", false});
			
			return result;
			
		}

		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		/// 
		[STAThread]
		static void Main(string[] args)
		{
			/*
			Attribute ceu = new Attribute("Span", new string[] {"long", "short"});
			Attribute temperatura = new Attribute("Shape", new string[] {"square", "rectangle" });
			Attribute humidade = new Attribute("Slab", new string[] {"waffle", "two-way","one-way"});
			 
			
			Attribute[] attributes = new Attribute[] {ceu, temperatura, humidade};
			*/
			
			long   startTime,stopTime;   
			long   freq;
			startTime   =   0;   
			stopTime   =   0;   
    
			if(QueryPerformanceFrequency(out   freq)   ==   false)   
				throw   new   Win32Exception();   

			Attribute handicapped=new Attribute("handicapped",new string[]{"n","y","u"});
			Attribute water=new Attribute("water",new string[]{"n","y","u"});
			Attribute adoption=new Attribute("adoption",new string[]{"n","y","u"});
			Attribute physician=new Attribute("physician",new string[]{"n","y","u"});
			Attribute el=new Attribute("el",new string[]{"n","y","u"});
			Attribute religious=new Attribute("religious",new string[]{"n","y","u"});
			Attribute anti=new Attribute("anti",new string[]{"n","y","u"});
			Attribute aid=new Attribute("aid",new string[]{"n","y","u"});
			Attribute mx=new Attribute("mx",new string[]{"n","y","u"});
			Attribute immigration=new Attribute("immigration",new string[]{"n","y","u"});
			Attribute synfuels=new Attribute("synfuels",new string[]{"n","y","u"});
			Attribute education=new Attribute("education",new string[]{"n","y","u"});
			Attribute superfund=new Attribute("superfund",new string[]{"n","y","u"});
			Attribute crime=new Attribute("crime",new string[]{"n","y","u"});
			Attribute duty=new Attribute("duty",new string[]{"n","y","u"});
			Attribute export=new Attribute("export",new string[]{"n","y","u"});

			Attribute[] attributes = new Attribute[] {handicapped,water,adoption,physician,el,religious,anti,aid,mx,immigration,synfuels,education,superfund,crime,duty,export};
/*
			Attribute outlook=new  Attribute("outlook",new string[]{"overcast","sunny","rain"});
			Attribute temperture = new Attribute("temperture", new string[] {"hot", "mild","cold" });
			Attribute humidity = new Attribute("humidity", new string[] {"high", "normal" });
			Attribute windy = new Attribute("windy", new string[] {"not", "very","medium" });

			Attribute[] attributes = new Attribute[] {outlook,temperture,humidity,windy};
*/


			DataTable samples = getDataTable();			

			DecisionTreeID3 id3 = new DecisionTreeID3();

			//long   timeInitial,timeElapsed;
			//timeInitial = DateTime.Now.Ticks;

			Thread.Sleep(0);   
			QueryPerformanceCounter(out   startTime);   

			TreeNode root = id3.mountTree(samples, "result", attributes);

			//timeElapsed=DateTime.Now.Ticks ;       
			//Console.WriteLine( "using time:{0}s",new TimeSpan(timeElapsed  -  timeInitial   )  );   
			QueryPerformanceCounter(out   stopTime);   

			double   DurationSecs;
			//if(startTime   ==   0   ||   stopTime   ==   0)   
				//throw   new   InvalidOperationException(Resource.GetResource("Unit_TimeVariableIsNull"));   
			//else
				DurationSecs=(double)(stopTime   -   startTime)/(double)freq;

			float   DurationMsel;
			DurationMsel=float.Parse((DurationSecs   *   1000).ToString("##0.###"));   
			Console.WriteLine(DurationMsel);

			printNode(root, "");
			PrintNum();
			VerifyTestData(root);
			Console.Read();
			/*
			DataColumn column = result.Columns.Add("ceu");
			column.DataType = typeof(string);
			
			column = result.Columns.Add("temperatura");
			column.DataType = typeof(string);

			column = result.Columns.Add("humidade");
			column.DataType = typeof(string);

			column = result.Columns.Add("vento");
			column.DataType = typeof(string);

			column = result.Columns.Add("result");
			column.DataType = typeof(bool);

			result.Rows.Add(new object[] {"sol", "alta", "alta", "nao", false}); //D1 sol alta alta n鉶 N
			result.Rows.Add(new object[] {"sol", "alta", "alta", "sim", false}); //D2 sol alta alta sim N
			result.Rows.Add(new object[] {"nublado", "alta", "alta", "nao", true}); //D3 nebulado alta alta n鉶 P
			result.Rows.Add(new object[] {"chuva", "alta", "alta", "nao", true}); //D4 chuva alta alta n鉶 P
			result.Rows.Add(new object[] {"chuva", "baixa", "normal", "nao", true}); //D5 chuva baixa normal n鉶 P
			result.Rows.Add(new object[] {"chuva", "baixa", "normal", "sim", false}); //D6 chuva baixa normal sim N
			result.Rows.Add(new object[] {"nublado", "baixa", "normal", "sim", true}); //D7 nebulado baixa normal sim P
			result.Rows.Add(new object[] {"sol", "suave", "alta", "nao", false}); //D8 sol suave alta n鉶 N
			result.Rows.Add(new object[] {"sol", "baixa", "normal", "nao", true}); //D9 sol baixa normal n鉶 P
			result.Rows.Add(new object[] {"chuva", "suave", "normal", "nao", true}); //D10 chuva suave normal n鉶 P
			result.Rows.Add(new object[] {"sol", "suave", "normal", "nao", true}); //D11 sol suave normal sim P
			result.Rows.Add(new object[] {"nublado", "suave", "alta", "sim", true}); //D12 nebulado suave alta sim P
			result.Rows.Add(new object[] {"nublado", "alta", "normal", "nao", true}); //D13 nebulado alta normal n鉶 P
			result.Rows.Add(new object[] {"chuva", "suave", "alta", "sim", false}); //D14 chuva suave alta sim N
			*/

		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -