python中支持向量机机器学习分类报告测试集的错误

python中支持向量机机器学习分类报告测试集的错误,python,machine-learning,scikit-learn,svm,Python,Machine Learning,Scikit Learn,Svm,我将数据分为测试集和训练集,这两个集的目标值分别为“0”和“1”。但在使用SVM进行拟合和预测后,分类报告表明测试样本中存在零“0”,这是不真实的 from sklearn.datasets import load_breast_cancer data = load_breast_cancer() df = pd.DataFrame(data = data['data'],columns=data['feature_names']) x = df y = data['target'] xtrai

我将数据分为测试集和训练集,这两个集的目标值分别为“0”和“1”。但在使用SVM进行拟合和预测后,分类报告表明测试样本中存在零“0”,这是不真实的

from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()
df = pd.DataFrame(data = data['data'],columns=data['feature_names'])
x = df
y = data['target']
xtrain,xtest,ytrain,ytest 
= train_test_split(x,y,test_size=0.3,random_state=42)
正如您在下面看到的,测试有0和1,但是分类报告中的支持声明没有0

!!()

(在示例中包含相关代码总是一个好主意,而在图像中不包含相关代码)

分类报告指出,测试样本中有零个“0”,这是不正确的

from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()
df = pd.DataFrame(data = data['data'],columns=data['feature_names'])
x = df
y = data['target']
xtrain,xtest,ytrain,ytest 
= train_test_split(x,y,test_size=0.3,random_state=42)
这是因为,从链接图像中的代码可以看出,您已经切换了
classification_报告中的参数
;您使用了:

print(classification_report(pred, ytest)) # wrong order of arguments
这确实给了:

             precision    recall  f1-score   support

    class 0       0.00      0.00      0.00         0
    class 1       1.00      0.63      0.77       171

avg / total       1.00      0.63      0.77       171
但是正确的用法是

             precision    recall  f1-score   support

    class 0       0.00      0.00      0.00        63
    class 1       0.63      1.00      0.77       108

avg / total       0.40      0.63      0.49       171
以及以下警告消息:

C:\Users\Root\Anaconda3\envs\tensorflow1\lib\site packages\sklearn\metrics\classification.py:1135: 未定义的度量警告:精度和F分数定义不清且 在没有预测样本的标签中设置为0.0。”精度', “预测”、平均、警告(针对)

因为,正如评论中已经指出的,您预测的只有1:

pred
# result:
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
原因是另一个故事,而不是当前问题的一部分

以下是上述内容的完整可复制代码:

from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer

X, y = load_breast_cancer(return_X_y=True)
xtrain,xtest,ytrain,ytest = train_test_split(X,y,test_size=0.3,random_state=42)

from sklearn.svm import SVC
svc=SVC()
svc.fit(xtrain, ytrain)
pred = svc.predict(xtest)

print(classification_report(ytest, pred))

train\u test\u split()没有问题。
。它只是说你的SVM没有预测任何0。我想在训练期间出了点问题。你能分享你的代码和可能的数据吗?你需要展示你是如何训练它的,否则,很难弄清楚发生了什么。我现在已经编辑了代码。这是sklearn数据集中的乳腺癌数据集。其余的训练代码都在图片中,就这样!谢谢非常感谢你!下次我会记住你的建议!!:D