1、介面
2、精度評價
3、輸出規則集
4、部分原始碼
using system;
using system.collections.generic;
using system.text;
using system.collections;
using system.text.regularexpressions;
namespace boosttree
private void builttree(arraylist buffer, arraylist bandidlist, tree fathertree, int depth, int classid, int contribute)//遞迴主函式 在**結束條件上有待進一步驗證,這個環節等待數的儲存搞定之後
else
else
else
}if (depth > 0)
else
fathertree.leftchild = leftchild;
fathertree.leftchild.parent = fathertree;
fathertree.rightchild = rightchild;
fathertree.rightchild.parent = fathertree;}}
}
}private double discrelizeall(arraylist buffer, arraylist bandidlist, double ratio,int classid)//連續屬性離散化主函式
return banddiscrete;
}protected arraylist getclassvalue(arraylist buffer, int classid)//獲取樣本中所有類別號(通過驗證)
if (yn)
}return classvalue;
}protected string setpreclass(arraylist buffer, arraylist classvalue, int classid)//當節點為樹葉時,找到樣本數最多的類別
int max = 0;
for (int j = 0; j < classvalue.count; j++)
preclass = (string)classvalue[max];
return preclass;
}private arraylist findbestbandid(double gainratio, arraylist bandidlist, int num)//找出資訊增益比率最高的屬性索引號,這裡可能會有多個(此函式被兩個地方條用,且計算內容不同)
else}}
if ((double)gainratio[(int)bestgainratioid[0]] == 0.0)//最好的屬性資訊增益比率為0,證明現有的所有屬性各自的取值唯一,達到停止**的條件
return null;
else
return bestbandid;
}private double discrelize(arraylist buffer, int bandid, double best, int classid)//確定候選斷點
attributesort.sort();
for (int i = 0; i < attributesort.count - 1; i++)//找出候選斷點,即類別的中間值
}bandwait.sort();
if (bandwait.count != 0)//對有些不符合離散化條件的屬性不做處理
return divisionvalue;
}private double getcutpoint(arraylist buffer, arraylist classvalue, arraylist bandwait, int bandid, double best,int classid)//離散化遞迴函式
bestvalue = findbestvalue(gainratio, bandwait);
cutbest = convert.todouble(bestvalue[0]);
double max = 0.0;
for (int j = 0; j < bandwait.count; j++)
}best[0] = max;
return cutbest;
}private arraylist findbestvalue(arraylist gain, arraylist bandwait)//找出資訊增益比率最高的屬性索引號
else}}
if ((double)gain[(int)bestgainid[0]] == 0.0)//最好的屬性資訊增益為0
bestvalue.add(0.0);
else
return bestvalue;
}private double calculategainratio(arraylist buffer, double banddiscrete, arraylist classvalue, int bandid,int classid)//遞迴子函式,計算gainratio
private double calculategain(arraylist buffer, arraylist classvalue, double attributevalue, int bandid,int classid)//
else
}double enl = 0.0;
double enr = 0.0;
enl = (calculatees(leftbuffer, classvalue, classid)) * (((double)leftbuffer.count) / ((double)buffer.count));
enr = (calculatees(rightbuffer, classvalue, classid)) * (((double)rightbuffer.count) / ((double)buffer.count));
esa = enl + enr;
double gain = es - esa;
return gain;
}private double calculatespliti(arraylist buffer, double attributevalue, int index)//遞迴子函式,計算spliti
for (int j = 0; j < 2; j++)
}return -spliti;
}private double calculatees(arraylist buffer, arraylist attributevalue, int index)//遞迴子函式,計算e(s)(驗證通過)
for (int j = 0; j < attributevalue.count; j++)
}return -es;}}
}
5、完整個**: 決策樹 C4 5演算法
c4.5演算法是用於生成決策樹的的一種經典演算法,是id3演算法的一種延伸和優化。改進了點 1 通過資訊增益率選擇 屬性,克服了id3演算法中通過資訊增益傾向於選擇擁有多個屬性值的屬性作為 屬性的不足 2 能夠處理離散型和連續型的屬性型別,即將連續型的屬性進行離散化處理 3 構造決策樹之後進行剪枝操...
決策樹演算法
決策樹是一種樹型結構,其中每個內部結點表示在乙個屬性上的測試,每個分支代表乙個測試輸出,每個葉結點代表一種類別。決策樹學習是以例項為基礎的歸納學習,採用的是自頂向下的遞迴方法,其基本思想是以資訊熵為度量構造一棵熵值下降最快的樹,到葉子結點處的熵值為零,此時每個葉節點中的例項都屬於同一類。決策樹學習演...
決策樹演算法
本文主要介紹id3 c4.5和cart演算法 決策樹起源於概念學習系統 cls 概念學習模型 是乙個事先定義的範疇集合和一些有關例子是否落入給定範疇的判定 概念學習的主要任務 是判斷所給定事物的屬性或特性,並且正確地區分這些事物,將其劃分到某乙個範疇 對於如下決策樹模型 我們首先考慮他的屬性outl...