為什么要評估?
當(dāng)訓(xùn)練或部署神經(jīng)網(wǎng)絡(luò)時(shí),了解模型的準(zhǔn)確性是有用的。在DL4J中,評估類和評估類的變體可用于評估模型的性能。
分類評估
評估類用于評估二分類和多類分類器(包括時(shí)間序列分類器)的性能。本節(jié)介紹了評估類的基本用法。
給定一個(gè)DataSetIterator形式的數(shù)據(jù)集,執(zhí)行評估的最簡單方法是使用MultiLayerNetwork和ComutationGraph上的內(nèi)置評估方法:
DataSetIterator myTestData = ...
Evaluation eval = model.evaluate(myTestData);

然而,也可以對單個(gè)小批量進(jìn)行評估。這里是一個(gè)例子,從我們的示例項(xiàng)目中數(shù)據(jù)實(shí)例/CSV示例中獲得。
CSV的例子有3類花的CSV數(shù)據(jù),建立了一個(gè)簡單的前饋神經(jīng)網(wǎng)絡(luò)用于對基于4個(gè)測量值的花的分類。
Evaluation eval = new Evaluation(3);
INDArray output = model.output(testData.getFeatures());
eval.eval(testData.getLabels(), output);
log.info(eval.stats());

第一行創(chuàng)建一個(gè)具有3個(gè)類的評估對象。第二行從模型中獲取我們測試數(shù)據(jù)集的標(biāo)簽。第三行使用eval方法將來自testdata的標(biāo)簽數(shù)組與從模型生成的標(biāo)簽進(jìn)行比較。第四行將評估數(shù)據(jù)記錄到控制臺。
輸出
Examples labeled as 0 classified by model as 0: 24 times
Examples labeled as 1 classified by model as 1: 11 times
Examples labeled as 1 classified by model as 2: 1 times
Examples labeled as 2 classified by model as 2: 17 times
==========================Scores========================================
# of classes: 3
Accuracy: 0.9811
Precision: 0.9815
Recall: 0.9722
F1 Score: 0.9760
Precision, recall & F1: macro-averaged (equally weighted avg. of 3 classes)
========================================================================

默認(rèn)情況下,.stats() 方法顯示混淆矩陣條目(每行一個(gè))、準(zhǔn)確度、精度、召回率和F1分?jǐn)?shù)。此外,評估類還可以計(jì)算并返回以下值:
- 混淆矩陣
- 假陽性/陰性率
- 真陽性/陰性
- 類別計(jì)數(shù)
- F-beta, G-measure, Matthews 關(guān)系數(shù)及更多, 查看 Evaluation JavaDoc
顯示混淆矩陣。
System.out.println(eval.confusionToString());

顯示
Predicted: 0 1 2
Actual:
0 0 | 16 0 0
1 1 | 0 19 0
2 2 | 0 0 18

此外,可以直接訪問混淆矩陣,使用CSV或HTML轉(zhuǎn)換。
eval.getConfusionMatrix() ;
eval.getConfusionMatrix().toHTML();
eval.getConfusionMatrix().toCSV();

回歸評估
為了評估執(zhí)行回歸的網(wǎng)絡(luò),使用回歸評估類。
帶著評估類,一個(gè)DataSetIterator上的回歸評估可以執(zhí)行如下:
DataSetIterator myTestData = ...
RegressionEvaluation eval = model.evaluateRegression(myTestData);

這里有一個(gè)單列的代碼片段,在這種情況下,神經(jīng)網(wǎng)絡(luò)是根據(jù)測量值來預(yù)測自己的年齡。
RegressionEvaluation eval = new RegressionEvaluation(1);

打印評估的統(tǒng)計(jì)數(shù)據(jù)。
System.out.println(eval.stats());

返回
Column MSE MAE RMSE RSE R^2
col_0 7.98925e+00 2.00648e+00 2.82653e+00 5.01481e-01 7.25783e-01

列是均方誤差、均方絕對誤差、均方根誤差、相對平方誤差和R^2決定系數(shù)。
查看 回歸評估JavaDoc
同時(shí)進(jìn)行多個(gè)評估
當(dāng)執(zhí)行多種類型的評估時(shí)(例如,在同一網(wǎng)絡(luò)和數(shù)據(jù)集上執(zhí)行評估和ROC),在數(shù)據(jù)集的一次傳遞中執(zhí)行以下操作更有效:
DataSetIterator testData = ...
Evaluation eval = new Evaluation();
ROC roc = new ROC();
model.doEvaluation(testdata, eval, roc);

