0
我是scikitlearn lib的新手。我正在使用SVM雙類來進行模式分類。 我的數據集包含1000個樣本(每班500個),但特徵數非常高(3000)。爲什麼支持向量在支持向量機中不會改變?
我把數據集分成3部分:trainset800個樣本,validset100個樣本和測試集是100個樣本。
我使用這個代碼:
class1=numpy.genfromtxt("class1.csv",delimiter=',');
class2=numpy.genfromtxt("class2.csv",delimiter=',');
trainset=numpy.concatenate((class1[0:400,:],class2[0:400,:]));
validset=numpy.concatenate((class1[400:450,:],class2[400:450,:]))
testset=numpy.concatenate((class1[450:500,:],class2[450:500,:]))
targettrain=numpy.reshape(numpy.concatenate((numpy.ones((1,400)),numpy.ones((1,400))*2)),(800,));
targetvalid=numpy.reshape(numpy.concatenate((numpy.ones((1,50)),numpy.ones((1,50))*2)),(100,));
targettest=numpy.reshape(numpy.concatenate((numpy.ones((1,50)),numpy.ones((1,50))*2)),(100,));
clf=SVC();
clf.fit(trainset,targettrain);
SVC(C=1,cache_size=200, class_weight=None,coef0=0.0,decision_function_shape=None,degree=3,gamma=.1,kernel='rbf',
max_iter=-1,probability=False,random_state=None,shrinking=True,tol=0.001,verbose=False);
print clf.score(validset,targetvalid)
print clf.n_support_
這裏是我的數據data class1 and class2 我此話是向量的支持數當我改變伽馬或C. 支持向量也不會改變總是[270 268 ]。 意義是什麼?它是一個詛咒維度的問題嗎?我讀過SVM即使數據具有高維度也可以工作嗎?
我不能使用你提供的數據重現此支持向量的數量按預期變化。你能準確地展示你如何生成trainset和targettrain嗎? –
@ali_m,我編輯了我的代碼。 – Jeanne
我仍然無法用上面的確切代碼重現您所看到的內容。例如,如果我使用'clf = SVC(C = 1)'(默認)進行初始化,則在調用'clf.fit(trainset)後,我會看到'clf.n_support_ == array([270,268],dtype = int32) ,targettrain)'。如果我使用'clf = SVC(C = 0.1)'初始化,我看到'clf.n_support_ == array([371,367],dtype = int32)''。同樣,改變'gamma'也會改變支持向量的數量。你試過了什麼'C'和'gamma'的值?也許你沒有改變它們(嘗試改變它們至少一個數量級)。 –