天天看點

調用sklearn模型遇到Unknown label type: continuous 的解決辦法

調用sklearn模型遇到Unknown label type: continuous 的解決辦法

分類問題 sklearn.svm.SVC()

分類問題的标簽應該設定為int類型,直接在y輸入變量的後面加
上轉換資料類型為int或者string即可:
    y_train.astype('int')
           

回歸問題 sklearn.svm.SVR()

回歸問題應該使用的是SVR,若使用sklearn.svm.SVC()則會
出現上面的問題,因為SVC()處理的是分類問題,标簽的類型應
該是int或string類型。
           

SVC()與SVR()的差別

  • support vector classify(SVC)支援分類機做二分類的,找出分類面,解決分類問題
  • support vector regression(SCR)支援回歸機做曲線拟合、函數回歸 ,做預測,溫度,天氣,股票
  • 直覺上來講 SVM 分類(SVC Support Vector Classification)與 SVR(Support Vector Regression)圖形上的差別如下:
    調用sklearn模型遇到Unknown label type: continuous 的解決辦法
  • 對于樣本 (x,y) ,傳統的回歸模型通常直接輸出 f(x) 與真實輸出 y 之間的差别來計算損失,當且僅當 f(x) 與 y 完全相同時,損失才是零。與此不同 SVR 假設我們能容忍 f(x) 與 y 之間最多有 ε 的偏差,即僅當 f(x) 與 y 之間的差别絕對值大于 ε 時才計算損失。這相當于以 f(x) 為中心 建構一個寬度為 2ε 的間隔帶,若樣本落入此間隔帶,則認為是預測正确的,如下圖:
    調用sklearn模型遇到Unknown label type: continuous 的解決辦法

基于 Sklearn 的實踐建議

【參考】sklearn - Tips on Practical Use

  • 核緩存的大小:對于 SCV、SVR、NuSVC 和 NuSVR,核函數緩存的大小對于大型問題的運作時間有着非常大的影響。如果有足夠多的記憶體,建議把cache_size的大小設定的盡可能的大。
  • 設定 C:1 是一個合理的預設選擇,如果有較多噪點資料,你應該較少 C 的大小。
  • SVM 算法不是尺度不變,是以強烈建議縮放你的資料。如将輸入向量 X 的每個屬性縮放到[0,1] 或者 [-1,1],或者标準化為均值為 0 方差為 1 。另外,在測試向量時也應該使用相同的縮放,已獲得有意義的結果。
  • 對于SVC,如果分類的資料不平衡(如有很多的正例很少的負例),可以設定class_weight=‘balanced’,或者嘗試不同的懲罰參數 C
  • 底層實作的随機性:SVC和NuSVC的底層實作使用了随機數生成器,在機率估計時混洗資料(當 probability 設定為 True),随機性可以通過 random_state 參數控制。如果 probability 設定為False ,這些估計不是随機的,random_state 對結果不在有影響。

Reference

https://www.cnblogs.com/jiading/p/12105232.html

https://www.cnblogs.com/ylHe/p/7676173.html