gpt4 book ai didi

python - 使用一组特征预测多个 y

转载 作者:行者123 更新时间:2023-11-30 09:52:44 25 4
gpt4 key购买 nike

我有以下样本集(显然真实的样本集更大,但仅用于复制目的)。数据集包含某些特征(前三列)和两个 y

import pandas as pd
df = pd.DataFrame([[0, 0, 1, "Tree", "Flower"], [1,1,0,'Tree','Water'], [0,1,0,'Tree','NA'], [2,1,0,'Water','Wood'], [1,1,0,'Flower','NA'], [1,1,1,'Tree','Flower'], [2,2,0,'Flower','NA'] ], columns=('feature1', 'feature2', 'feature3', 'outcome1', 'outcome2'))

我现在想做的是预测不同的 y。显然,我可以创建一个测试集和训练集,区分特征和标签,然后创建一个像这样的决策树:

my_tree_one = tree.DecisionTreeClassifier()
my_tree_one = my_tree_one.fit(train_features, train_outcome)
my_dt_prediction = my_tree_one.predict(test_features)

但是这只会给我一个 y。我正在寻找(可能是多个)y。

我正在寻找一种方法来预测特定标签的机会,考虑到特征的性质。然后应该显示值高于某个阈值的标签。因此,如果我有具有特征 0、1、2 的新数据并将阈值设置为 50%,则结果应该是:

  • 标签“Tree”的几率为 60%
  • 标签“水”发生了 55% 的变化

有人对我如何获得所需的输出有反馈吗?

最佳答案

你的问题是多标签分类问题,这自然比简单分类更难。

在 scikit learn 中有多种方法可以解决这个问题,其中之一是使用 oneVSall 机制及其 OneVsRestClassifier,如下所示:

import pandas as pd
from sklearn.preprocessing import MultiLabelBinarizer
from sklearn import tree
from sklearn.multiclass import OneVsRestClassifier

df = pd.DataFrame([[0, 0, 1, "Tree", "Flower"], [1,1,0,'Tree','Water'], [0,1,0,'Tree','NA'], [2,1,0,'Water','Wood'], [1,1,0,'Flower','NA'], [1,1,1,'Tree','Flower'], [2,2,0,'Flower','NA'] ], columns=('feature1', 'feature2', 'feature3', 'outcome1', 'outcome2'))

# Binarize your classes
outcomes = zip(list(df['outcome1']), list(df['outcome2']))
MLB = MultiLabelBinarizer()
Y = MLB.fit_transform(outcomes)

# Extract your data
X = df[['feature1', 'feature2', 'feature3']]

# Define base classifier and meta-classifier
my_tree_one = tree.DecisionTreeClassifier()
clf = OneVsRestClassifier(my_tree_one)

# Train your classifier and output your predictions
clf.fit(X, Y)
predictions = clf.predict(X) # predict on a new X
print MLB.inverse_transform(predictions)
<小时/>

如果您想对最终分类使用不同的阈值,您可以使用 predict_proba 而不是 predict 并自行进行最终分类,如下所示:

threshold = 0.6
predictions = []

probabilities = clf.predict_proba(X)
for probability_row in probabilities:
predictions.append([1 if p > threshold else 0 for p in probability_row])
predictions = np.asarray(predictions)

关于python - 使用一组特征预测多个 y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41957534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com