SVC python输出为每个使用的C或伽马显示相同的“ 1”值

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?