我希望有人能解釋我,如果我在正確的方式。我試圖瞭解一些關於圖像檢索和SVM的內容,但這只是有點令人困惑。我會通過發佈源代碼來問我的問題。SVM,測試,學習,篩選和k-means /病房分類
首先我有一個貓的數據集。對於每個「貓」圖片,我使用篩選算法(vlfeat)獲取描述符。我將所有描述符(從每張圖片)一起放入一個列表中,並通過使用k-means(我選擇k=3
)嘗試並繪製結果來找出所有描述符的聚類。
問題1:是否有「終端方式」來查看我是否選擇了一個好的k?因爲繪製一個包含50張貓圖片的128維描述符集需要很長時間。
問題2:我正在做list.append(hstack((loc,des)))
的位置和描述符。這是正確的方式還是應該只採用描述符?
def get_features(datas):
list = []
for data in datas:
loc,des = vlfeat_module.vlf_create_desc(data,'tmp.sift')
list.append(hstack((loc,des)))
desc = numpy.vstack(list)
center,_ = kmeans(desc, 3)
return center
得到中心後,我做了3×128尺寸的描述,看起來像這樣的* .sparse文件:
1 1:333.756498151 2:241.935029943...
1 1:806.715774779 2:1134.68287451...
....
與貓的圖片此過程後,我重複這與「無 - 貓圖片」,並獲得* .sparse文件看起來像這樣:
0 1:101.905620535 2:250.9213760...
0 1:223.619957204 2:509.303625427...
...
我把兩個* .sparse文件組合在一起,並與SVM開始訓練(我想我開始^^)
X_train, y_train = load_svmlight_file("./svm_files/cats_nonecats.sparse")
clf = svm.NuSVC(gamma=0.07,verbose=True)
clf.fit(X_train,y_train)
pred = clf.predict(X_train)
accuracy_score(y_train, pred)
我得到這樣的結果:
[LibSVM]*
optimization finished, #iter = 4
C = 2.000000
obj = 5.000000, rho = 0.000000
nSV = 10, nBSV = 0
Total nSV = 10
NuSVC(cache_size=200, coef0=0.0, degree=3, gamma=0.07, kernel=rbf,
max_iter=-1, nu=0.5, probability=False, shrinking=True, tol=0.001,
verbose=True)
1.0
我不認爲這是正確的,所以也許有人可以解釋我自己的錯誤。 下一個問題:這是「培訓?」還是我重複過10次?分類器現在可以識別貓嗎?
謝謝你的一些答案。
問候,
琳達
編輯
嗯,我會盡力解釋我做了什麼現在。我希望現在是正確的。
1. split my data into test and training data
2. get all destrictors from training/test data
3. create centers with (k-means) from training data
4. get all histogram-vectors from descriptors of the training data
5. create a sparse file from the histogramm vector
6. feed this sparse file to the svm
有些錯誤?
編輯第二部分:
我已經更新了照片的數量...但我有一些更多的問題。 「np.bincount +除以總和」是什麼意思?如果我有像這樣的直方圖[120,0,300,80],那麼我必須將這些值除以一張圖片的描述符之和?也許是這樣? [120/500,0/500,300/500。 80/500]?有沒有一種很好的方法來計算k-means的k值?因爲500之間的100也許是貓的正確答案,但如果我想要學習我的分類器來識別狗,該怎麼辦? k會是另一個?!
謝謝
安德烈亞斯說:「你測試你的方法對培訓設置了完美的結果 - 告訴你什麼。」 這告訴你一件事:該模型有足夠的表現力來避免不合適(偏差太大)。但它沒有告訴你關於模型對新數據的預測能力(泛化),這是預測建模的主要目標。 – ogrisel
你是對的。但是用那麼少的訓練數據,說你可以完美分類並不多說;) –