Questions tagged «multi-class»

多类分类是一个分类任务,其中有两个以上的类。也称为多项式分类。




3
如何确定多分类器的质量
给定 具有实例和类的数据集,其中每个实例恰好属于一个类xixix_iNNNxixix_iyiyiy_i 多类分类器 经过训练和测试之后,我基本上有了一张表,其中包含测试集中每个实例的真实类和预测类。因此,对于每个实例,我都有一个匹配项()或一个未命中()。yiyiy_iaiaia_ixixix_iyi=aiyi=aiy_i= a_iyi≠aiyi≠aiy_i\neq a_i 如何评估比赛的质量?问题是某些类可以具有许多成员,即,许多实例属于该类。显然,如果所有数据点的50%属于一个类,而我的最终分类器总体上是正确的50%,那么我什么也得不到。我也可以做一个琐碎的分类器,无论输入什么,它都能输出最大的分类。 是否有一种标准方法根据每个类的匹配和匹配的已知测试集结果来估计分类器的质量?区分每个特定类别的匹配率也许甚至很重要? 我能想到的最简单的方法是排除最大类的正确匹配。还有什么?

2
如何处理测试集和训练集的分布之间的差异?
我认为机器学习或参数估计的一个基本假设是,看不见的数据来自与训练集相同的分布。但是,在某些实际情况下,测试集的分布几乎与训练集不同。 说一个大规模的多分类问题,试图将产品描述分类为大约17,000个类别。训练集将具有高度偏斜的上课先验,因此某些班级可能有很多训练示例,但有些班级可能只有几个。假设我们从客户端获得了带有未知类标签的测试集。我们尝试使用在训练集上训练的分类器,将测试集中的每个产品分类为17,000个类别之一。测试集可能具有偏斜的班级分布,但可能与培训集的分布有很大差异,因为它们可能与不同的业务领域相关。如果两个类别的分布非常不同,则训练有素的分类器可能无法在测试集中很好地工作。对于朴素贝叶斯分类器,这似乎尤其明显。 是否有任何原则上的方法来处理概率分类器的训练集和特定给定测试集之间的差异?我听说“转换式SVM”在SVM中做类似的事情。是否有类似的技术来学习在特定给定测试集上表现最佳的分类器?然后,我们可以针对此给定的测试集重新训练分类器,如本实际方案中所允许的那样。

