SVM解決兵王問題

2021-10-25 08:50:35 字數 3179 閱讀 1918

前六列代表乙個卒和兩個國外所在的位置(特徵值)

最後一列draw代表和棋,其他代表只需對應的步數必然會分出勝負(目標值)

總樣本數28056,其中正樣本2796,負樣本25260。隨機取5000個樣本訓練,其餘測試。

樣本標準化,在訓練樣本上,求出每個維度的均值和方差,在訓練和測試樣本上同時標準化。

高斯核:

cscale= [2 ^ (-5), 2 ^ 15]; gamma = [2 ^ (-15), 2 ^ 3];

遍歷求識別率的最大值(利用網格搜尋)。

import pandas as pd

from sklearn.preprocessing import standardscaler

from sklearn.model_selection import train_test_split,gridsearchcv

from sklearn.metrics import classification_report

from sklearn.svm import svc

defsvm_test()

:# 讀取資料

data = pd.read_csv(

"./krkopt.data"

)# 刪除無效行

data = data.dropna(axis=0)

# 輸出資料的基本資訊

# print(data.info())

# 資料處理(使其滿足特徵處理的要求)

data[

"draw"

].replace(

"draw",1

,inplace=

true

) data.draw[data[

"draw"]!=

1]=-

1 data.replace(

"a",

1, inplace=

true

) data.replace(

"b",

2, inplace=

true

) data.replace(

"c",

3, inplace=

true

) data.replace(

"d",

4, inplace=

true

) data.replace(

"e",

5, inplace=

true

) data.replace(

"f",

6, inplace=

true

) data.replace(

"g",

7, inplace=

true

) data.replace(

"h",

8, inplace=

true

) data[

"1"]

= data[

"1"]

.astype(

int)

data[

"2"]

= data[

"2"]

.astype(

int)

data[

"3"]

= data[

"3"]

.astype(

int)

# 分離特徵值和目標值

x = data.iloc[:,

0:6]

y = data[

"draw"

]# 分割訓練集和測試集

x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=

0.75

)# 特徵預處理-特徵工程(標準化)

std = standardscaler(

) x_train = std.fit_transform(x_train)

x_test = std.transform(x_test)

# 用svm訓練資料集

svm_svc = svc(kernel=

'rbf'

)# 設定引數的取值用於網格搜尋

ga_param =[2

**i for i in

range(-

5,15)

] c_param =[2

**i for i in

range(-

15,3)

]# ga_param = [0.0825]

# c_param = [16]

param =

# 設定網格搜尋的引數和5折交叉驗證

gc = gridsearchcv(svm_svc, param_grid=param, cv=5)

# 進行訓練

gc.fit(x_train,y_train)

# 檢視**結果

y_predict = gc.predict(x_test)

# 準確率和召回率

print

(classification_report(y_test,y_predict)

)# **準確率

print

("在測試集上準確率: "

,gc.score(x_test,y_test)

)print

("在交叉驗證當中最好的結果: "

,gc.best_score_)

print

("選擇最好的模型是: "

,gc.best_estimator_)

print

("每個超引數每次交叉驗證的結果: "

,gc.cv_results_)

return

none

if __name__==

"__main__"

: svm_test(

)

svm 問題整理

答 幾何間隔與樣本的誤分次數間存在關係 其中的分母就是樣本到分類間隔距離,分子中的r是所有樣本中的最長向量值 答 會,超平面會靠近樣本少的類別。因為使用的是軟間隔分類,而如果對所有類別都是使用同樣的懲罰係數,則由於優化目標裡面有最小化懲罰量,所以靠近少數樣本時,其懲罰量會少一些。比如 假設理想的分隔...

SVM相關問題

應聘資料探勘工程師或機器學習工程師,面試官經常會考量面試者對svm的理解。以下是我自己在準備面試過程中,基於個人理解,總結的一些svm面試常考問題 想到會再更新 如有錯漏,請批評指正。大神請忽視 svm的原理是什麼?svm是一種二類分類模型。它的基本模型是在特徵空間中尋找間隔最大化的分離超平面的線性...

SVM相關問題

1.為什麼要通過求解與原問題等價的對偶問題 dual problem 來得到原問題的解?原因主要有 1 對偶問題更容易求解 2 在對偶問題下可以很容易引入核函式,進而擴充套件到線性不可分的場景。詳見 理解svm的三層境界 2.lagrange duality與wolfe duality的區別何在?常...