vb.net – 在Accord.Net上使用AdaBoost(Boosting)

我试图在Accord.Net中使用adaboost(或者增强).我尝试了 https://github.com/accord-net/framework/wiki/Classification为决策树给出的示例版本,它适用于以下代码:

'' Creates a matrix from the entire source data table
Dim data As DataTable = CType(DataView.DataSource,DataTable)

'' Create a new codification codebook to 
'' convert strings into integer symbols
Dim codebook As New Codification(data)

'' Translate our training data into integer symbols using our codebook:
Dim symbols As DataTable = codebook.Apply(data)
Dim inputs As Double()() = symbols.ToArray(Of Double)("Outlook","Temperature","Humidity","Wind")
Dim outputs As Integer() = symbols.ToArray(Of Integer)("PlayTennis")

'' Gather information about decision variables
Dim attributes() As DecisionVariable = {New DecisionVariable("Outlook",3),New DecisionVariable("Temperature",_
    New DecisionVariable("Humidity",2),New DecisionVariable("Wind",2)}

Dim classCount As Integer = 2 '' 2 possible output values for playing tennis: yes or no

''Create the decision tree using the attributes and classes
tree = New DecisionTree(attributes,classCount)

'' Create a new instance of the ID3 algorithm
Dim Learning As New C45Learning(tree)

'' Learn the training instances!
Learning.Run(inputs,outputs)

Dim aa As Integer() = codebook.Translate("D1","Rain","Mild","High","Weak")

Dim ans As Integer = tree.Compute(aa)

Dim answer As String = codebook.Translate("PlayTennis",ans)

现在我想添加此代码以使用adaboost或更复杂的示例.我通过在上面的代码中添加以下内容来尝试以下操作:

Dim Booster As New Boost(Of DecisionStump)()

Dim Learn As New AdaBoost(Of DecisionStump)(Booster)
Dim weights(inputs.Length - 1) As Double
For i As Integer = 0 To weights.Length - 1
    weights(i) = 1.0 / weights.Length
Next

Learn.Creation = New ModelConstructor(Of DecisionStump)(x=>tree.Compute(x))
Dim Err As Double = Learn.Run(inputs,outputs,weights)

问题似乎是这样的:

Learn.Creation = New ModelConstructor(Of DecisionStump)(x=>tree.Compute(x))

如何在Accord.Net中使用adaboost或boost?如何调整我的代码才能使其正常工作?所有帮助将不胜感激.

解决方法

这是一个迟到的响应,但对于那些可能在将来发现它有用的人,从版本3.8.0开始,可以使用Accord.NET Framework学习Boosted决策树,如下所示:

// This example shows how to use AdaBoost to train more complex
// models than a simple DecisionStump. For example,we will use
// it to train a boosted Decision Trees.

// Let's use some synthetic data for that: The Yin-Yang dataset is 
// a simple 2D binary non-linear decision problem where the points 
// belong to each of the classes interwine in a Yin-Yang shape:
var dataset = new YinYang();
double[][] inputs = dataset.Instances;
int[] outputs = Classes.ToZeroOne(dataset.ClassLabels);

// Create an AdaBoost for Logistic Regression as:
var teacher = new AdaBoost<DecisionTree>()
{
    // Here we can specify how each regression should be learned:
    Learner = (param) => new C45Learning()
    {
        // i.e.
        // MaxHeight = 
        // MaxVariables = 
    },// Train until:
    MaxIterations = 50,Tolerance = 1e-5,};

// Now,we can use the Learn method to learn a boosted classifier
Boost<DecisionTree> classifier = teacher.Learn(inputs,outputs);

// And we can test its performance using (error should be 0.11):
double error = ConfusionMatrix.Estimate(classifier,inputs,outputs).Error;

// And compute a decision for a single data point using:
bool y = classifier.Decide(inputs[0]); // result should false

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...