2
如何在多标签分类器上使用scikit-learn的交叉验证功能
我正在一个5个类的数据集上测试不同的分类器,每个实例可以属于一个或多个这些类,因此我正在使用scikit-learn的多标签分类器sklearn.multiclass.OneVsRestClassifier。现在,我想使用进行交叉验证sklearn.cross_validation.StratifiedKFold。这将产生以下错误: Traceback (most recent call last): File "mlfromcsv.py", line 93, in <module> main() File "mlfromcsv.py", line 77, in main test_classifier_multilabel(svm.LinearSVC(), X, Y, 'Linear Support Vector Machine') File "mlfromcsv.py", line 44, in test_classifier_multilabel scores = cross_validation.cross_val_score(clf_ml, X, Y_list, cv=cv, score_func=metrics.precision_recall_fscore_support, n_jobs=jobs) File "/usr/lib/pymodules/python2.7/sklearn/cross_validation.py", line 1046, in cross_val_score X, y = check_arrays(X, …

2
scikit上的多标签分类指标
我正在尝试构建多标签分类器,以便使用scikit将主题分配给现有文档 我正在处理我的文档,将它们通过传递给TfidfVectorizer标签,MultiLabelBinarizer并OneVsRestClassifier以SGDClassifier作为估算器创建了。 但是,当测试我的分类器时,我只能得到0.29的分数,对于类似的问题,从我的阅读中得出的分数非常低。我在TfidfVectorizer上尝试了多个选项,例如停用词,单字组,词干,似乎没有什么改变结果。 我还习惯于GridSearchCV为估算器获取最佳参数,目前我对下一步的想法一无所知。 同时,根据我的理解,我无法使用它scikit.metrics,OneVsRestClassifier那么我如何获得一些指标(F1,Precision,Recall等)以找出问题所在? 我的数据语料库可能有问题吗? 更新:我也尝试使用CountVectorizer和HashingVectorizer管道化它们,TfidfTransformer但结果相似。所以我猜想词袋方法在标记化领域中表现最好,其余的取决于分类器...

2
执行多类SVM的最佳方法
我知道SVM是二进制分类器。我想将其扩展到多类SVM。哪种方法是最好的,也许是最简单的? 代码:在MATLAB中 u=unique(TrainLabel); N=length(u); if(N>2) itr=1; classes=0; while((classes~=1)&&(itr<=length(u))) c1=(TrainLabel==u(itr)); newClass=double(c1); tst = double((TestLabel == itr)); model = svmtrain(newClass, TrainVec, '-c 1 -g 0.00154'); [predict_label, accuracy, dec_values] = svmpredict(tst, TestVec, model); itr=itr+1; end itr=itr-1; end 如何改善呢?

2
多类感知器如何工作?
我没有数学背景,但是我了解简单的Perceptron的工作原理,并且我认为我掌握了超平面的概念(我想像它是3D空间中的一个平面,它将两个点云分开,就像一条线分开一样2D空间中的两个点云)。 但是我不明白一架飞机或一条直线如何分别在3D空间或2D空间中分隔三个不同的点云–从几何上讲这是不可能的,是吗? 我试图理解Wikipedia文章中的相应部分,但是在句子“这里,输入x和输出y是从任意集合中提取”时,已经惨遭失败。有人可以向我解释多类感知器,以及它与超平面的想法如何结合,还是可以向我指出一个不太数学的解释?

2
预测多个目标或类别?
假设我正在建立一个预测模型,在该模型中我试图预测多个事件(例如,掷骰子和掷硬币)。我熟悉的大多数算法都只能使用一个目标,因此我想知道是否存在针对此类问题的标准方法。 我看到两个可能的选择。也许最幼稚的方法是将它们简单地视为两个不同的问题,然后组合结果。但是,当两个目标不是独立的(在许多情况下它们可能非常依赖)时,这将带来严重的缺陷。 对我来说,更明智的方法是合并目标属性。因此,在骰子和硬币的情况下,我们将具有状态(等)。但是,这可能导致复合目标中的状态/类的数量变得相当大(很快,如果我们有2个骰子,等等)。此外,在一个属性是分类属性而另一个属性是数字属性的情况下,这似乎很奇怪(例如,如果预测温度和降水类型)。6⋅2=126⋅2=126\cdot 2=12(1,H),(1,T),(2,H)(1,H),(1,T),(2,H)(1, H), (1, T), (2, H) 有没有标准的方法来处理这类事情?另外,是否有专门设计的学习算法来处理此问题?

3
如何为多分类器建立混淆矩阵?
我有6个班级的问题。因此,我构建了一个多类分类器,如下所示:对于每个类,我都有一个Logistic回归分类器,使用“一个vs全部”,这意味着我有6个不同的分类器。 我可以为我的每个分类器报告一个混淆矩阵。但是,我想报告所有分类器的混淆矩阵,正如我在此处的许多示例中所看到的那样。 我该怎么做?我是否必须使用“一对一”算法而不是“一对一”算法来更改分类策略?因为在这些混淆矩阵上,报告指出了每个类别的误报。 多类混淆矩阵的示例 我想找到错误分类的物品数量。在第一行中,有137个类别1的示例被分类为1类,而13个类别1的示例被分类为2类。如何获得这个号码?

1
将2类模型扩展到多类问题
关于Adaboost的这篇论文提出了一些建议和代码(第17页),以将2类模型扩展到K类问题。我想对此代码进行概括,以便我可以轻松地插入不同的2类模型并比较结果。由于大多数分类模型都具有公式界面和predict方法,因此其中某些应该相对容易。不幸的是,我还没有找到从2类模型中提取类概率的标准方法,因此每个模型都需要一些自定义代码。 这是我编写的用于将K类问题分解为2类问题并返回K模型的函数: oneVsAll <- function(X,Y,FUN,...) { models <- lapply(unique(Y), function(x) { name <- as.character(x) .Target <- factor(ifelse(Y==name,name,'other'), levels=c(name, 'other')) dat <- data.frame(.Target, X) model <- FUN(.Target~., data=dat, ...) return(model) }) names(models) <- unique(Y) info <- list(X=X, Y=Y, classes=unique(Y)) out <- list(models=models, info=info) class(out) <- 'oneVsAll' return(out) } 这是我编写的一种预测方法,用于遍历每个模型并进行预测: predict.oneVsAll <- …

2
多类分类中的Scikit SVM输出始终给出相同的标签
我目前正在使用带有以下代码的Scikit学习: clf = svm.SVC(C=1.0, tol=1e-10, cache_size=600, kernel='rbf', gamma=0.0, class_weight='auto') 然后用7个不同的标签拟合并预测一组数据。我得到了一个奇怪的输出。无论我在验证集上使用预测的标签是哪种交叉验证技术,始终都是标签7。 我尝试了其他一些参数,包括完整的默认参数one(svm.SVC()),但是只要我使用的内核方法rbf代替,poly否则linear它将无法工作,而对于polyand 来说确实很好linear。 此外,我已经尝试对火车数据而不是验证数据进行预测,它非常适合。 有人以前见过这种问题,知道这里发生了什么吗? 我从不详细查看我的班级分布,但我知道应该有30%左右是7、14%是4。 我什至尝试手动进行1-vs-rest实施,但仍然没有帮助。

3
如何在scikit-learn的多层感知器中将Softmax用作激活功能?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为交叉验证的主题。 11个月前关闭。 我需要在scikit中将Softmax激活功能应用于多层Perceptron。关于神经网络模型(受监督)的scikit 文档指出:“ MLPClassifier通过将Softmax用作输出函数来支持多类分类。” 问题是如何应用功能? 在下面的代码片段中,当我在激活参数下添加Softmax时,它不接受。 MLPClassifier(activation='Softmax', alpha=1e-05, batch_size='auto', beta_1=0.9, beta_2=0.999, early_stopping=False, epsilon=1e-08, hidden_layer_sizes=(15,), learning_rate='constant', learning_rate_init=0.001, max_iter=200, momentum=0.9, nesterovs_momentum=True, power_t=0.5, random_state=1, shuffle=True, solver='lbfgs', tol=0.0001, validation_fraction=0.1, verbose=False, warm_start=False) 错误代码为: ValueError:不支持激活“ Softmax”。支持的激活是(“身份”,“物流”,“ tanh”,“ relu”)。 有没有办法在scikit-learn中将Softmax激活函数应用于多类分类?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.