時(shí)間序列評估
時(shí)間序列評估與上述評估方法非常相似。DL4J中的評估對所有(非掩碼的)時(shí)間步分別執(zhí)行——例如,長度為10的時(shí)間序列將為評估對象貢獻(xiàn)10個(gè)預(yù)測/標(biāo)簽。與時(shí)間序列的一個(gè)不同之處在于掩碼數(shù)組是(可選的),這些掩碼數(shù)組用于將一些時(shí)間步標(biāo)記為丟失或不存在。請參閱使用RNNS掩碼以獲得更多關(guān)于掩碼的細(xì)節(jié)。
對于大多數(shù)用戶來說,僅僅使用 MultiLayerNetwork.evaluate(DataSetIterator) 或 MultiLayerNetwork.evaluateRegression(DataSetIterator) 和類似的方法就足夠了。如果掩碼數(shù)組存在,這些方法將正確地處理掩碼。
二分類器評估
EvaluationBinary用于評估具有二分類輸出的網(wǎng)絡(luò)——這些網(wǎng)絡(luò)通常具有Sigmoid激活函數(shù)和XENT損失函數(shù)。為每個(gè)輸出計(jì)算典型的分類度量,例如準(zhǔn)確度、精度、召回率、F1得分等。
EvaluationBinary eval = new EvaluationBinary(int size)

