【发布时间】:2021-10-03 22:18:21
【问题描述】:
多标签分类
gender age weight height vitamin_A vitamin_C vitamin_D
0 55 64 128 0 1 0
0 54 72 135 0 1 0
0 82 70 150 1 1 1
0 82 70 150 1 1 1
0 59 64 107 0 1 0
特征是性别、年龄、体重、身高
标签是维生素 A、C、D
X = df[['gender', 'age', 'weight', 'height']]
y = df[['vitamin_A', 'vitamin_C', 'vitamin_D']]
我用 OneVsRestClassifier 做了简单的多标签分类模型。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=True)
LR_pipeline = Pipeline([('clf', OneVsRestClassifier(LogisticRegression(solver='sag'), n_jobs=-1))])
labels = ['vitamin_A', 'vitamin_C', 'vitamin_D']
acc_classifier = []
for label in labels:
LR_pipeline.fit(X_train, y_train[label])
prediction = LR_pipeline.predict(X_test)
acc = accuracy_score(y_test[label], prediction)
acc_classifier.append(acc)
df_ = pd.DataFrame({'Label': labels, 'Accuracy': acc_classifier})
df_
Label Accuracy
0 vitamin_A 0.75
1 vitamin_C 0.65
2 vitamin_D 1.00
但我不知道如何使用模型。我做到了,但结果似乎是错误的。因为每次我尝试它都会得到相同的结果,并且只有 1,1,1。
data_test = [[0, 82, 70, 150]]
for label in labels:
y_predict = LR_pipeline.predict(data_test)
print(y_predict)
结果是[1][1][1]每次偶数变化。
我的专家是:
输入:性别=0,年龄=55,体重=64,身高=128
结果1:维生素A为0,维生素C为1,维生素D为0
结果 2:维生素 A 为 0.64,维生素 C 为 0.82,维生素 D 为 0.34
vitamin_A vitamin_B vitamin_C vitamin_A_prob vitamin_B_prob vitamin_C_prob
0 1 0 0.64 0.82 0.34
【问题讨论】:
标签: python machine-learning multilabel-classification