【发布时间】:2019-11-30 04:41:33
【问题描述】:
我创建了一个分类器随机森林来预测某些东西。 标签是“是”(=1.0)或“否”(=0.0)
我将我的模型应用于测试。这是我的代码和 20 行的结果:
import org.apache.spark.ml.tuning.CrossValidatorModel
import org.apache.spark.sql.types._
import org.apache.spark.sql._
import org.apache.spark.sql.functions.udf
import org.apache.spark.sql.functions._
var modelrf = CrossValidatorModel.load("modelSupervise/newModel")
var test = spark.sql("""select * from dc.newTest""")
var predictions = modelrf.transform(test)
predictions.select("id","label","rawPrediction","probability","prediction").show(20,false)
+--------+--------------+----------------------------------------+-----------------------------------------+----------+
|id |label |rawPrediction |probability |prediction|
+--------+--------------+----------------------------------------+-----------------------------------------+----------+
|1 |0 |[18.954508743604,1.0454912563959982] |[0.9477254371802001,0.05227456281979992] |0.0 |
|2 |0 |[19.396893651115214,0.6031063488847838] |[0.9698446825557608,0.030155317444239195]|0.0 |
|3 |0 |[19.562942473138747,0.4370575268612524] |[0.9781471236569373,0.02185287634306262] |0.0 |
|4 |0 |[19.072030495384865,0.9279695046151306] |[0.9536015247692434,0.04639847523075654] |0.0 |
|5 |0 |[19.43338228765314,0.5666177123468583] |[0.9716691143826571,0.02833088561734292] |0.0 |
|6 |0 |[19.696154641398266,0.3038453586017339] |[0.9848077320699133,0.015192267930086694]|0.0 |
|7 |0 |[19.561887703818552,0.4381122961814507] |[0.9780943851909274,0.02190561480907253] |0.0 |
|8 |0 |[19.670868420870097,0.32913157912990343]|[0.9835434210435048,0.01645657895649517] |0.0 |
|9 |0 |[19.31258444658832,0.6874155534116762] |[0.9656292223294163,0.034370777670583816]|0.0 |
|10 |1 |[19.324118365007614,0.6758816349923846] |[0.9662059182503807,0.03379408174961923] |0.0 |
|11 |0 |[19.671923190190295,0.32807680980970505]|[0.9835961595095147,0.016403840490485253]|0.0 |
|12 |0 |[5.549867107480572,14.450132892519427] |[0.2774933553740286,0.7225066446259714] |1.0 |
|13 |0 |[8.302734500577003,11.697265499422995] |[0.41513672502885013,0.5848632749711498] |1.0 |
|14 |0 |[3.719926021010336,16.280073978989666] |[0.1859963010505168,0.8140036989494831] |1.0 |
|15 |1 |[4.9810130629790486,15.018986937020955] |[0.2490506531489524,0.7509493468510476] |1.0 |
|16 |1 |[7.575144612227263,12.424855387772734] |[0.37875723061136324,0.6212427693886368] |1.0 |
|17 |0 |[9.763210063340546,10.236789936659454] |[0.4881605031670273,0.5118394968329727] |1.0 |
|18 |0 |[9.475787091640768,10.524212908359234] |[0.4737893545820384,0.5262106454179617] |1.0 |
|19 |1 |[4.236097613170449,15.763902386829551] |[0.21180488065852243,0.7881951193414776] |1.0 |
|20 |0 |[8.748700591583557,11.251299408416445] |[0.43743502957917785,0.5625649704208222] |1.0 |
|21 |0 |[8.908800090849974,11.091199909150026] |[0.4454400045424987,0.5545599954575013] |1.0 |
|22 |1 |[9.726530070446398,10.273469929553602] |[0.4863265035223199,0.5136734964776801] |1.0 |
|23 |1 |[8.908800090849974,11.091199909150026] |[0.4454400045424987,0.5545599954575013] |1.0 |
+--------+--------------+----------------------------------------+-----------------------------------------+----------+
这是我首先理解的:
对于 id=1。 18.95 棵树预测值“0.0”和 1.045 棵树预测 值“1.1”。我认为scala对向量的值进行排序 "rawPrediction" 关于类的值 --> 首先考虑 “0”类,第二个是“1”类。
但是如果它是真的并且如果我们有“是”或“否”而不是 0 或 1,那么 scala 会给出什么命令?字母顺序?
我做了一些研究,发现了这个问题: Random Forest Classifier :To which class corresponds the probabilities
问题是相同的,但对于向量“概率”。向量的哪个元素对应预测“0”的概率,哪个元素对应预测“1”的概率?
我不明白答案...
如何知道对于每一行,模型预测“是”(或 1)的概率是多少?关于标签的类型,scala 是否按数字或字母顺序排列概率...?
提前谢谢你!!
【问题讨论】:
标签: scala apache-spark-sql probability random-forest