func (trainer *MaxEntClassifierTrainer) Train(set data.Dataset) Model { // 检查训练数据是否是分类问题 if !set.GetOptions().IsSupervisedLearning { log.Fatal("训练数据不是分类问题数据") } // 建立新的优化器 optimizer := optimizer.NewOptimizer(trainer.options.Optimizer) // 建立特征权重向量 featureDimension := set.GetOptions().FeatureDimension numLabels := set.GetOptions().NumLabels var weights *util.Matrix if set.GetOptions().FeatureIsSparse { weights = util.NewSparseMatrix(numLabels) } else { weights = util.NewMatrix(numLabels, featureDimension) } // 得到优化的特征权重向量 optimizer.OptimizeWeights(weights, MaxEntComputeInstanceDerivative, set) classifier := new(MaxEntClassifier) classifier.Weights = weights classifier.NumLabels = numLabels classifier.FeatureDimension = featureDimension classifier.FeatureDictionary = set.GetFeatureDictionary() classifier.LabelDictionary = set.GetLabelDictionary() return classifier }