我正尝试在Accord.Net中使用adaboost (或boosting)。我尝试了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", 3), _
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或boosting。通过在上面的代码中添加以下代码,我尝试了以下操作:
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或boosting?我如何调整我的代码使其正常工作?所有的帮助都将不胜感激。
发布于 2017-10-26 03:01:13
这是一个较晚的响应,但对于那些将来可能会发现它有用的人,从版本3.8.0开始,可以使用Accord.NET框架学习增强的决策树,如下所示:
// 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 falsehttps://stackoverflow.com/questions/30124136
复制相似问题