在SciKit-Learn

时间:2015-08-07 15:12:24

标签: python machine-learning scikit-learn analytics

使用python scikit处理分类问题,它的医疗诊断数据有6个功能和2个目标。我尝试使用一个目标,使用KNN算法训练模型,使用此模型预测精度为100%。

现在想要将其扩展到第二个目标,想要预测同一特征集的两个y值的结果(6列)。

以下是我的代码,我能够准确预测目标1的结果('Outcome1-Urinary-bladder')。如何扩展以预测第二个目标的结果(结果2-肾炎肾炎)。

X = Feature_set
y  = Target1['Outcome1-Urinary-bladder'].values
from sklearn.neighbors import KNeighborsClassifier
from sklearn import metrics
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X,y)
y_predictor = knn.predict(X)
print metrics.accuracy_score(y,y_predictor)

Click here to view the dataset

对代码进行哪些修改以预测2个目标值的结果('Outcome1-Urinary-bladder'& Outcome2-Nephritis-of-renal)?

请帮帮我。提前谢谢。

1 个答案:

答案 0 :(得分:0)

通常,您只需将分类器包装到one-rest-rest分类器包装器中:

http://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OneVsRestClassifier.html#sklearn.multiclass.OneVsRestClassifier

用矩阵y喂它,它将同时有2列。

使用示例:

selClassifiers = {
    'linear': LinearSVC(),
    'linearWithSGD': SGDClassifier(),
    'rbf': SVC(kernel='rbf', probability=True),
    'poly': SVC(kernel='poly', probability=True),
    'sigmoid': SVC(kernel='sigmoid', probability=True),
    'bayes': MultinomialNB()
}

classifier = Pipeline([('vectorizer', CountVectorizer()),('tfidf', TfidfTransformer()),('clf', OneVsRestClassifier(selClassifiers[classif]))])

classifier.fit(X_train, Y)

predicted = classifier.predict(X_test)

all_labels = lb.inverse_transform(predicted)

正如@yangjie所指出的,对于你的特定分类器,没有必要包装它,它已经支持多输出分类。