Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么SVM predict()函数会出错?_Python_Numpy_Scikit Learn_Svm - Fatal编程技术网

Python 为什么SVM predict()函数会出错?

Python 为什么SVM predict()函数会出错?,python,numpy,scikit-learn,svm,Python,Numpy,Scikit Learn,Svm,为预测设计了一个简单的SVM算法: 我收到的代码错误如下: 分数计算正确,但当我尝试传递要预测的值时,model.predict()函数出现错误。我想不出这个问题。试图进行分类,但未找到任何相关信息 import pandas as pd import pylab as pl import numpy as np import scipy.optimize as opt from sklearn import preprocessing from sklearn.model_selection

为预测设计了一个简单的SVM算法:

我收到的代码错误如下:
分数计算正确,但当我尝试传递要预测的值时,
model.predict()
函数出现错误。我想不出这个问题。试图进行分类,但未找到任何相关信息

import pandas as pd
import pylab as pl
import numpy as np
import scipy.optimize as opt
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
%matplotlib inline 
import matplotlib.pyplot as plt

data = pd.read_csv(r'C:\Users\Imad\Desktop\New folder\cars.csv')

from sklearn.preprocessing import LabelEncoder

data.columns

Index(['buying', 'maint', 'doors', 'persons', 'lug_boot', 'safety', 
'car'], dtype='object')

buying_1=LabelEncoder()
maint_1=LabelEncoder()
doors_1=LabelEncoder()
persons_1=LabelEncoder()
lug_boot_1=LabelEncoder()
safety_1=LabelEncoder()
car_1=LabelEncoder()

data['buying_n'] = buying_1.fit_transform(data['buying'])
data['maint_n'] = maint_1.fit_transform(data['maint'])
data['door_n'] = doors_1.fit_transform(data['doors'])
data['persons_n'] = persons_1.fit_transform(data['persons'])
data['lug_boot_n'] = lug_boot_1.fit_transform(data['lug_boot'])
data['safety_n'] = safety_1.fit_transform(data['safety'])
data['car_n'] = car_1.fit_transform(data['car'])

inputs = data.drop(['buying', 'maint', 'doors', 'persons', 'lug_boot', ' 
safety', 'car'], axis = 'columns')
target = data['buying_n']

X = np.asarray(inputs)

y = np.asarray(target)

X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, 
random_state= 20)
print ('Train set:', X_train.shape,  y_train.shape)
print ('Test set:', X_test.shape,  y_test.shape)
Train set: (1382, 7) (1382,)
Test set: (346, 7) (346,)


from sklearn.svm import SVC
model = SVC(C = 2, gamma=3, random_state=5)
model.fit(X_train, y_train)


model.score(X_test,y_test)
0.9884393063583815

model.predict([[3,3,2,2,1,2]])

ValueError回溯(最近的调用)
最后)
在里面
---->1模型预测([[3,3,2,2,1,2]]
预测中的~\Anaconda3\lib\site packages\sklearn\svm\base.py(self,X)
565 X中样品的类别标签。
566         """
-->567 y=super(BaseSVC,self)。预测(X)
568返回self.classes_u.take(np.asarray(y,dtype=np.intp))
569
预测中的~\Anaconda3\lib\site packages\sklearn\svm\base.py(self,X)
323 y_pred:数组,形状(n_个样本)
324         """
-->325 X=自我验证,用于预测(X)
326 predict=self.\u sparse\u预测self.\u sparse
自我预测
327收益预测(X)
中的~\Anaconda3\lib\site packages\sklearn\svm\base.py
_为预测(self,X)验证
476提升值错误(“X.shape[1]=%d应等于%d,
"
477“培训时的功能数量
时间“%
-->478(n_特征,自形_拟合[1]))
479返回X
480
ValueError:X.shape[1]=6应等于7,即特征数
训练时

问题在于,您正在将目标变量与输入一起传递

更正以下行

target = data['buying_n']
inputs = data.drop(['buying', 'maint', 'doors', 'persons', 'lug_boot', ' 
                    safety', 'car'. 'buying_n'], axis = 'columns')
在此之后,输入中的功能数将更改为6


注意:不要更改这两行的顺序

问题在于,您正在将目标变量与输入一起传递

更正以下行

target = data['buying_n']
inputs = data.drop(['buying', 'maint', 'doors', 'persons', 'lug_boot', ' 
                    safety', 'car'. 'buying_n'], axis = 'columns')
在此之后,输入中的功能数将更改为6


注意:不要更改这两行的顺序

如错误所示:
len(['buying'、'maint'、'doors'、'person'、'lug_boot'、'safety'、'car'])!=len([3,3,2,2,1,2])
['buying']是目标变量。休息是独立的预测因素。我不应该通过['buying']我需要通过模型传递6个变量。predict()然后你也需要使用
6
进行训练。是的!知道了。谢谢你,就像错误所说:
len(['buying'、'maint'、'doors'、'person'、'lug_boot'、'safety'、'car'])!=len([3,3,2,2,1,2])
['buying']是目标变量。休息是独立的预测因素。我不应该通过['buying']我需要通过模型传递6个变量。predict()然后你也需要使用
6
进行训练。是的!知道了。非常感谢。