def trainWelchLDA(self, trainData):
self.stand = ml.ClassStandardizer(trainData)
trainDataStd = self.stand.apply(trainData)
#penalties = np.insert(np.power(10.0, np.linspace(-3.0, 0.0, 50)), 0, 0.0)
penalties = np.linspace(0.0, 1.0, 51)
nFold = self.nTrainTrial
trnCA = np.zeros((nFold, penalties.size))
valCA = np.zeros((nFold, penalties.size))
dialog = wx.ProgressDialog('Training Classifier',
'Featurizing', maximum=nFold+1,
style=wx.PD_ELAPSED_TIME | wx.PD_SMOOTH)
for fold, trnData, valData in ml.part.classStratified(trainDataStd, nFold=nFold):
dialog.Update(fold, 'Validation Fold: %d' % fold)
for i, penalty in enumerate(penalties):
classifier = ml.LDA(trnData, shrinkage=penalty)
trnCA[fold,i] = classifier.ca(trnData)
valCA[fold,i] = classifier.ca(valData)
dialog.Update(nFold, 'Training Final Classifier')
meanTrnCA = np.mean(trnCA, axis=0)
meanValCA = np.mean(valCA, axis=0)
bestPenaltyIndex = np.argmax(meanValCA)
bestPenalty = penalties[bestPenaltyIndex]
bestMeanTrnCA = meanTrnCA[bestPenaltyIndex]
bestMeanValCA = meanValCA[bestPenaltyIndex]
self.classifier = ml.LDA(trainDataStd, shrinkage=bestPenalty)
trainCA = self.classifier.ca(trainDataStd)
trainConfusion = np.round(100*self.classifier.confusion(trainDataStd))
dialog.Destroy()
resultText = (('Best Shrinkage: %f\n' % bestPenalty) +
('Best Mean Training CA: %f\n' % bestMeanTrnCA) +
('Best Mean Validation CA: %f\n' % bestMeanValCA) +
('Final Training CA: %f\n' % trainCA) +
('Confusion Matrix:\n' + str(trainConfusion) + '\n') +
('Choices: ' + str(self.choices)))
wx.MessageBox(message=resultText,
caption='Training Completed!',
style=wx.OK | wx.ICON_INFORMATION)
self.saveResultText(resultText)
评论列表
文章目录