使用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)?
请帮帮我。提前谢谢。
答案 0 :(得分:0)
通常,您只需将分类器包装到one-rest-rest分类器包装器中:
用矩阵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所指出的,对于你的特定分类器,没有必要包装它,它已经支持多输出分类。