SciKitLearn中多目标的预测结果

2024-10-01 13:34:46 发布

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

使用pythonsicikit处理一个分类问题,它是一个具有6个特征和2个目标的医学诊断数据。用一个目标进行了实验,用KNN算法训练了一个模型,该模型的预测精度为100%。在

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

下面是我的代码,我可以准确地预测目标1的结果(“结果1-膀胱”)。我怎样才能预测第二个目标的结果(肾性肾炎)。在

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个目标值(“结果1-膀胱”和“结果2肾性肾炎”)的结果,需要对代码进行哪些修改?在

请帮帮我。提前谢谢。在


Tags: 代码from模型import目标neighbors特征sklearn
1条回答
网友
1楼 · 发布于 2024-10-01 13:34:46

通常,您只需将分类器包装到一个vs rest分类器包装器中:

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

用矩阵y来填充它,它将同时有两列。在

用法示例:

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所指出的,对于您的特定分类器,不需要包装它,它已经支持多输出分类。在

相关问题 更多 >