ROC
ROC(接收者操作特征)是另一種常用的評估分類器的評估指標(biāo)。DL4J中存在三個(gè)ROC變體:
- ROC -用“一對全部”的方法評估非二分類器
- ROCBinary - 用于單二分類標(biāo)簽(作為單列概率,或兩列的softmax概率分布)
- ROCMultiClass - 用于多二分類標(biāo)簽
這些類具有通過calculateAUC()和calculateAUPRC()方法計(jì)算ROC曲線下面積(AUROC)和精確度-召回曲線下面積(AUPRC)的能力。此外,可以使用getRocCurve()和getPrecisionRecallCurve()獲得ROC和精確度-召回曲線。
ROC和精確度-召回曲線可以導(dǎo)出到HTML以便查看,使用:“EvaluationTools.exportRocChartsToHtmlFile(ROC,File)”,該文件將導(dǎo)出具有ROC和精確度-召回曲線的HTML文件,可以在瀏覽器中查看。
注意,所有三種支持兩種操作/計(jì)算模式。
- 閾值(近似AUROC/AUPRC計(jì)算,無內(nèi)存問題)
- 精確(精確的AUROC/AUPRC計(jì)算,但是對于非常大的數(shù)據(jù)集(即具有數(shù)百萬個(gè)示例的數(shù)據(jù)集)可能需要大量的內(nèi)存
可以使用構(gòu)造函數(shù)設(shè)置容器的數(shù)量。可以使用默認(rèn)構(gòu)造函數(shù)new ROC()來精確設(shè)置,或者顯式地使用new ROC(0)。
參見ROCBinary JavaDoc用于評估二元分類器。
評估分類器校準(zhǔn)
DL4J還具有評估校準(zhǔn)類,它被設(shè)計(jì)用于分析分類器的校準(zhǔn)。它提供了許多的工具用于如下目的:
- 每個(gè)類別的標(biāo)簽數(shù)量和預(yù)測的計(jì)數(shù)
- 可靠性圖(或可靠性曲線)
- 殘差圖(直方圖)
- 概率直方圖,包括每個(gè)類的概率
使用評估校準(zhǔn)的分類器評估方式與其它評估類相似。可以使用EvaluationTools.exportevaluationCalibrationToHtmlFile(EvaluationCalibration, File)將各種繪圖/直方圖導(dǎo)出到HTML以便查看。
Spark網(wǎng)絡(luò)的分布式評估
SparkDl4jMultiLayer 和 SparkComputationGraph 都有相似的評估方法:
Evaluation eval = SparkDl4jMultiLayer.evaluate(JavaRDD<DataSet>);
//一次傳遞多次評估:
SparkDl4jMultiLayer.doEvaluation(JavaRDD<DataSet>, IEvaluation...);

多任務(wù)網(wǎng)絡(luò)評估
多任務(wù)網(wǎng)絡(luò)是經(jīng)過訓(xùn)練以產(chǎn)生多個(gè)輸出的網(wǎng)絡(luò)。例如,可以對給定音頻樣本的網(wǎng)絡(luò)進(jìn)行訓(xùn)練,以預(yù)測說話者的語言和說話人的性別。這里簡要描述了多任務(wù)配置。
適用于多任務(wù)網(wǎng)絡(luò)的評估類
可用的評估
Evaluation
評估指標(biāo):
- 精度,召回率,F(xiàn)1,F(xiàn)Beta,準(zhǔn)確度,馬休斯相關(guān)系數(shù),gMeasure
argmax / 0.5) 注意:在使用用于二分類度量(如F1、精確度、召回等)的評估類時(shí)應(yīng)小心。有許多案例需要考慮:-
對于二分類(1或2個(gè)網(wǎng)絡(luò)輸出)
c)在兩個(gè)類上使用宏平均度量進(jìn)行二分類(不常見且通常不可?。?,如上(b)所示,指定“null”作為參數(shù)(而不是0或1)
將報(bào)告宏平均(一個(gè)對全部)二分類度量。請注意,可以指定微vs宏平均
注意,設(shè)置自定義二進(jìn)制決策閾值僅對于二分類情況(1或2個(gè)輸出)是可能的,并且如果類的數(shù)量超過2,則不能使用它。概率>閾值的預(yù)測被認(rèn)為是類1,否則被認(rèn)為是類0。
成本數(shù)組(行向量,大小等于輸出數(shù)量)修改評估過程:我們不是簡單地執(zhí)行predictedClass = argMax(probabilities),而是執(zhí)行predictedClass = argMax(cost probabilities)。因此,所有1s的數(shù)組(或者實(shí)際上任何相等值的數(shù)組)將導(dǎo)致與無成本數(shù)組相同的性能;非相等值將偏離對某些類的預(yù)測。
-
Evaluation
public Evaluation(int numClasses)

評估中要考慮的分類數(shù)
- 參數(shù) numClasses 評估中要考慮的分類數(shù)
Evaluation
public Evaluation(int numClasses, Integer binaryPositiveClass)

構(gòu)造函數(shù),用于指定類的數(shù)目,并且可選地用于二分類的正類。有關(guān)二分類情況下的評估的詳細(xì)信息,請參見評估JavaDoc
- 參數(shù) numClasses 評估的分類數(shù)。必須是2,如果binaryPositiveClass是非空的
- 參數(shù) binaryPositiveClass 如果非空,則為正類(0或1)。
eval
public void eval(INDArray trueLabels, INDArray input, ComputationGraph network)

對 使用給定的true標(biāo)簽的輸出、計(jì)算圖網(wǎng)絡(luò)輸入和用于評估的計(jì)算圖網(wǎng)絡(luò) 進(jìn)行評估
- 參數(shù) trueLabels 使用的標(biāo)簽
- 參數(shù) input 用于評估的網(wǎng)絡(luò)輸入
- 參數(shù) network 用于輸出的網(wǎng)絡(luò)
eval
public void eval(INDArray trueLabels, INDArray input, MultiLayerNetwork network)

對 使用給定的true標(biāo)簽的輸出、多層網(wǎng)絡(luò)輸入和用于評估的多層網(wǎng)絡(luò) 進(jìn)行評估
- 參數(shù) trueLabels 使用的標(biāo)簽
- 參數(shù) input 用于評估的網(wǎng)絡(luò)輸入
- 參數(shù) network 用于輸出的網(wǎng)絡(luò)
eval
public void eval(INDArray realOutcomes, INDArray guesses)

收集關(guān)于真實(shí)結(jié)果和猜測的統(tǒng)計(jì)數(shù)據(jù)。這是邏輯的結(jié)果矩陣。
請注意,如果傳遞的兩個(gè)矩陣中長度不相同,則會拋出IllegalArgumentException。
- 參數(shù) realOutcomes 真實(shí)的結(jié)果(標(biāo)簽-通常是二分類的)
- 參數(shù) guesses 猜測/預(yù)測 (通常是概率向量)
eval
public void eval(final INDArray realOutcomes, final INDArray guesses,
final List<? extends Serializable> recordMetaData)

用可選元數(shù)據(jù)評估網(wǎng)絡(luò)
- 參數(shù) realOutcomes 數(shù)據(jù)標(biāo)簽
- 參數(shù) guesses 網(wǎng)絡(luò)預(yù)測
- 參數(shù) recordMetaData 可選的;可以是空的。如果不是NULL,則其大小應(yīng)該等于結(jié)果/猜測的數(shù)量。
eval
public void eval(int predictedIdx, int actualIdx)

評估單一預(yù)測(一次一個(gè)預(yù)測)
- 參數(shù) predictedIdx 網(wǎng)絡(luò)預(yù)測類索引
- 參數(shù) actualIdx 實(shí)際類索引
stats
public String stats()

以字符串形式報(bào)告統(tǒng)計(jì)信息
- 返回分類統(tǒng)計(jì)信息
stats
public String stats(boolean suppressWarnings)

以字符串形式獲取分類報(bào)告的方法。
參數(shù) suppressWarnings 是否輸出與評估結(jié)果相關(guān)的警告
返回(多行)字符串的準(zhǔn)確性、精確性、召回、F1得分等
stats
public String stats(boolean suppressWarnings, boolean includeConfusion)

以字符串形式獲取分類報(bào)告的方法。
- 參數(shù) suppressWarnings 是否輸出與評估結(jié)果相關(guān)的警告
- 參數(shù) includeConfusion 混淆矩陣是否應(yīng)包含在返回的統(tǒng)計(jì)數(shù)據(jù)中
- 返回(多行)字符串的準(zhǔn)確性、精確性、召回、F1得分等
confusionMatrix
public String confusionMatrix()

將混淆矩陣作為字符串獲取
- 作為字符串返回混淆矩陣
precision
public double precision(Integer classLabel)

返回給定類標(biāo)簽的精度
- 參數(shù) classLabel 標(biāo)簽
- 返回標(biāo)簽的精度
precision
public double precision(Integer classLabel, double edgeCase)

返回給定類標(biāo)簽的精度
- 參數(shù) classLabel 標(biāo)簽
- 參數(shù) edgeCase 在0/0情況時(shí)的輸出
- 返回標(biāo)簽的精度
precision
public double precision()

迄今為止,基于猜測的精確性。
注意:返回的值將根據(jù)類的數(shù)量和設(shè)置而不同。
- 對于二分類,如果設(shè)置了正類(通過默認(rèn)值為1、通過構(gòu)造函數(shù)或通過setBinaryPositiveClass(Integer),則返回的值將僅用于指定的正類。
- 對于多分類的情況,或者當(dāng)getBinaryPositiveClass()為NULL時(shí),返回的值是跨所有類的宏平均值。即,宏平均精度,相當(dāng)于precision(EvaluationAveraging.Macro)。
- 基于猜測返回總精度
precision
public double precision(EvaluationAveraging averaging)

計(jì)算所有類的平均精度??梢灾付ㄊ菓?yīng)該使用宏平均還是微觀平均。注意:如果任何類具有tp=0和fp=0,(精度=0/0),則這些類被排除在平均值之外。
- 參數(shù) averaging 平均法-宏或微
- 返回平均精度
averagePrecisionNumClassesExcluded
public int averagePrecisionNumClassesExcluded()

在計(jì)算(宏)平均精度時(shí),由于沒有預(yù)測平均中排除了多少類——即,精度是0/0的邊緣情況。
- 返回從平均精度排除的類數(shù)
averageRecallNumClassesExcluded
public int averageRecallNumClassesExcluded()

在計(jì)算(宏)平均召回時(shí),由于沒有預(yù)測平均中排除了多少類——即,召回是0/0的邊緣情況。
- 返回從平均召回排除的類數(shù)
averageF1NumClassesExcluded
public int averageF1NumClassesExcluded()

在計(jì)算(宏)平均F1時(shí),由于沒有預(yù)測,從平均值中排除了多少類——即,F(xiàn)1將根據(jù)0/0的精度或召回率來計(jì)算。
- 返回從平均F1排除的類數(shù)
averageFBetaNumClassesExcluded
public int averageFBetaNumClassesExcluded()

在計(jì)算(宏)平均FBeta時(shí),由于沒有預(yù)測,從平均值中排除了多少類——即,F(xiàn)Beta將根據(jù)0/0的精度或召回率來計(jì)算。
- 返回從平均FBeta排除的類數(shù)
recall
public double recall(int classLabel)

返回給定標(biāo)簽的召回率
- 參數(shù) classLabel 標(biāo)簽
- 返回double類型的召回率
recall
public double recall(int classLabel, double edgeCase)

返回給定標(biāo)簽的召回率
- 參數(shù) classLabel 標(biāo)簽
- 參數(shù) edgeCase 在0/0的情況下的輸出
- 返回double類型的召回率
recall
public double recall()

迄今為止基于猜測的召回
注意:返回的值將根據(jù)類的數(shù)量和設(shè)置而不同。
- 對于二分類,如果設(shè)置了正類(通過默認(rèn)值為1、通過構(gòu)造函數(shù)或通過setBinaryPositiveClass(Integer),則返回的值將僅用于指定的正類。
- 對于多分類的情況,或者當(dāng)getBinaryPositiveClass()為NULL時(shí),返回的值是跨所有類的宏平均值。即,宏平均召回,相當(dāng)于recall(EvaluationAveraging.Macro)。
- 為結(jié)果返回召回
recall
public double recall(EvaluationAveraging averaging)

計(jì)算所有類的平均召回-可以指定是使用宏平均還是微觀平均。注意:如果任何類都具有TP=0和fn=0,(召回=0/0),這些都是從平均值中排除的。
- 參數(shù) averaging 平均方法-宏或微
- 返回平均召回率
falsePositiveRate
public double falsePositiveRate(int classLabel)

返回給定標(biāo)簽的假陽性率
- 參數(shù) classLabel 標(biāo)簽
- 返回double類型的假陽性率
falsePositiveRate
public double falsePositiveRate(int classLabel, double edgeCase)

返回給定標(biāo)簽的假陽性率
- 參數(shù) classLabel 標(biāo)簽
- 參數(shù) edgeCase 0/0時(shí)的輸出
- 返回double類型的假陽性率
falsePositiveRate
public double falsePositiveRate()

迄今為止基于猜測的假陽性率 注意:返回的值將根據(jù)類的數(shù)量和設(shè)置而不同。
- 對于二分類,如果設(shè)置了正類(通過默認(rèn)值為1、通過構(gòu)造函數(shù)或通過setBinaryPositiveClass(Integer),則返回的值將僅用于指定的正類。
- 對于多分類的情況,或者當(dāng)getBinaryPositiveClass()為NULL時(shí),返回的值是跨所有類的宏平均值。即,宏平均假陽性率,相當(dāng)于falsePositiveRate(EvaluationAveraging.Macro)。
- 返回輸出假陽性率
falsePositiveRate
public double falsePositiveRate(EvaluationAveraging averaging)

計(jì)算所有類別的平均假陽性率。可以指定是應(yīng)該使用宏平均還是微觀平均
- 參數(shù) averaging 平均方法.宏觀或微觀
- 返回平均假陽性率
falseNegativeRate
public double falseNegativeRate(Integer classLabel)

返回給定標(biāo)簽的假陰性率
- 參數(shù) classLabel 標(biāo)簽
- 返回double類型的假陰性率
falseNegativeRate
public double falseNegativeRate(Integer classLabel, double edgeCase)

返回給定標(biāo)簽的假陰性率
- 參數(shù) classLabel 標(biāo)簽
- 參數(shù) edgeCase 在0/0的情況下的輸出
- 返回double類型的假陰性率
falseNegativeRate
public double falseNegativeRate()

迄今為止基于猜測的假陰性率 注意:返回的值將根據(jù)類的數(shù)量和設(shè)置而不同。
- 對于二分類,如果設(shè)置了正類(通過默認(rèn)值為1、通過構(gòu)造函數(shù)或通過setBinaryPositiveClass(Integer),則返回的值將僅用于指定的正類。
- 對于多分類的情況,或者當(dāng)getBinaryPositiveClass()為NULL時(shí),返回的值是跨所有類的宏平均值。即,宏平均假陰性率,相當(dāng)于falseNegativeRate(EvaluationAveraging.Macro)。
- 返回輸出假陽性率
falseNegativeRate
public double falseNegativeRate(EvaluationAveraging averaging)

計(jì)算所有類別的平均假陰性率??梢灾付ㄊ菓?yīng)該使用宏平均還是微觀平均
- 參數(shù) averaging 平均方法.宏觀或微觀
- 返回平均假陰性率
falseAlarmRate
public double falseAlarmRate()

誤報(bào)率反映了對分類記錄的錯(cuò)誤分類率。http://ro.ecu.edu.au/cgi/viewcontent.cgi?article=1058&context=isw 注意:返回的值將根據(jù)類的數(shù)量和設(shè)置而不同。
- 對于二分類,如果設(shè)置了正類(通過默認(rèn)值為1、通過構(gòu)造函數(shù)或通過setBinaryPositiveClass(Integer),則返回的值將僅用于指定的正類。
- 對于多分類的情況,或者當(dāng)getBinaryPositiveClass()為NULL時(shí),返回的值是跨所有類的宏平均值。即,宏平均誤報(bào)率。
- 返回輸出誤報(bào)率
f1
public double f1(int classLabel)

計(jì)算給定分類的F1分?jǐn)?shù)
- 參數(shù) classLabel 計(jì)算F1的標(biāo)簽
- 返回給定標(biāo)簽的F1分?jǐn)?shù)
fBeta
public double fBeta(double beta, int classLabel)

