mllib:Exception in thread "main" org.apache.spark.SparkException: Input validation failed.

當我們使用mllib做分類,用到邏輯迴歸或線性支持向量機做分類時,可能會出現下面的錯誤:

15/04/09 21:27:25 ERROR DataValidators: Classification labels should be 0 or 1. Found 3000000 invalid labels
Exception in thread "main" org.apache.spark.SparkException: Input validation failed.

由於做調試時,debug輸出的信息很多,我們常常忽略了上邊的ERROR,而特別關注Input validation failed。


尋找源碼,先關校驗數據代碼如下:

// Check the data properties before running the optimizer
    if (validateData && !validators.forall(func => func(input))) {
      throw new SparkException("Input validation failed.")
    }

源碼僅此而已,並未能得到解決問題的辦法。然後,後來才發現錯誤信息還有上邊兒的error。


錯誤信息的意思是分類標籤應該是0或者1,而不能是其他值。當時我的類別標籤中包含了2,正好是3000000條信息;於是將類別標籤替換成0或1,編譯通過。


這也證明了爲什麼說線性支持向量機適合做二分類的數據。當然,修改算法它也可以支持三種類別,網上有大量相關實現。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章