一 首先明确以下概念:
True Positive -实际值为真,模型预测值为真。
False Positive - Type I error.实际值为假,模型预测值为真。
True Negative -实际值为假,模型预测值为假。
False Negative - Type II error.实际值为真,模型预测值为假。
truePos:正确分类的样本数。 truePos + falsePos:总的positive样本数。
二 准确率
Accuracy:正确预测数correct、预测总数yTrue.n_elem
double Accuracy(const arma::Row<size_t>& yPreds, const arma::Row<size_t>& yTrue)//predicts labels;true labels
{
const size_t correct = arma::accu(yPreds == yTrue);
return (double)correct / (double)yTrue.n_elem;//correct predict / predict all count
}
Accuracy(output,Ytest)=>output:正确预测数。Ytest.n_elem:预测总数
三 精准率
预测为正的样本中有多少是真正的正样本。
Precision:正确分类的positive样本数/总的positive样本数
double Precision(const size_t truePos, const size_t falsePos)
{
return (double)truePos / (double)(truePos + falsePos);
}
四 召回率
表示样本中的正例有多少被预测正确了。有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN)
Recall:正确分类的positive样本数/正确分类的positive样本数+错误分类的negative样本数。
double Recall(const size_t truePos, const size_t falseNeg)
{
return (double)truePos / (double)(truePos + falseNeg);
}
五 F1值
为正确率和召回率的调和平均值
double F1Score(const size_t truePos, const size_t falsePos, const size_t falseNeg)
{
double prec = Precision(truePos, falsePos);
double rec = Recall(truePos, falseNeg);
return 2 * (prec * rec) / (prec + rec);
}
参数(正确分类的positive样本数==truePos,错误分类的positive样本数 == falsePos,错误分类的negative样本数 == falseNeg)
Prec : 精准率。
Rec:召回率。
F1的值是:2*(精准率*召回率)/(精准率 + 召回率).
六 Classify
对给定的点进行分类,并返回给定矩阵中每个类的概率估计。Predictions:储存每个点的预测标签。data:数据集。probabilities:每个点的类别概率。
dt.Classify(Xtest,output,probs) 使用经过训练的模型对测试集进行分类并获得概率。
Probs:每个点的类别概率。Output:对每个点的预测结果。