Python scikit svm“ValueError:X每个示例有62个特性;预期为337”

2024-03-28 11:36:49 发布

您现在位置:Python中文网/ 问答频道 /正文

玩弄Python的scikit-SVM线性支持向量分类,当我试图进行预测时遇到了一个错误:

ten_percent = len(raw_routes_data) / 10

# Training
training_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)

# Predicting
testing_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, ... ]

当我试图用线性预测来预测我被告知:

ValueError: X has 27 features per sample; expecting 46

我错过了什么?显然,这是我拟合和转换数据的方式。


Tags: to数据datarawlabelstraining线性all
2条回答

是的,我在使用“CountVectorizer”时也有过类似的担心。 当我去掉了对测试数据的附加拟合,并且只使用了基于对训练数据的拟合的“转换”方法时,它就像宝石一样工作。

如果共享它,有助于社区在使用测试数据预测结果时考虑类似的问题。

谢谢, 夏比尔·贾米尔

问题是,您为train和test创建并安装了不同的DictVectorizer

您应该使用列车数据创建并只适合一个DictVectorizer,并在测试数据上使用此对象的transform方法来创建测试数据的特征表示。

相关问题 更多 >