在 SVC 中出现 ValueError

Posted

技术标签:

【中文标题】在 SVC 中出现 ValueError【英文标题】:ValueError while in SVC 【发布时间】:2018-09-03 23:28:24 【问题描述】:

这是一个包含 10 个特征和一个类别的癌症数据集。

 X=df.iloc[:,1:10].values
 y=df.iloc[:,[-1]].values
from sklearn.preprocessing import Imputer
imputer=Imputer(missing_values='NaN',strategy='mean',axis=1)
imputer=imputer.fit(X)
X=imputer.transform(X)

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=0)

from sklearn.svm import SVC
classifier=SVC (kernel='rbf',random_state=0)
classifier.fit(X_train,y_train)
y_pred=classifier.predict(y_test)

当我执行这个时,我得到

ValueError: X.shape[1] = 1 should be equal to 9, the number of features at training time

【问题讨论】:

【参考方案1】:

您的错误是由以下行引起的,您在其中传递了y_test 而不是X_test

classifier.predict(y_test)

完整代码:

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import Imputer
from sklearn.svm import SVC


data = load_breast_cancer()
df = pd.DataFrame(data.data, columns=data.feature_names)

X=df.iloc[:,1:10]
y = data.target

imputer=Imputer(strategy='mean',axis=1)
X = imputer.fit_transform(X)

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=0)

clf = SVC(kernel='rbf').fit(X_train, y_train)


y_pred=clf.predict(X_test)
print(clf.score(X_test, y_test))

产量:

0.6842105263157895

【讨论】:

我预测的是 y_test 而不是 X_test。使用 gamma=0.01,C=1,你会得到很好的准确度。如果你得到了,请告诉我 @Anesh,对不起,我不明白。 y_test - 是你的结果(基本正确) - 它不能用于预测。它用于检查(评分)... 'y_pred=clf.predict(y_test)' 我用这个代替 X_test。那是它显示错误。我得到了 96% 的 gamma-0.01 C:1 random_state=0 @Anesh,啊,我找到你了。是的,我没有调整超参数...我们可以使用 GridSearchCV 进行调整... Yesss.GridSearchCV 是最好的。

以上是关于在 SVC 中出现 ValueError的主要内容,如果未能解决你的问题,请参考以下文章

svc是啥意思

SVC 工作过程中出现的错误记录(SEO项目)

sklearn.SVC 中的独立 SVC 行是做啥的?

为啥 SVC 在输出中重复它的参数

在 IIS 中访问 .svc 文件时出现 HTTP 404

windows server 2008 w3svc服务无法启动,错误 1068依赖服务或组件无法启动