如何获取SharpLearning神经网络分类的预测概率?
获取SharpLearning神经网络的分类预测概率
问题背景
使用C#的SharpLearning框架完成二分类任务(将202维物理曲线分为'Bad'/'Good'两类),已实现模型训练与分类标签预测,现需额外获取每条样本对应类别的预测概率。
解决方案
SharpLearning的ClassificationNeuralNetModel类提供了PredictProbabilities方法,专门用于输出每个样本在各类别上的预测概率,替换原有Predict方法即可满足需求:
修改后的核心代码
// 模型训练逻辑保持不变 ClassificationNeuralNetModel model = learner.Learn(Data_matrix, Labels_matrix); // 调用PredictProbabilities获取概率矩阵 // 返回二维数组结构:[样本数量, 类别数量],二分类场景下每个样本对应2个概率值 double[][] final_probabilities = model.PredictProbabilities(Test_matrix); // 示例:遍历输出每个样本的概率与对应标签 for (int i = 0; i < final_probabilities.Length; i++) { // 假设标签0对应'Bad'、标签1对应'Good',可根据实际标签映射调整 Console.WriteLine($"样本{i+1}: Bad概率={final_probabilities[i][0]:F4}, Good概率={final_probabilities[i][1]:F4}"); // 从概率推导分类标签:取概率最大值对应的索引 int predictedLabel = Array.IndexOf(final_probabilities[i], final_probabilities[i].Max()); Console.WriteLine($"预测标签: {predictedLabel}\n"); }
关键说明
PredictProbabilities返回的二维数组中,每一行对应一个测试样本,每一列对应一个类别的预测概率,顺序与训练时的标签类别顺序一致。- 因模型末尾使用
SoftMaxLayer,二分类场景下每个样本的两个概率值之和接近1。 - 若需同时得到分类标签,只需取每个样本概率数组中最大值对应的索引即可。
内容的提问来源于stack exchange,提问作者Gal V
相关产品推荐
相关产品推荐

