本文**來之《資料分析與挖掘實戰》,在此基礎上補充完善了一下~
**是基於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...