Machine learning 从Spark ML LinearSVC解释RAW预测
我正在二元分类模型中使用Spark ML的LinearSVC。转换方法创建两个列:预测列和预测列。Spark的文档没有为这个特定的分类器提供任何解释rawPrediction列的方法。这个问题已经为其他分类器提出和回答,但不是专门针对LinearSVC “我的预测”数据框中的相关列:Machine learning 从Spark ML LinearSVC解释RAW预测,machine-learning,classification,svm,apache-spark-ml,Machine Learning,Classification,Svm,Apache Spark Ml,我正在二元分类模型中使用Spark ML的LinearSVC。转换方法创建两个列:预测列和预测列。Spark的文档没有为这个特定的分类器提供任何解释rawPrediction列的方法。这个问题已经为其他分类器提出和回答,但不是专门针对LinearSVC “我的预测”数据框中的相关列: +------------------------------------------+ |rawPrediction | +--------------
+------------------------------------------+
|rawPrediction |
+------------------------------------------+
|[0.8553257800650063,-0.8553257800650063] |
|[0.4230977574196645,-0.4230977574196645] |
|[0.49814263303537865,-0.49814263303537865]|
|[0.9506355050332026,-0.9506355050332026] |
|[0.5826887000450813,-0.5826887000450813] |
|[1.057222808292026,-1.057222808292026] |
|[0.5744214192446275,-0.5744214192446275] |
|[0.8738081933835614,-0.8738081933835614] |
|[1.418173816502859,-1.418173816502859] |
|[1.0854125533426737,-1.0854125533426737] |
+------------------------------------------+
显然,这不仅仅是属于每一类的概率。这是什么
编辑:由于输入代码已被请求,这里有一个基于原始数据集中特征子集的模型。使用Spark的LinearSVC拟合任何数据都将生成此列
var df = sqlContext
.read
.format("csv")
.option("header", "true")
.option("inferSchema", "true")
.load("/FileStore/tables/full_frame_20180716.csv")
var assembler = new VectorAssembler()
.setInputCols(Array("oy_length", "ah_length", "ey_length", "vay_length", "oh_length",
"longest_word_length", "total_words", "repeated_exact_words",
"repeated_bigrams", "repeated_lemmatized_words",
"repeated_lemma_bigrams"))
.setOutputCol("features")
df = assembler.transform(df)
var Array(train, test) = df.randomSplit(Array(.8,.2), 42)
var supvec = new LinearSVC()
.setLabelCol("written_before_2004")
.setMaxIter(10)
.setRegParam(0.001)
var supvecModel = supvec.fit(train)
var predictions = supvecModel.transform(test)
predictions.select("rawPrediction").show(20, false)
输出:
+----------------------------------------+
|rawPrediction |
+----------------------------------------+
|[1.1502868455791242,-1.1502868455791242]|
|[0.853488887006264,-0.853488887006264] |
|[0.8064994501574174,-0.8064994501574174]|
|[0.7919862003563363,-0.7919862003563363]|
|[0.847418035176922,-0.847418035176922] |
|[0.9157433788236442,-0.9157433788236442]|
|[1.6290888181913814,-1.6290888181913814]|
|[0.9402461917731906,-0.9402461917731906]|
|[0.9744052798627367,-0.9744052798627367]|
|[0.787542624053347,-0.787542624053347] |
|[0.8750602657901001,-0.8750602657901001]|
|[0.7949414037722276,-0.7949414037722276]|
|[0.9163545832998052,-0.9163545832998052]|
|[0.9875454213431247,-0.9875454213431247]|
|[0.9193015302646135,-0.9193015302646135]|
|[0.9828623328048487,-0.9828623328048487]|
|[0.9175976004208621,-0.9175976004208621]|
|[0.9608750388820302,-0.9608750388820302]|
|[1.029326217566756,-1.029326217566756] |
|[1.0190290910146256,-1.0190290910146256]| +----------------------------------------+
only showing top 20 rows
它是-保证金,保证金
张贴代码和一些返回此类信息的数据output@VivekKumar我理解有关于主题的问题是可取的,我也鼓励有人这样做,但这是一个非常完整的问题,有一个清晰而准确的问题定义。与其向下投票、标记和保留,不如建议一个更好的堆栈,如数据科学或交叉验证。@jonwhithers@sconfluentus当我向下投票并标记时,这是因为问题没有再现输出所需的代码。为什么你认为数据科学是最好的地方?@VivekKumar因为问题不是关于代码,而是关于模型的输出,这在第一个化身中就存在。看到代码并不会使输出更容易理解,因此更适合交叉验证或数据科学堆栈,在这些堆栈中,人们期待建模问题……如果存在系数表,则无需提供数据和代码来生成线性回归的输出,以解释p值,而且,如果您知道该模型是如何工作的,也不需要查看数据来描述spark的rawPrediction格式。
override protected def predictRaw(features: Vector): Vector = {
val m = margin(features)
Vectors.dense(-m, m)
}