計(jì)算給定類的FBeta,其中FBeta定義為:
(1 +beta^ 2)(精確召回)/(beta^ 2精度+召回)。
F1是FBeta的一個(gè)特例,具有beta=1。
- 參數(shù) beta 使用的Beta值
- 參數(shù) classLabel 分類標(biāo)簽
- 返回 FBeta
fBeta
public double fBeta(double beta, int classLabel, double defaultValue)

計(jì)算給定類的FBeta,其中FBeta定義為:
(1 +beta^ 2)(精確召回)/(beta^ 2精度+召回)。
F1是FBeta的一個(gè)特例,具有beta=1。
- 參數(shù) beta 使用的Beta值
- 參數(shù) classLabel 分類標(biāo)簽
- 參數(shù) defaultValue 精度或召回未定義(精度或召回為0/0)時(shí)的缺省值
- 返回 FBeta
f1
public double f1()

計(jì)算F1得分
F1得分定義為:
TP:真陽性
FP:假陽性
FN:假陰性
F1得分:2 TP/(2TP+FP+FN)
注意:返回的值將根據(jù)類的數(shù)量和設(shè)置而不同。
- 對于二分類,如果設(shè)置了正類(通過默認(rèn)值為1、通過構(gòu)造函數(shù)或通過setBinaryPositiveClass(Integer),則返回的值將僅用于指定的正類。
- 對于多分類的情況,或者當(dāng)getBinaryPositiveClass()為NULL時(shí),返回的值是跨所有類的宏平均值。即,宏平均 f1,相當(dāng)于 f1(EvaluationAveraging.Macro)。
- 返回基于當(dāng)前猜測的f1分?jǐn)?shù)或精度與召回的調(diào)和平均
f1
public double f1(EvaluationAveraging averaging)

