sklearn svm如何选择核函数_机器学习之支持向量机多种核模型对比
機器學習
xueyifeiyun1989zx,公眾號:圍著圍巾的小黑機器學習之監督學習實戰????????前文我們提到機器學習中的監督學習,其中有一個模型是我們提到的但是沒有訓練測試的,叫做支持向量機(簡稱SVM)。支持向量機也是監督學習里面一個非常容易理解的模型。概念和公式定義我們就不帶大家看了,我們還是從代碼實戰的角度來學習。
??????? SVM本質原理是利用超平面將數據分割成可分的部分,對于可分的數據集來說不用做維度轉換,那么對于不可分的數據集要想利用SVM怎么辦呢,是有辦法的,就是核函數。核函數的存在的意義就是將低維不可分的數據轉化成高維可分的數據,從而實現對數據的分類。本文主要關注不同SVM中的核函數,因為我們主要是應用為主,所以只會提高各種核函數并做相關的代碼實踐,不會對各種核函數的原理進行分析。
????????另外還有一個問題是需要在本文解決的,大家如果前文仔細看的話,會發現在整個訓練和預測的過程中,我們生成了兩個數據集,操作起來有點麻煩,那么是否有現成的方法可以自動幫我們將數據集切分成訓練集和測試集呢,答案顯然是肯定的。
1、導入依賴包、生成基礎數據集
from sklearn.datasets import make_classificationimport matplotlib.pyplot as pltfrom sklearn import preprocessingfrom sklearn.model_selection import train_test_splitfrom sklearn.svm import SVCfrom sklearn.metrics import accuracy_scoreimport matplotlib.pyplot as pltimport mpl_toolkits.mplot3d# 生成基礎特征數據,該數據包含100條記錄,每條記錄包含兩個特征X,y = make_classification(n_samples = 10000,\n_features = 3,n_redundant = 0,n_repeated = 0)2、對數據集合進行拆分和模型訓練
#?生成訓練集和測試集train_x,test_x,train_y,test_y = train_test_split(X,y)#?選擇linear核函數,在sklearn中,其模型默認的核函數的rbfsvm = SVC(kernel = 'linear')svm.fit(train_x,train_y)3、模型預測
# 在訓練集上預測predict_train = svm.predict(train_x)#?在訓練集上準確率accuracy_score(train_y,predict_train)# 0.8693#?在測試集上預測predict_test = svm.predict(test_x)#?在測試集上準確率accuracy_score(test_y,predict_test)# 0.85734、模型可視化
# 分別生成預測正確的和預測錯誤的數據集合predictTure = test_x[test_y == predict_test]predictFalse?=?test_x[test_y?!=?predict_test]#?定義一個畫圖的方法,輸入的參數為預測正確和預測錯誤的數據集合def plot3DPredictStatus(predictTure,predictFalse): # 創建一個三維的繪圖工程 ax = plt.subplot(projection = '3d') # 設置圖名稱 ax.set_title('3d_predict_show') # 繪制數據點 color: 'r'紅色,'b'藍色等顏色 # x代表預測錯誤的數據 ,o代表預測正確的數據 ax.scatter(predictTure[:,0], \ predictTure[:,1], predictTure[:,2],\ c = 'r',marker = 'o',cmap = 'coolwarm') ax.scatter(predictFalse[:,0],\ predictFalse[:,1], predictFalse[:,2], \ c = 'b',marker = 'x',cmap = 'coolwarm') # 設置x坐標軸 ax.set_xlabel('X') # 設置y坐標軸 ax.set_ylabel('Y') # 設置z坐標軸 ax.set_zlabel('Z') # 畫圖 ????plt.show()# 畫圖函數調用plot3DPredictStatus(predictTure,predictFalse)圖、在預測集上正確的點(紅色)和錯誤(藍色)的點
5、對比不同核函數的效果
????????通過查看sklearn的SVM相關的參數說明(如下圖),知道其至少提供linear、poly、rbf、sigmod、precomputed等核函數。
圖、sklearn中SVM相關的核函數類型說明
#?定義模擬多個核函數的方法def?multkernelCompare(): print('{:>10s}|{:8s}'.format('kernel','accuracy')) for kernel in ['linear','poly','rbf','sigmoid']:????????svm?=?SVC(kernel?=?kernel) svm.fit(train_x,train_y) accuracy =accuracy_score(test_y,svm.predict(test_x)) print('{:>10s}|{:8.4f}'.format(kernel,accuracy))#?不同核函數對比方法調用multkernelCompare()圖、不同核函數預測結果的準確性對比
總結
以上是生活随笔為你收集整理的sklearn svm如何选择核函数_机器学习之支持向量机多种核模型对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 西藏桑黄的功效与作用、禁忌和食用方法
- 下一篇: python数据收集整理教案_数据收集整