資料集是來自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...