計(jì)算所有類別的F1得分??梢灾付ㄊ菓?yīng)該使用宏平均還是微觀平均
- 參數(shù) averaging 平均方法.宏觀或微觀
fBeta
public double fBeta(double beta, EvaluationAveraging averaging)

計(jì)算所有類別的F_beta得分??梢灾付ㄊ菓?yīng)該使用宏平均還是微觀平均
- 參數(shù) beta 使用的Beta值
- 參數(shù) averaging 平均方法.宏觀或微觀
gMeasure
public double gMeasure(int output)

計(jì)算給定輸出的G-measure
- 參數(shù) output 指定輸出
- 返回指定輸出的G-measure
gMeasure
public double gMeasure(EvaluationAveraging averaging)

使用微或宏平均計(jì)算所有輸出的平均Gmeasure
- 參數(shù) averaging 平均方法.宏觀或微觀
- 返回平均G measure
accuracy
public double accuracy()

準(zhǔn)確率: (TP + TN) / (P + N)
- 返回到目前為止猜測的準(zhǔn)確率
topNAccuracy
public double topNAccuracy()

迄今為止預(yù)測的第N高的準(zhǔn)確率。對于top n=1(默認(rèn)值),相當(dāng)于accuracy()
- 返回 前N 準(zhǔn)確率
翻譯:風(fēng)一樣的男子

如果您覺得我的文章給了您幫助,請為我買一杯飲料吧!以下是我的支付寶,意思一下我將非常感激!
