到目前为止,我已经为另一个帖子和sklearn文档提供了资源
所以一般来说我想生成以下示例:
X = np.matrix([[1,2],[2,3],[3,4],[4,5]])
y = np.array(['A', 'B', 'B', 'C', 'D'])
Xt = np.matrix([[11,22],[22,33],[33,44],[44,55]])
model = model.fit(X, y)
pred = model.predict(Xt)
Run Code Online (Sandbox Code Playgroud)
但是对于输出,我希望每个观察看到3列作为输出pred:
A | B | C
.5 | .2 | .3
.25 | .25 | .5
...
Run Code Online (Sandbox Code Playgroud)
每个班级出现在我的预测中的概率不同.
我相信最好的方法是Multilabel classification从我上面提供的第二个链接.另外,我认为跳入下面列出的一个multi-label或多个multi-output模型可能是一个好主意:
Support multilabel:
sklearn.tree.DecisionTreeClassifier
sklearn.tree.ExtraTreeClassifier
sklearn.ensemble.ExtraTreesClassifier
sklearn.neighbors.KNeighborsClassifier
sklearn.neural_network.MLPClassifier
sklearn.neighbors.RadiusNeighborsClassifier
sklearn.ensemble.RandomForestClassifier
sklearn.linear_model.RidgeClassifierCV
Support multiclass-multioutput:
sklearn.tree.DecisionTreeClassifier
sklearn.tree.ExtraTreeClassifier
sklearn.ensemble.ExtraTreesClassifier
sklearn.neighbors.KNeighborsClassifier
sklearn.neighbors.RadiusNeighborsClassifier
sklearn.ensemble.RandomForestClassifier
Run Code Online (Sandbox Code Playgroud)
但是,我正在寻找能够以正确的方式做到这一点的人更有信心和经验的人.所有反馈都表示赞赏.
-bmc
machine-learning probability multilabel-classification predictive
我正在使用一个包含所有十进制值和时间戳的数据集,它具有以下功能:
1. sno
2. timestamp
3. v1
4. v2
5. v3
Run Code Online (Sandbox Code Playgroud)
我有 5 个月的数据,每分钟都有时间戳。我需要预测将来是否会随时使用 v1、v2、v3。v1、v2、v3 的值在 0 到 25 之间。
我怎样才能做到这一点 ?
我以前使用过二元分类,但我不知道如何处理多标签问题来进行预测。我一直在使用下面的代码。我应该如何训练模型以及我应该如何使用 v1、v2、v3 来适应“y”?
X_train, X_test, y_train, y_test = train_test_split(train, y, test_size=0.2)
Data:
sno power voltage v1 v2 v3 timestamp
1 3.74 235.24 0 16 18 2006-12-16 18:03:00
2 4.928 237.14 0 37 16 2006-12-16 18:04:00
3 6.052 236.73 0 37 17 2006-12-16 18:05:00
4 6.752 237.06 0 36 17 2006-12-16 18:06:00
5 6.474 237.13 0 37 16 2006-12-16 …Run Code Online (Sandbox Code Playgroud) machine-learning scikit-learn multilabel-classification data-science
我正在运行多标签分类1的[代码]。如何修复未定义“ X_train”的NameError。下面给出了python代码。
import scipy
from scipy.io import arff
data, meta = scipy.io.arff.loadarff('./yeast/yeast-train.arff')
from sklearn.datasets import make_multilabel_classification
# this will generate a random multi-label dataset
X, y = make_multilabel_classification(sparse = True, n_labels = 20,
return_indicator = 'sparse', allow_unlabeled = False)
# using binary relevance
from skmultilearn.problem_transform import BinaryRelevance
from sklearn.naive_bayes import GaussianNB
# initialize binary relevance multi-label classifier
# with a gaussian naive bayes base classifier
classifier = BinaryRelevance(GaussianNB())
# train
classifier.fit(X_train, y_train)
# predict
predictions = classifier.predict(X_test)
from …Run Code Online (Sandbox Code Playgroud) python machine-learning scikit-learn multilabel-classification scikit-multilearn
我正在使用sklearn的multilabelbinarizer()来训练我的机器学习中的多个列,我用它来训练我的模型。
使用它后,我注意到它在逆变换时混淆了我的数据。我创建了一组随机值的测试集,在其中拟合数据、对其进行转换,然后inverse_transform将数据恢复为原始数据。
我进行了一个简单的测试jupyter笔记本上进行了一个简单的测试以显示错误:
在inverse_transformed第 1 行的值中,它混淆了州和月份。
首先,我的使用方式是否有错误multilabelbinarizer?有没有不同的方法来实现相同的输出?
编辑: 感谢@Nicolas M. 帮助我解决我的问题。我最终像这样解决了这个问题。
请原谅我的粗略解释,但结果比我最初想象的要复杂。我改用 thelabel_binarizer而不是multi_label_binarizer因为它
我最终腌制了label_binarizer defaultdict以便我可以加载它并在我的机器学习项目的不同模块中使用它。
一件可能不简单的事情是我向为每一列制作的数据帧添加新标题。它采用列名+列号的形式。我这样做是因为我需要对数据进行逆变换。为此,我搜索了包含原始列名称的列,该列名称将较大的数据帧分隔成各个列块。
这里是我使用的一些变量及其含义供参考:
lb_dict- 存储不同标签二值化器的默认字典。
binarize_df- 存储二进制数据的数据框。
binarized_label- label 将列中的一个标签二值化。
header- 创建一个新的标题形式:列名+数字列。
inverse_df- 存储逆变换数据的数据帧。
one_label_list- 查找具有原始列标签的列名称列表。
one_label_df- 创建一个新的数据框,仅存储一列的二值化数据。
single_label- 被反向转换成一列的二值化数据。
在此代码中,数据是我传递给函数的数据帧。
lb_dict = defaultdict(LabelBinarizer)
# create a place holder dataframe to join new binarized data to
binarize_df = pd.DataFrame(['x'] …Run Code Online (Sandbox Code Playgroud) python machine-learning pandas multilabel-classification sklearn-pandas