📄 form1.cs
字号:
giniSplit.giniSplitCriterion.attribute = "income";
giniSplit.giniSplitCriterion.descriptionList.Add("medium");
giniSplit.giniSplitCriterion.descriptionList.Add("low,high");
giniSplit.giniSplitCriterion.splitList.Add(D3);
giniSplit.giniSplitCriterion.splitList.Add(D4);
}
//计算"high"+"low+middel_aged"的gini
D5 = new ArrayList();
D6 = new ArrayList();
D5.Clear();
D6.Clear();
D5.AddRange(d3);
D6.AddRange(d1);
D6.AddRange(d2);
gini = (double)D5.Count / d.Count * Gini(D5) + (double)D6.Count / d.Count * Gini(D6);
if (gini < giniSplit.gini)
{
giniSplit.giniSplitCriterion.descriptionList.Clear();
giniSplit.giniSplitCriterion.splitList.Clear();
giniSplit.gini = gini;
giniSplit.giniSplitCriterion.attribute = "income";
giniSplit.giniSplitCriterion.descriptionList.Add("high");
giniSplit.giniSplitCriterion.descriptionList.Add("low,medium");
giniSplit.giniSplitCriterion.splitList.Add(D5);
giniSplit.giniSplitCriterion.splitList.Add(D6);
}
else
{
D5.Clear();
D6.Clear();
}
return giniSplit;
}
//计算"student"属性的Gini
private GiniSplit GiniStudent(ArrayList d)
{
double gini;
ArrayList d1, d2;
GiniSplit giniSplit = new GiniSplit();
d1 = CopySmallCollection(d, "student", studentType.yes);
d2 = CopySmallCollection(d, "student", studentType.no);
//计算"yes"+"no"的gini
gini = (double)d1.Count / d.Count * Gini(d1) + (double)d2.Count / d.Count * Gini(d2);
giniSplit.giniSplitCriterion.descriptionList.Clear();
giniSplit.giniSplitCriterion.splitList.Clear();
giniSplit.gini = gini;
giniSplit.giniSplitCriterion.attribute = "student";
giniSplit.giniSplitCriterion.descriptionList.Add("yes");
giniSplit.giniSplitCriterion.descriptionList.Add("no");
giniSplit.giniSplitCriterion.splitList.Add(d1);
giniSplit.giniSplitCriterion.splitList.Add(d2);
return giniSplit;
}
//计算"creditRating"属性的GiniCreditRating
private GiniSplit GiniCreditRating(ArrayList d)
{
double gini;
ArrayList d1, d2;
GiniSplit giniSplit = new GiniSplit();
d1 = CopySmallCollection(d, "creditRating", creditRatingType.excellent);
d2 = CopySmallCollection(d, "creditRating", creditRatingType.fair);
//计算"excellent"+"fair"的gini
gini = (double)d1.Count / d.Count * Gini(d1) + (double)d2.Count / d.Count * Gini(d2);
giniSplit.giniSplitCriterion.descriptionList.Clear();
giniSplit.giniSplitCriterion.splitList.Clear();
giniSplit.gini = gini;
giniSplit.giniSplitCriterion.attribute = "creditRating";
giniSplit.giniSplitCriterion.descriptionList.Add("excellent");
giniSplit.giniSplitCriterion.descriptionList.Add("fair");
giniSplit.giniSplitCriterion.splitList.Add(d1);
giniSplit.giniSplitCriterion.splitList.Add(d2);
return giniSplit;
}
//按A划分的最小Gini
private GiniSplit GiniA(string a, ArrayList d)
{
GiniSplit giniSplit;
switch (a)
{
case "age":
giniSplit = GiniAge(d);
break;
case "income":
giniSplit = GiniIncome(d);
break;
case "student":
giniSplit = GiniStudent(d);
break;
case "creditRating":
giniSplit = GiniCreditRating(d);
break;
default:
MessageBox.Show("error");
giniSplit = new GiniSplit();
break;
}
return giniSplit;
}
//计算Gini
private double Gini(ArrayList d)
{
double gini = 1;
double countYes = 0;
for (int i = 0; i < d.Count; i++)
{
if (((Item)d[i]).buysComputer == buysComputerType.yes)
countYes++;
}
if (countYes != 0)
gini += -(countYes / d.Count) * (countYes / d.Count);
if (countYes != d.Count)
gini += -((d.Count - countYes) / d.Count) * ((d.Count - countYes) / d.Count);
return gini;
}
//按规则复制D
private ArrayList CopySmallCollection(ArrayList d, string attribute, Enum type)
{
ArrayList newD = new ArrayList();
for (int i = 0; i < d.Count; i++)
{
switch (attribute)
{
case "age":
if (((Item)d[i]).age == (ageType)type)
newD.Add(d[i]);
break;
case "income":
if (((Item)d[i]).income == (incomeType)type)
newD.Add(d[i]);
break;
case "student":
if (((Item)d[i]).student == (studentType)type)
newD.Add(d[i]);
break;
case "creditRating":
if (((Item)d[i]).creditRating == (creditRatingType)type)
newD.Add(d[i]);
break;
default:
MessageBox.Show("error");
break;
}
}
return newD;
}
private ArrayList CopySmallCollection(ArrayList d, string attribute, string type)
{
ArrayList newD = new ArrayList();
for (int i = 0; i < d.Count; i++)
{
switch (attribute)
{
case "age":
if (((Item)d[i]).age.ToString() == type)
newD.Add(d[i]);
break;
case "income":
if (((Item)d[i]).income.ToString() == type)
newD.Add(d[i]);
break;
case "student":
if (((Item)d[i]).student.ToString() == type)
newD.Add(d[i]);
break;
case "creditRating":
if (((Item)d[i]).creditRating.ToString() == type)
newD.Add(d[i]);
break;
default:
MessageBox.Show("error");
break;
}
}
return newD;
}
private Type GetEnumType(string name)
{
switch (name)
{
case "age":
return typeof(ageType);
case "income":
return typeof(incomeType);
case "student":
return typeof(studentType);
case "creditRating":
return typeof(creditRatingType);
case "buysComputer":
return typeof(buysComputerType);
default:
MessageBox.Show("error");
return null;
}
}
private void inportToolStripMenuItem_Click(object sender, EventArgs e)
{
test1();
}
private void addToolStripMenuItem_Click(object sender, EventArgs e)
{
lblAge.Visible = true;
lblIncome.Visible = true;
lblStudent.Visible = true;
lblCredit.Visible = true;
lblBuysComputer.Visible = true;
cbAge.Visible = true;
comboBox2.Visible = true;
comboBox3.Visible = true;
comboBox4.Visible = true;
comboBox5.Visible = true;
button1.Visible = true;
}
private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
{
int j = 0;
for (int i = 0; i < Testdata.Items.Count; i++)
{
if (Testdata.SelectedIndex==i)
{
Testdata.Items.RemoveAt(i);
al.RemoveAt(i);
j = i;
}
}
this.Testdata.Items.Clear();
this.Testdata.Items.Add("RID\tage\t\tincome\tstudent\tcredit_rating\tClass:buys_computer\n");
Item testItem;
for (int i = 0; i < al.Count; i++)
{
string temp = "";
testItem = (Item)al[i];
if (i+1> j)
{
testItem.ID = testItem.ID - 1;
temp += testItem.ID.ToString();
}
else
temp += testItem.ID.ToString();
temp += "\t";
temp += testItem.age.ToString();
temp += "\t";
if (testItem.age.ToString().Length < 8)
temp += "\t";
temp += testItem.income.ToString();
temp += "\t";
temp += testItem.student.ToString();
temp += "\t";
temp += testItem.creditRating.ToString();
temp += "\t";
if (testItem.creditRating.ToString().Length < 8)
temp += "\t";
temp += testItem.buysComputer.ToString();
temp += "\n";
this.Testdata.Items.Add(temp);
}
}
private void button1_Click(object sender, EventArgs e)
{
Item testItem = new Item();
testItem.ID = al.Count+1;
if (cbAge.SelectedItem.ToString() == "youth")
testItem.age = ageType.youth;
else if (cbAge.SelectedItem.ToString() == "middle_aged")
testItem.age = ageType.middle_aged;
else
testItem.age = ageType.senior;
if (comboBox2.SelectedItem.ToString() == "high")
testItem.income = incomeType.high;
else if (comboBox2.SelectedItem.ToString() == "low")
testItem.income =incomeType.low;
else
testItem.income = incomeType.medium;
if(comboBox3.SelectedItem.ToString()=="no")
testItem.student = studentType.no;
else
testItem.student = studentType.yes;
if(comboBox4.SelectedItem.ToString()=="fair")
testItem.creditRating = creditRatingType.fair;
else
testItem.creditRating=creditRatingType.excellent;
if (comboBox5.SelectedItem.ToString() == "no")
testItem.buysComputer = buysComputerType.no;
else if (comboBox5.SelectedItem.ToString() == "yes")
testItem.buysComputer = buysComputerType.yes;
al.Add(testItem);
this.Testdata.Items.Clear();
this.Testdata.Items.Add("RID\tage\t\tincome\tstudent\tcredit_rating\tClass:buys_computer\n");
AddDataToListbox(al);
}
private void button2_Click(object sender, EventArgs e)
{
al.Clear();
if(this.Testdata.Items.Count==0)
this.Testdata.Items.Add("RID\tage\t\tincome\tstudent\tcredit_rating\tClass:buys_computer\n");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -