如何将 MultiOutputClassifier 应用于朴素贝叶斯算法的数据集
How to apply MultiOutputClassifier to a dataset for Naive-Bayes algorithm
我有一个数据集如下,(它取自网上的一篇文章,我一直在尝试朴素贝叶斯算法)
完成一些操作后(按照文章),这些是我用于训练和测试的新数据集,
现在,它包含一个多标签,我被要求查看 多输出分类 以解决问题。我一直试图理解这种分类,也试图自己实现它,但我无法完成。首先,我尝试按照网站上给出的示例代码进行操作,
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 吗?
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)
得到你的预测
我有一个数据集如下,(它取自网上的一篇文章,我一直在尝试朴素贝叶斯算法)
完成一些操作后(按照文章),这些是我用于训练和测试的新数据集,
现在,它包含一个多标签,我被要求查看 多输出分类 以解决问题。我一直试图理解这种分类,也试图自己实现它,但我无法完成。首先,我尝试按照网站上给出的示例代码进行操作,
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 吗?
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)
得到你的预测