12000條資料sklearn機器學習模型調參記錄

2021-10-03 03:16:24 字數 3946 閱讀 4772

資料集是來自24個類別的12000條資料,每條資料提取特徵後生成1000多維的01特徵向量,資料的標籤是24個類別,每個類別有500條資料。

該圖展示的是一條資料的儲存檔案截圖,問號的位置就是1,空白的位置就是0,資料採用.npy檔案儲存。

from sklearn import svm

#使用sklearn包中的機器學習演算法,此處寫的是svm,測試過程中根據演算法需要進行更改

import os

import numpy as np

tx=[

]#測試集資料

ty=[

]#測試集標籤x=[

]#訓練集資料y=[

]#訓練集標籤

path=

'c:\\users\\desktop\\datas'

#資料存放路徑:datas資料夾下有24個子資料夾,每個子資料夾內有500個資料檔案

for f in os.listdir(path)

: i=

0#i用來記錄資料集讀取的個數,我們手動選擇了每個類別內50個資料作為測試集,剩餘450條資料集

for d in os.listdir(os.path.join(path,f)):

t=np.load(os.path.join(path,f,d)

)#每條資料採用npy檔案存放,該步驟將資料讀取出來

if i<50:

i+=1elif i>=

50and i<

100:

#將每個類別第50-第100個資料作為測試集

i+=1elif i>=

100:

clf = svm.linearsvc(c =

0.3,tol =

0.0001

)#該步驟選用機器學習演算法並設定機器學習引數

clf.fit(x,y)

#進行模型訓練

print

(clf.score(tx,ty)

)#輸出測試結果

想要修改機器學習方演算法和機器學習演算法的引數,只需要修改sklearn匯入的演算法以及下面這條語句:

clf = svm.linearsvc(c =

0.3,tol =

0.0001

)

1、svc函式

clf = svm.svc(c = 10,tol = 0.001, cache_size = 300)

測試結果:0.301666666667(即30.17%的準確率)

clf = svm.svc(c =12,tol = 0.001, cache_size = 300)

測試結果:0.301666666667(無變化)

clf = svm.svc(c =8,tol = 0.001, cache_size = 300)

測試結果:0.3025(略微提高)

clf = svm.svc(c =6,tol = 0.001, cache_size = 300)

測試結果:0.301666666667(和c=10時相同)

clf = svm.svc(c = 8,tol =0.0005, cache_size = 300)

測試結果:0.3025(和tol=0.001時無變化)

clf = svm.svc(c = 8,tol =0.003, cache_size = 300)

測試結果:0.303333333333

clf = svm.svc(c = 8,tol =0.01, cache_size = 300)

測試結果:0.303333333333

clf = svm.svc(c = 8,tol = 0.01, cache_size = 300,kernel=『linear』)

測試結果:0.281666666667

clf = svm.svc(c = 8,tol = 0.01, cache_size = 300,kernel=』』)

測試結果:0.303333333333

2、linearsvc函式

clf = svm.linearsvc(c =0.3,tol = 0.0001)

測試結果:0.263333333333

clf = svm.linearsvc(c =0.1,tol = 0.0001)

測試結果:0.270833333333

clf = svm.linearsvc(c =0.1,tol =0.0005)

測試結果:0.270833333333

clf = svm.linearsvc(c =0.1,tol =0.00005)

測試結果:0.270833333333

clf = kneighborsclassifier()

測試結果:0.165

clf = logisticregression()

測試結果:0.279166666667

clf = logisticregression(c=10)

測試結果:0.265

clf = randomforestclassifier()

測試結果:0.233333333333

clf = randomforestclassifier(n_estimators=20)

測試結果:0.2325

clf = randomforestclassifier(n_estimators=80)

測試結果:0.256666666667

clf = randomforestclassifier(n_estimators=150)

測試結果:0.288333333333

clf = randomforestclassifier(n_estimators=180)

測試結果:0.269166666667

clf = tree.decisiontreeclassifier()

測試結果:0.168333333333

clf = gradientboostingclassifier(n_estimators=200)

測試結果:0.325

clf = gradientboostingclassifier()(預設值n_estimators=100

測試結果:0.314166666667

clf = lineardiscriminantanalysis()

測試結果:0.31

clf = quadraticdiscriminantanalysis()

測試結果:0.123333333333

clf = multinomialnb()(預設值alpha=1)

測試結果:0.196666666667

clf = multinomialnb(alpha=5)

測試結果:0.198333333333(基本無變化)

一、特徵提取不到位

通過測試結果可以發現,24個類別的分類準確率最高也就在百分之30左右,說明問題並不在於使用哪種機器學習演算法,而是我們提取的特徵不足以充分體現每個類別的特點,因此我們需要對特徵的提取進行修改。

二、機器學習演算法之間存在明顯差異

從測試結果我們可以看到,同樣的資料集和測試集,使用不同機器學習演算法準確率差異較大,因此我們在選擇機器學習演算法時,一定要有所依據,或者是多嘗試一些演算法進行比較。同時我們也發現當我們使用同乙個機器學習演算法的不同引數時,最終的測試結果相差較小,這也提醒我們不必再一些小的引數上花費過多的時間

完美排序10000條資料

看到一道面試題 有 10000 個子元素,如何將這 10000 個顛倒順序。要求是效率盡量要高。不光是演算法效率,還要考慮dom元素操作的效率。大家有什麼想法?還有就是遇到類似這種問題解題技巧?答 以下利用了css3旋轉屬性,將li翻轉,同時再ul翻轉。完美的倒排!出自 doctype html h...

sql取前20條資料的後10條資料(通用)

sql在沒有id主鍵或單一主鍵 即組合主鍵或沒有主鍵的情況 如何取前20條資料的後10條資料,一般通用的方法仍是用臨時表,效率一般,但比較通用,在各種情況下均可用此方法.由此也可衍生出sql的分頁儲存過程,尤其適合經常對不同表的資料進行分頁,格外適用.當然,方法並非這一種,具體視不同情況設計最優的s...

ajax 刪除一條資料

對這一段話的理解 先找到需要刪除的節點,以及節點裡的文字 用 ajax 傳送請求,請求方式為 post 請求內容為需要刪除記錄的檔案,datatype 定義資料型別 json 通常都是 json data name sname,是要刪除 name 屬性為sname 的那一條資訊 success fu...