我是scikitlearn lib的新手。我正在使用SVM双类进行模式分类。 我的数据集包含1000个样本(按类别分列500个),但是数量非常高(3000)。
我将数据集分为3个部分:trainset 800个样本,validset 100个样本,测试集为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即使对于具有高维数的数据也可以工作?
答案 0 :(得分:2)
看起来好像在这一行:
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);
您正在尝试为已经实例化的clf
分类器设置参数。但是,实际上这样做是为了创建一个未绑定到任何变量名的 new SVC
实例。因此,该行对clf
的行为没有影响。
第二个问题是你在训练数据上已经调用了.fit
之后尝试更改参数,这实际上没有任何意义。
当你第一次实例化clf
时,你应该做的是传递你想要的一组参数:
clf = 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);
clf.fit(trainset,targettrain) # etc.