我有一個數據集,其中包含1000個點,每個點有2個輸入和1個輸出。它已被分爲80%的培訓和20%的測試目的。我正在使用sklearn支持向量迴歸器來訓練它。訓練集的準確率達到了100%,但測試集的結果並不理想。我認爲這可能是因爲過度配合。請你能建議我解決問題。Sklearn過度擬合
-2
A
回答
2
您可能是對的:如果您的模型在訓練數據上得分非常高,但對測試數據表現不佳,通常是過度擬合的症狀。你需要在不同的情況下重新訓練你的模型。我假設你正在使用sklearn提供的train_test_split,或者類似的機制來保證你的分裂是公平和隨機的。因此,您需要調整SVR的超參數並創建多個模型,並查看哪個模型在您的測試數據上表現最佳。
如果您看一下SVR文檔,您會發現它可以使用多個輸入參數啓動,每個輸入參數可以設置爲多個不同的值。爲簡單起見,讓我們假設你只處理兩個你想要調整的參數:'kernel'和'C',同時保持第三個參數'degree'爲4.你正在考慮'rbf'和'linear'內核和0.1,1,10 C.一個簡單的解決辦法是這樣的:
for kernel in ('rbf', 'linear'):
for c in (0.1, 1, 10):
svr = SVR(kernel=kernel, C=c, degree=4)
svr.fit(train_features, train_target)
score = svr.score(test_features, test_target)
print kernel, c, score
這樣一來,就可以產生6款車型,看看哪些參數導致的最好成績,這將是選擇的最佳模式,給出這些參數。
更簡單的方法是讓sklearn做大部分的工作適合你的,使用GridSearchCV(或RandomizedSearchCV):
parameters = {'kernel':('linear', 'rbf'), 'C':(0.1, 1, 10)}
clf = GridSearchCV(SVC(degree=4), parameters)
clf.fit(train_features, train_target)
print clf.best_score_
print clf.best_params_
model = clf.best_estimator_ # This is your model
我一個小工具的工作使用sklearn的小項目,以簡化和使其成爲配置yaml文件的一個問題,並讓該工具爲您完成所有工作。它在我的github帳戶中可用。你可能想看一看,看看它是否有幫助。
最後,您的數據可能不是線性的。在這種情況下,您可能想嘗試使用類似PolynomialFeatures的東西來生成基於現有非線性特徵的新非線性特徵,並查看它是否可以提高模型質量。
1
嘗試使用訓練數據拆分Sklearn K-Fold交叉驗證,這將爲您提供公平的數據拆分和更好的模型,儘管以性能爲代價,這對小數據集和優先級應該很重要是準確的。
1
一些提示:
- 因爲你只有兩個輸入,它會如果你繪製你的數據是巨大的。嘗試使用alpha = 0.3的散點圖或熱圖。
- 嘗試GridSearchCV,如@shahins所述。
- 特別是,爲
C
參數嘗試不同的值。正如在docs中所提到的,如果你有很多噪音觀察,你應該減少它。它對應於更多的預測。 - 如果時間太長,您也可以嘗試RandomizedSearchCV
- 作爲@shahins回答(我不允許添加註釋)的一個注意事項,兩種實現方式都不相同。 GridSearchCV更好,因爲它在用於調整超參數的訓練集中執行交叉驗證。不要使用測試集來調整超參數!
- 特別是,爲
- 不要忘了擴展您的數據
相關問題
- 1. sklearn feature_extraction擬合併行
- 2. 線性迴歸的過度擬合
- 3. 過度擬合和ROC曲線
- 4. 使用sklearn cross_val_score和kfolds來擬合和幫助預測模型
- 5. 如何將不同的輸入擬合到sklearn管道中?
- 6. 使用Python/Sklearn創建並擬合乘法線性迴歸
- 7. JSlider擬合JPanel的寬度
- 8. SKlearn SGD部分適合
- 9. C# - 通過二次擬合
- 10. Autoencoder和神經網絡過度擬合的參數號?
- 11. 如何檢測文本編輯是否過度擬合?
- 12. 是什麼原因導致的算法過度擬合
- 13. R HoltWinters預測軟件包 - 避免過度擬合數據
- 14. 爲什麼我的CNN模型過度擬合?
- 15. 過度擬合,梯度消失和局部最小值之間的關係?
- 16. 每行data.frame內的擬合優度
- 17. 6度曲線擬合與numpy/scipy
- 18. 爲什麼sklearn LatentDirichletAllocation的擬合和partial_fit返回不同的結果?
- 19. 功能選擇sklearn - ValueError:X有一個不同的形狀比擬合
- 20. sklearn
- 21. SKLearn決策樹分類深度/訂購
- 22. 如何理解sklearn的精度指標?
- 23. 變化sklearn度量模塊蟒
- 24. 結合熊貓GROUP_BY和sklearn countVectorizer
- 25. 結合Sklearn TFIDF與其他數據
- 26. 通過分散擬合樣條
- 27. 模擬LD_DEBUG合子衍生過程
- 28. 擬合Math.Net通過原點的曲線
- 29. 擬合自舉寬度到內容寬度
- 30. 柔性集裝箱寬度擬合內容寬度
是否有任何理由SVR的選擇呢? – LouisBBBB
這是因爲它有各種數量的內核,可以用來適當地適應非線性數據。 –
機器學習算法背後的主要思想是創建非線性模型。 SVR收斂速度很慢。 SVR有很多內核,每一個都有不同的參數,這使得它更慢(因爲你沒有真正的選擇,只能做一個網格搜索,測試所有參數組合)。這就是爲什麼我問你這個選擇背後的想法。 – LouisBBBB