ValueError: 发现输入变量的样本数不一致:[218, 30]

我正在使用线性SVC进行人脸识别训练,我的数据集是870×22。我有29个不同人的30帧图像,使用图像中的22个简单像素值来识别面部图像,这些像素是我的特征。此外,当我调用train_test_split()时,它会给我一个大小为218×22的X_test和一个大小为218的y_test。一旦我训练了分类器,并尝试运行一个新面部(30×22矩阵)的图像时,它会给我这个错误:

ValueError: Found input variables with inconsistent numbers of samples: [218, 30]

这是代码:

import sklearnfrom sklearn.model_selection import train_test_splitfrom sklearn import metricsfrom sklearn.svm import SVCfrom sklearn.metrics import confusion_matrixfrom sklearn.metrics import accuracy_score, f1_score    img_amount = 30    target = np.asarray([1]*img_amount + [2]*img_amount + [3]*img_amount + [4]*img_amount + [5]*img_amount + [6]*img_amount + [7]*img_amount + [8]*img_amount + [9]*img_amount + [10]*img_amount + [11]*img_amount + [12]*img_amount + [13]*img_amount + [14]*img_amount + [15]*img_amount + [16]*img_amount + [17]*img_amount + [18]*img_amount + [19]*img_amount + [20]*img_amount + [21]*img_amount + [22]*img_amount + [23]*img_amount + [24]*img_amount + [25]*img_amount + [26]*img_amount + [27]*img_amount + [28]*img_amount + [29]*img_amount)       dataset= dataset[:, 0:22]                svc_1 = SVC(kernel='linear', C=0.00005)        X_train, X_test, y_train, y_test = train_test_split( dataset, target, test_size=0.25, random_state=0)                def train(clf, X_train, X_test, y_train, y_test):                        clf.fit(X_train, y_train)            print ("Accuracy on training set:")            print (clf.score(X_train, y_train))            print ("Accuracy on testing set:")            print (clf.score(X_test, y_test))                        y_pred = clf.predict(X_test)                        print ("Classification Report:")            print (metrics.classification_report(y_test, y_pred))            print ("Confusion Matrix:")            print (metrics.confusion_matrix(y_test, y_pred))                    train(svc_1, X_train, X_test, y_train, y_test)        print ("Classification Report:")print (metrics.classification_report(y_test, new_face_img))

为了不使问题视觉上显得杂乱,我将new_face_img的矩阵上传到了pastebin:https://pastebin.com/uRbvv5jD

数据集链接:数据集

它们只是数组,可以直接传递到它们的变量中

我得到错误的行是在尝试预测新样本时:

predictions = svc_1.predict(new_face_img) print ("Classification Report:")->>>>print (metrics.classification_report(y_test, predictions))predictions = svc_1.predict(michael_ocluded_array) expected=np.ones(len(michael_ocluded_array))print ("Confusion Matrix:")print (metrics.confusion_matrix(expected, predictions))

混淆矩阵:————————————————————————— ValueError Traceback (most recent calllast) in 1 predictions = svc_1.predict(michael_ocluded_array)2 print (“Confusion Matrix:”)—-> 3 print (metrics.classification_report(y_test, predictions))

C:\ProgramData\Miniconda3\lib\site-packages\sklearn\utils\validation.pyin inner_f(*args, **kwargs)70 FutureWarning)71 kwargs.update({k: arg for k, arg in zip(sig.parameters, args)})—> 72 return f(**kwargs)73 return inner_f74

C:\ProgramData\Miniconda3\lib\site-packages\sklearn\metrics_classification.pyin classification_report(y_true, y_pred, labels, target_names,sample_weight, digits, output_dict, zero_division) 1927 “””
1928-> 1929 y_type, y_true, y_pred = _check_targets(y_true, y_pred) 1930 1931 labels_given = True

C:\ProgramData\Miniconda3\lib\site-packages\sklearn\metrics_classification.pyin _check_targets(y_true, y_pred)79 y_pred : array or indicator matrix80 “””—> 81 check_consistent_length(y_true, y_pred)82 type_true = type_of_target(y_true)83 type_pred = type_of_target(y_pred)

C:\ProgramData\Miniconda3\lib\site-packages\sklearn\utils\validation.pyin check_consistent_length(*arrays)253 uniques = np.unique(lengths)254 if len(uniques) > 1:–> 255 raise ValueError(“Found input variables with inconsistent numbers of”256 ” samples: %r” % [int(l) for l in lengths])257

ValueError: Found input variables with inconsistent numbers ofsamples: [218, 30]


回答:

问题在这里:

predictions = svc_1.predict(new_face_image) print ("Confusion Matrix:")print (metrics.confusion_matrix(y_test, predictions))

您正在预测new_face_image并将其与测试数据集进行比较。

predictions = svc_1.predict(new_face_image) # 更改为您期望的形状=(30,)expected=np.ones(len(new_face_image))print ("Confusion Matrix:")print (metrics.confusion_matrix(expected, predictions))

已编辑 用于与数据集测试数据的验证:

predictions = svc_1.predict(x_test) print ("Confusion Matrix:")print (metrics.confusion_matrix(y_test, predictions))

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注