Machine learning 分类监督训练混淆

Machine learning 分类监督训练混淆,machine-learning,classification,naivebayes,apache-spark-ml,Machine Learning,Classification,Naivebayes,Apache Spark Ml,所以我对有监督的机器学习是新手,但我一直在阅读有关机器学习的书籍和文章,我被一个问题困住了。没有卡住,但我不理解分类算法背后的逻辑。我试图根据历史数据将记录归类为错误或不正确。 这是原始数据训练数据: Name Office Age isWrong F1 1 32 0 F2 2 61 1 F3 1 35 0 F4 0 25 0 F5 1 36 0 F6 2 52

所以我对有监督的机器学习是新手,但我一直在阅读有关机器学习的书籍和文章,我被一个问题困住了。没有卡住,但我不理解分类算法背后的逻辑。我试图根据历史数据将记录归类为错误或不正确。 这是原始数据训练数据:

Name Office Age  isWrong
F1     1    32      0
F2     2    61      1
F3     1    35      0
F4     0    25      0
F5     1    36      0
F6     2    52      0
F7     2    48      0
F8     1    17      1
F9     2    51      0
F10    0    24      0
F11    4    34      1
F12    0    21      0
F13    2    51      0
F14    0    27      0
F15    3    37      1

(only showing top 15 results of 200 results)
错误记录是指报告年龄低于18岁或高于60岁的任何记录,或报告的办公地点不是{0,1,2}。我有更多的记录在满足上述任何条件时显示1。我用这个数据集训练了我的模型,并创建了一个测试数据集来测试结果。但是,我最终在每条记录的预测列中得到0。我使用了一种朴素的贝叶斯方法,因为这种方法假设了特征变量之间的独立性,在我的情况下,办公室数量和年龄之间没有关系。我知道还有其他方法,比如Logistic回归和SVCSVM,但我假设它们需要特征变量之间一定程度的关系。尽管如此,我还是尝试了这两种方法,并得到了相同的结果。我做错什么了吗?我需要在训练我的模型之前指定一些东西吗

下面是我做的非常简单的事情:

NaiveBayes nb = new NaiveBayes().setLabelCol("isWrong");
NaiveBayesModel nbm = nb.fit(dataset);
nbm.transform(dataset2).show();
以下是数据集2前15名:

Name   Office Age
F1       9    36  //wrong, office is 9
F2       2    20
F3       1    17
F4       2    43
F5       2    90  // wrong, age is >60
F6       1    36
F7       1    40
F8       2    52
F9       2    49
F10      1    38
F11      0    28
F12      0    18
F13      1    40
F14      1    31
F15      2    45

但正如我所说,预测列每次显示0。知道为什么吗

我不知道你为什么选择转换。它只是尝试将结果数据类型转换为与原始列相同的数据类型

要获得概率,应使用函数:

预测概率:测试向量X的返回概率估计

以下代码在您的场景中应该可以完美地工作

NaiveBayes nb = new NaiveBayes().setLabelCol("isWrong");
nb.fit(dataset)
nb.predict_proba(dataset2)

你刚才说了:返回测试向量X的概率估计值,但你将我的数据集2作为参数传递,但我明白你的意思。我刚试过,结果也一样。我遍历了数据集2的每一条记录,但最终还是得到了一个0的预测结果。我还跟踪了Apache的Spark DOCS上的内容://train the model NaiveBayesModel model=nb.fittrain;//选择要显示的示例行。数据集预测=model.transformtest;这是因为您使用dataset训练分类器,并使用dataset2测试其性能,我很高兴您的疑问被澄清@GuillerMoherera忘记添加文档链接:所以您是说我只能使用相同的dataset测试我的模型。。。?我认为那不是真的。你训练一个模型,然后用不同的数据测试它,观察结果。