如何解决SVC python输出为每个使用的C或伽马显示相同的“ 1”值
这是代码:
import numpy as np
from sklearn import svm
numere=np.fromfile("sat.trn",dtype=int,count=-1,sep=" ")
numereTest=np.fromfile("sat.tst",sep=" ")
numere=numere.reshape(int(len(numere)/37),37)
numereTest=numereTest.reshape(int(len(numereTest)/37),37)
etichete=numere[0:int(len(numere)),36]
eticheteTest=numereTest[0:int(len(numereTest)),36]
numere=np.delete(numere,36,1)
numereTest=np.delete(numereTest,1)
clf=svm.SVC(kernel='rbf',C=1,gamma=1)
clf.fit(numere,etichete)
predictie=clf.predict(numereTest)
我从具有全部内容的文件中获取了数据,然后我用它们制作了2个np.arrays,但是输出是我所做的一切1。
numere(:10)-> array([[92,115,120,94,84,102,106,79,84,102,102,83,101, 126、133、103、92、112、118、85、84、103、104、81、102、126, 134,104,88,121,128,100,84,107,113,87], [84,102,106,79,84,102,102,83,80,102,102,79,92, 112、118、85、84、103、104、81、84、99、104、78、88、121, 128、100、84、107、113、87、84、99、104、79], [84,102,102,83,80,102,102,79,84,94,102,79,84, 103、104、81、84、99、104、78、84、99、104、81、84、107, 113、87、84、99、104、79、84、99、104、79], [80,102,102,79,84,94,102,79,80,94,98,76,84, 99、104、78、84、99、104、81、76、99、104、81、84、99, 104、79、84、99、104、79、84、103、104、79], [84,94,102,79,80,94,98,76,80,102,102,79,84, 99、104、81、76、99、104、81、76、99、108、85、84、99, 104、79、84、103、104、79、79、107、109、87], [80,94,98,76,80,102,102,79,76,102,102,79,76, 99、104、81、76、99、108、85、76、103、118、88、84、103, 104、79、79、107、109、87、79、107、109、87], [76,102,106,83,76,102,106,87,80,98,106,79,80, 107、118、88、80、112、118、88、80、107、113、85、79、107, 113、87、79、103、104、83、79、103、104、79], [76,102,106,87,80,98,106,79,76,94,102,76,80, 112、118、88、80、107、113、85、80、95、100、78、79、103, 104、83、79、103、104、79、79、95、100、79], [76,89,98,76,76,94,98,76,76,98,102,72,80, 95、104、74、76、91、104、74、76、95、100、78、75、91, [96,75,75,91,96,71,79,87,93,71], [76,94,98,76,76,98,102,72,76,94,90,76,76, 91、104、74、76、95、100、78、76、91、100、74、75、91, 96,71,79,87,93,71,79,87,93,67]])
解决方法
好的,所以您得到的最可能的原因是:
首先,您不对数据进行缩放,请尝试使用standard scaler。
scaler = StandardScaler()
scaler.fit(numere)
numere = scaler.transform(numere)
numereTest = scaler.transform(numereTest)
第二,您不调整参数,需要选择最合适的参数,我强烈建议使用grid search。您可以找到一个示例here的用法。网格搜索非常适合参数调整,但请注意不要在此数据集中使用交叉验证,这是其创建者的建议:) Gamma和C可以从非常低的十进制数到非常高的数取宽值,您无法测试手动正确地
编辑:您不应该使用CV,因此这是进行网格搜索的更好方法
grid = { #edit ´this with more values
'gamma': [0.001,0.1,10,100,1000,],'C': [1,100]
}
for g in ParameterGrid(grid):
clf.set_params(**g)
clf.fit(numere,etichete)
# save if best
score = clf.score(numereTest,eticheteTest)
if score > best_score:
best_score = score
best_grid = g
print ("best score:",best_score)
print ("Grid:",best_grid)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。