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测试我的模型。。。?我认为那不是真的。你训练一个模型,然后用不同的数据测试它,观察结果。