基於SVM的分類器Python實現

2022-03-09 18:14:40 字數 3609 閱讀 5146

本文**來之《資料分析與挖掘實戰》,在此基礎上補充完善了一下~

**是基於svm的分類器python實現,原文章節題目和code關係不大,或者說給出已處理好資料的方法缺失、源是影象資料更是不見蹤影,一句話就是練習分類器(▼㉨▼メ)

源**直接給好了k=30,就試了試怎麼選的,挑選規則設定比較單一,有好主意請不吝賜教喲

1

#-*- coding: utf-8 -*-

2"""

3created on sun aug 12 12:19:34 201845

@author: luove

6"""

7from sklearn import

svm8

from sklearn import

metrics

9import

pandas as pd

10import

numpy as np

11from numpy.random import

shuffle12#

from random import seed13#

import pickle #儲存模型和載入模型

14import

os15

1617

os.getcwd()

18 os.chdir('

d:/analyze/python matlab/python/bookcodes/python資料分析與挖掘實戰/圖書配套資料、**/chapter9/demo/code')

19 inputfile = '

../data/moment.csv

'20 data=pd.read_csv(inputfile)

2122

data.head()

23 data=data.as_matrix()24#

seed(10)

25 shuffle(data) #

隨機重排,按列,同列重排,因是隨機的每次運算會導致結果有差異,可在之前設定seed

26 n=0.8

27 train=data[:int(n*len(data)),:]

28 test=data[int(n*len(data)):,:]

2930

#建模資料 整理31#

k=30

32 m=100

33 record=pd.dataframe(columns=['

acurrary_train

','acurrary_test

'])

34for k in range(1,m+1):35#

k特徵擴大倍數,特徵值在0-1之間,彼此區分度太小,擴大以提高區分度和準確率

36 x_train=train[:,2:]*k

37 y_train=train[:,0].astype(int)

38 x_test=test[:,2:]*k

39 y_test=test[:,0].astype(int)

4041 model=svm.svc()

42model.fit(x_train,y_train)43#

pickle.dump(model,open('../tmp/svm1.model','wb'))#儲存模型44#

model=pickle.load(open('../tmp/svm1.model','rb'))#載入模型45#

模型評價 混淆矩陣

46 cm_train=metrics.confusion_matrix(y_train,model.predict(x_train))

47 cm_test=metrics.confusion_matrix(y_test,model.predict(x_test))

4849 pd.dataframe(cm_train,index=range(1,6),columns=range(1,6))

50 accurary_train=np.trace(cm_train)/cm_train.sum() #

準確率計算51#

accurary_train=model.score(x_train,y_train) #使用model自帶的方法求準確率

52 pd.dataframe(cm_test,index=range(1,6),columns=range(1,6))

53 accurary_test=np.trace(cm_test)/cm_test.sum()

accurary_train

','accurary_test

']).t)

5556 record.index=range(1,m+1)

57 find_k=record.sort_values(by=['

accurary_train

','accurary_test

'],ascending=false) #

生成乙個copy 不改變原變數

58 find_k[(find_k['

accurary_train

']>0.95) & (find_k['

accurary_test

']>0.95) & (find_k['

accurary_test

']>=find_k['

accurary_train

'])]59#

len(find_k[(find_k['accurary_train']>0.95) & (find_k['accurary_test']>0.95)])

60'''

k=33

61accurary_train accurary_test

6233 0.950617 0.95122

63'''

64'''

計算一下整體

65accurary_data

660.95073891625615758

67'''

68 k=33

69 x_train=train[:,2:]*k

70 y_train=train[:,0].astype(int)

71 model=svm.svc()

72model.fit(x_train,y_train)

73model.score(x_train,y_train)

74model.score(datax_train,datay_train)

75 datax_train=data[:,2:]*k

76 datay_train=data[:,0].astype(int)

77 cm_data=metrics.confusion_matrix(datay_train,model.predict(datax_train))

78 pd.dataframe(cm_data,index=range(1,6),columns=range(1,6))

79 accurary_data=np.trace(cm_data)/cm_data.sum()

80 accurary_data

ref:

《資料分析與挖掘實戰》

源**及資料需要可自取:

基於SVM分類器的動作識別系統

摘 要 動作識別領域近年來隨著動作採集技術的成熟而高速發展,因其無需借助任何 計算機系統的傳統輸入裝置就能夠準確識別出使用者意圖,對三維動作資料進行資料 處理與挖掘的技術,現已廣泛運用到了計算機動畫 遊戲 新型人機互動和智慧型家居控制等領域。支援向量機 support vector machine,...

文字分類的python實現 基於SVM演算法

svc的懲罰引數c 預設值是1.0。c越大,對誤分類的懲罰增大,趨向於對訓練集全分對的情況,這樣對訓練集測試時準確率很高,但泛化能力弱。c值小,對誤分類的懲罰減小,允許容錯,泛化能力較強。儘管tf idf權重有著非常廣泛的應用,但並不是所有的文字權重採用tf idf都會有較好的效能。在有些問題上,採...

基於SVM的人臉識別分類

from future import print function future 模組,把下乙個新版本的特性匯入到當前版本,於是我們就可以在當前版本中測試一些新版本的特性 我的python版本是3.6.4.所以不需要這個 from time import time 對程式執行時間計時用的 impor...