2016-01-24 57 views
0

我正在使用Scikit-learn构建SVM分类器......并且在运行分类器时..我想通过检查错误分类的实例并试图找出分类器来提高分类器的准确性错误分类背后的原因... 所以有没有办法显示错误分类的实例?显示错误分类的实例

回答

3

有没有办法显示错误分类的实例?

是的,你需要在这里和那里做一些索引。下面是一个例子,但技术细节将取决于分类器的输入和输出。

简单的情况是当输出是单个值时,因此您可以轻松地比较实例是否已被正确分类。例如,我们收集了一些数据和训练二元分类:

>>> from sklearn import cross_validation, datasets, svm 
>>> X, y = datasets.make_classification() 
>>> X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y) 
>>> clf = svm.LinearSVC().fit(X_train, y_train) 
>>> y_pred = clf.predict(X_test) 

您可以比较y_testy_pred直接作为输出是单值。如果你正在训练一个多类模型,那么你将无法做一个简单的比较,而是应该按班级进行比较。

>>> misclassified_samples = X_test[y_test != y_pred] 

如果需要,还可以将布尔掩码转换为索引。

>>> import numpy as np 
>>> np.flatnonzero(y_test != y_pred) 
array([ 0, 20, 22]) 
1

假设您使用线性SVM。如果不是,这是非常类似的程序。

from sklearn.svm import LinearSVC 
X_train=your_train_data 
y_train=your_train_lables 
X_test=your_test_data #should be around 30% of you your data 
y_test=your_test_labels 
svm = LinearSVC() 
svm.fit(X_train, y_train) 
for item, label in zip(X_test, y_test): 
    result = svm.predict([item]) 
    if result != label: 
     print "predicted label %s, but true label is %s" % (result, label) 

这会打印出你的分类器在测试数据上所做的每一个错误。