調用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