【scikit-learn基础】--『监督学习』之 支持向量机回归
在機器學習中,支持向量機(Support Vector Machine)算法既可以用于回歸問題,也可以用于分類問題。
支持向量機(SVM)算法的歷史可以追溯到1963年,當時前蘇聯統計學家弗拉基米爾·瓦普尼克(Vladimir N. Vapnik)和他的同事阿列克謝·切爾沃寧基斯(Alexey Ya. Chervonenkis)提出了支持向量機的概念。然而,由于當時的國際環境影響,他們用俄文發表的論文并沒有受到國際學術界的關注。
直到20世紀90年代,瓦普尼克移民到美國,隨后發表了SVM理論。
在此之后,SVM算法開始受到應有的重視。在1993年和1995年,Corinna Cortes和瓦普尼克提出了SVM的軟間隔分類器,并對其進行了詳細的研究和改進。隨著機器學習領域的快速發展,SVM逐漸成為一種流行的監督學習算法,被廣泛應用于分類和回歸問題。
一般來說,支持向量機用于分類問題時,會簡稱 SVC;用于回歸問題時,會簡稱SVR。
1. 概述
支持向量機回歸(Support Vector Machine Regression,簡稱SVR)的基本思想是通過構建一個分類器,將輸入數據映射到高維空間中,使得數據在高維空間中更加線性可分,從而得到一個最優的回歸模型。
如上圖所示,SVR的包括:
- 模型函數:\(f(x) = w^Tx +b\)
- 模型上下邊緣分別為:\(w^T+x+b+\epsilon\)和 \(w^T+x+b-\epsilon\)
2. 創建樣本數據
這次的回歸樣本數據,我們用 scikit-learn 自帶的玩具數據集中的糖尿病數據集。
關于玩具數據集的內容,可以參考:TODO
from sklearn.datasets import load_diabetes
# 糖尿病數據集
diabetes = load_diabetes()
X = diabetes.data
y = diabetes.target
這個數據集中大約有400多條數據。
3. 模型訓練
訓練之前,為了減少算法誤差,先對數據進行標準化處理。
from sklearn import preprocessing as pp
# 數據標準化
X = pp.scale(X)
y = pp.scale(y)
接下來分割訓練集和測試集。
from sklearn.model_selection import train_test_split
# 分割訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)
然后用scikit-learn中的SVR模型來訓練:
from sklearn.svm import SVR
# 定義支持向量機回歸模型
reg = SVR(kernel='linear')
# 訓練模型
reg.fit(X_train, y_train)
SVR的主要參數包括:
-
kernel:核函數類型,可以選擇線性('
linear')、多項式('poly')、徑向基('rbf')、sigmoid('sigmoid')等。 -
degree:多項式核函數的度,僅當
kernel='poly'時有效。 - C:懲罰參數,控制對超出間隔的樣本的懲罰力度。C值越大,對超出間隔的樣本的懲罰力度越大;C值越小,模型越有可能出現過度擬合。
-
epsilon:定義間隔的容忍度,
epsilon越大,間隔越大。 -
gamma:定義了核函數的系數,
gamma越大,核函數的形狀越窄,對數據的影響越小。 -
tol:定義了優化算法的容忍度,
tol越大,算法越容易接受較差的解。 - max_iter:定義了優化算法的最大迭代次數。
最后驗證模型的訓練效果:
from sklearn import metrics
# 在測試集上進行預測
y_pred = reg.predict(X_test)
mse, r2, m_error = 0.0, 0.0, 0.0
y_pred = reg.predict(X_test)
mse = metrics.mean_squared_error(y_test, y_pred)
r2 = metrics.r2_score(y_test, y_pred)
m_error = metrics.median_absolute_error(y_test, y_pred)
print("均方誤差:{}".format(mse))
print("復相關系數:{}".format(r2))
print("中位數絕對誤差:{}".format(m_error))
# 運行結果
均方誤差:0.6235345942607318
復相關系數:0.3106068096398569
中位數絕對誤差:0.5861766809598691
從預測的誤差來看,訓練的效果還不錯。
4. 總結
SVR算法的應用場景非常廣泛,包括時間序列預測、金融市場分析、自然語言處理、圖像識別等領域。
例如,在時間序列預測中,SVR算法可以用于預測股票價格、房價等連續變量的未來值。
在金融市場分析中,SVR算法可以用于預測股票指數的走勢,幫助投資者做出更加明智的投資決策。
在自然語言處理中,SVR算法可以用于文本分類和情感分析等任務。
在圖像識別中,SVM回歸算法可以用于圖像分割和目標檢測等任務。
總之,SVR算法是一種非常有效的機器學習算法,可以用于解決各種回歸問題。
它的優點包括泛化能力強、能夠處理非線性問題、對數據規模和分布不敏感等。
然而,它的計算復雜度較高,需要使用高效的優化算法進行求解,同時也需要仔細地選擇合適的參數以避免過擬合和欠擬合等問題。
總結
以上是生活随笔為你收集整理的【scikit-learn基础】--『监督学习』之 支持向量机回归的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试官:做过支付资产?那先聊聊热点账户吧
- 下一篇: 『Flutter』开发环境搭建