【问题标题】:How to apply MultiOutputClassifier to a dataset for Naive-Bayes algorithm如何将 MultiOutputClassifier 应用于 Naive-Bayes 算法的数据集
【发布时间】:2021-04-04 19:09:57
【问题描述】:

我有一个如下的数据集,(取自网上的一篇文章,我一直在尝试对其进行朴素贝叶斯算法)

Original Dataset

y attribute

在做了一些操作之后(按照文章),这些是我用于训练和测试的新数据集,

X Train

y Train

现在,它包含一个多标签,我被要求查看 多输出分类 的问题。我一直在尝试理解这种分类并尝试自己实现它,但我无法完成。首先,我尝试按照网站上给出的示例代码进行操作,

from sklearn.datasets import make_classification
from sklearn.multioutput import MultiOutputClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.utils import shuffle
import numpy as np
X, y1 = make_classification(n_samples=10, n_features=100, n_informative=30, n_classes=3, random_state=1)
y2 = shuffle(y1, random_state=1)
y3 = shuffle(y1, random_state=2)
Y = np.vstack((y1, y2, y3)).T
n_samples, n_features = X.shape # 10,100
n_outputs = Y.shape[1] # 3
n_classes = 3
forest = RandomForestClassifier(n_estimators=100, random_state=1)
multi_target_forest = MultiOutputClassifier(forest, n_jobs=-1)
multi_target_forest.fit(X, Y).predict(X)

但是,由于我对这一切都很陌生,所以我什么都不懂。我不明白他为什么要调用 make_classification,然后对数据进行洗牌等。 我尝试在我的 y_train 变量上实现它,然后将它放在我的 model.fit 中,用于 Naive-Baysen 算法,

from sklearn.naive_bayes import GaussianNB
model = GaussianNB()
Yt = np.vstack(y_train).T
n_samples, n_features = X_train.shape # 10,100
n_outputs = Yt.shape[1] # 3
n_classes = 3
forest = RandomForestClassifier(n_estimators=100, random_state=1)
multi_target_forest = MultiOutputClassifier(forest, n_jobs=-1)
model.fit(X_train, multi_target_forest)

但它给出了与我之前收到的相同的错误,这意味着我没有正确地进行多输出分类,

ValueError: y should be a 1d array, got an array of shape () instead.

谁能帮我告诉我如何实际实现这种分类,以便 Y 变量可以用于 Naive Baysen?

【问题讨论】:

标签: machine-learning deep-learning naivebayes multilabel-classification


【解决方案1】:
rom sklearn.multioutput import MultiOutputClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.utils import shuffle
import numpy as np

然后让我们假设你以某种方式做到了,所以你有一个称为 X_train 形状的集合,假设是 (600, 8),然后是一个形状为 (445, 8) 的测试集,那么你必须让你的分类器适合你的训练集和为您的测试集预测 y。您的 y_train 应该具有形状 (600, 5) 并且您的 y_test 应该具有形状 (445, 5)。 (我为你随机将数据分成训练集和验证集,你可以通过https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html轻松做到这一点)

你应该适合你的分类器的方式如下

gauss = GaussianNB()
multi_target_gauss = MultiOutputClassifier(gauss, n_jobs=-1)
multi_target_gauss.fit(X_train, y_train)
multi_target_gauss.predict(X_test)

得到你的预测

【讨论】:

    猜你喜欢
    • 2015-03-31
    • 2014-04-08
    • 2014-06-18
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2017-02-27
    相关资源
    最近更新 更多