Python scikit svm “ValueError: X has 62 features per sample; expecting 337”

我在使用Python的scikit SVM线性支持向量分类时,尝试进行预测时遇到了一个错误:

ten_percent = len(raw_routes_data) / 10# Trainingtraining_label = all_labels[ten_percent:]training_raw_data = raw_routes_data[ten_percent:]training_data = DictVectorizer().fit_transform(training_raw_data).toarray()learner = svm.LinearSVC()learner.fit(training_data, training_label)# Predictingtesting_label = all_labels[:ten_percent]testing_raw_data = raw_routes_data[:ten_percent]testing_data = DictVectorizer().fit_transform(testing_raw_data).toarray()testing_predictions = learner.predict(testing_data)m = metrics.classification_report(testing_label, testing_predictions)

原始数据是以Python字典形式表示的,包含了各种旅行选项的到达时间类别和天气数据类别:

{'72_bus': '6.0 to 11.0', 'uber_eta': '2.0 to 3.5', 'tweet_delay': '0', 'c_train': '1.0 to 4.0', 'weather': 'Overcast', '52_bus': '16.0 to 21.0', 'uber_surging': '1.0 to 1.15', 'd_train': '17.6666666667 to 21.8333333333', 'feels_like': '27.6666666667 to 32.5'}

当我训练和拟合训练数据时,我对90%的数据使用了字典向量化器并将其转换为数组。

提供的测试标签表示为:

[1,2,3,3,1,2,3, ... ]

当我尝试使用LinearSVC进行预测时,系统提示我:

ValueError: X has 27 features per sample; expecting 46

我在这里遗漏了什么?显然是我的数据拟合和转换方式有问题。


回答:

问题在于你为训练和测试数据创建并拟合了不同的DictVectorizer

你应该仅使用训练数据创建并拟合一个DictVectorizer,然后使用这个对象的transform方法来对测试数据进行特征表示的转换。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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