我正在开发一个大型文本分类项目,我们将文本数据(简单消息)存储在HBase中.
我们有两个问题,首先我们想使用HBase作为Mahout分类器的来源,即Bayers和Random Forests.
其次,我们希望能够存储在HBase中生成的模型,而不是使用内存方法(InMemoryBayesDatastore),但随着我们的集合的增长,我们遇到了内存利用率问题,并希望测试HBase作为一种可行的替代方案.
使用带有Mahout的HBase似乎很少有材料浮动,如果可以将它用作潜在的数据源.我在Java中使用Mahout 0.6核心API,它具有InMemory数据存储区.
做一点挖掘我相信那里有一个HBase Bayers数据存储组件 - org.apache.mahout.classifier.bayes.datastore.HBaseBayesDatastore请参见旧版JavaDoc:http://www.jarvana.com/jarvana/view/org/apache/mahout/mahout-core/0.3/mahout -core-0.3-javadoc.jar!/org/apache/mahout/classifier/bayes/datastore/HBaseBayesDatastore.html
但是,看看最新的文档看起来这个功能已经消失了......?https://builds.apache.org/job/Mahout-Quality/javadoc/
我想知道是否仍然可以使用HBase作为Bayers和RandomForests的数据源,这是否有任何先前的用例?
谢谢!
我们目前正在尝试移植一个非常(非常)大型项目,该项目使用ant构建到maven(同时也转移到svn).正在探索重塑项目结构的所有可能性,以最好地适应maven范式.
现在更具体一点,我遇到了分类器,并希望知道如何利用它们对我有利,同时避免使用"分类器反模式".
谢谢
来自:http://maven.apache.org/pom.html
分类器:您可能偶尔会在坐标上找到第五个元素,即分类器.稍后我们将访问分类器,但是现在只需知道这些类型的项目显示为groupId:artifactId:packaging:classifier:version.
和
分类器允许区分从相同POM构建但其内容不同的工件.它是一些可选的任意字符串 - 如果存在 - 将附加到版本号之后的工件名称.作为此元素的动机,请考虑一个项目,该项目提供针对JRE 1.5的工件,但同时也是一个仍支持JRE 1.4的工件.第一个工件可以配备分类器jdk15,第二个工件配备jdk14,以便客户端可以选择使用哪个.
分类器的另一个常见用例是需要将辅助工件附加到项目的主工件.如果浏览Maven中央存储库,您会注意到分类器源和javadoc用于部署项目源代码和API文档以及打包的类文件.
我正在尝试使用森林(或树)增强贝叶斯分类器(原始介绍,学习)python(最好是python 3,但python 2也可以接受),首先学习它(结构和参数学习)然后使用它用于离散分类并获得具有缺失数据的那些特征的概率.(这就是为什么只有离散分类甚至好的天真分类器对我来说都不是很有用.)
我的数据进入的方式,我喜欢使用不完整数据的增量学习,但我甚至没有在文献中发现任何这两种情况,所以任何进行结构和参数学习和推理的东西都是好的回答.
似乎有一些非常独立且没有维护的python包大致朝着这个方向发展,但是我没有看到任何适度的近期(例如,我希望pandas用于这些计算是合理的,但OpenBayes几乎没有使用numpy)我看到的任何东西似乎完全没有增强分类器.
那么,我应该在哪里寻找一些实现森林增强贝叶斯分类器的工作?在python类中是否有一个很好的Pearl传递消息传递算法的实现,或者不适合增强的贝叶斯分类器?是否有一个可读的面向对象的实现,用于学习和推理其他语言的TAN贝叶斯分类器,可以转换为python?
我知道现有的包,但发现不合适
milk,它确实支持分类,但不支持贝叶斯分类器(我绝对需要分类和未指定功能的概率)pebl,这只是结构学习scikit-learn,它只学习朴素的贝叶斯分类器OpenBayes自从有人将其移植numarray到numpy文档后,它几乎没有变化,文档可以忽略不计.libpgm,声称支持一组甚至不同的东西.根据主要文档,它进行推理,结构和参数学习.除了似乎没有任何方法可以进行精确推理.bayesian信念网络允许建立通用的贝叶斯网络并实现对它们的推断(精确和近似),这意味着它可用于构建TAN,但其中没有学习算法,以及BN的构建方式意味着实现参数学习比假设的不同实现更困难.我是Weka的新手,在命令行上对Weka来说更新.我发现文档很差,我正在努力弄清楚要做的一些事情.例如,想要获取两个.arff文件,一个用于训练,一个用于测试,并获得测试数据中缺失标签的预测输出.
我怎样才能做到这一点?
我将此代码作为起始块
java -classpath weka.jar weka.classifiers.meta.FilteredClassifier
-t "training_file_with_missing_values.arff"
-T "test_file_with_missing_values.arff"
-F weka.filters.unsupervised.attribute.ReplaceMissingValues -- -c last
-W weka.classifiers.functions.MultilayerPerceptron -- -L 0.3 -M 0.2 -H a
Run Code Online (Sandbox Code Playgroud)
运行该代码给了我"非法选项-c last",我不知道为什么.我也不会使用MLP,因为当我从文本数据中获得几千个特征时,NN往往太慢.我知道如何将其更改为另一个分类器(如NB或libSVM,这样很好).
但是我不确定如何在一次调用中添加多个过滤器,因为我还需要添加StringToWordVector过滤器(可能还有重新排序过滤器以使类成为最后一个,而不是第一个属性).
然后我如何让它实际输出每个类的预测标签?然后将这些存储在初始数据的arff中.
我LogisticRegression()在scikit-learn高度不平衡的数据集中使用该 方法.我甚至把这个class_weight功能变成了auto.
我知道在Logistic回归中,应该可以知道特定一对类的阈值是多少.
是否有可能知道该LogisticRegression()方法设计的每个一对一类的阈值是多少?
我没有在文档页面中找到任何内容.
它是否默认将0.5值作为所有类的阈值应用,而不管参数值如何?
classification machine-learning scikit-learn logistic-regression
我用R插入符训练了一个线性回归模型.我现在正在尝试生成混淆矩阵并继续收到以下错误:
confusionMatrix.default(pred,测试$ Final)出错:数据和参考因子必须具有相同的级别数
EnglishMarks <- read.csv("E:/Subject Wise Data/EnglishMarks.csv",
header=TRUE)
inTrain<-createDataPartition(y=EnglishMarks$Final,p=0.7,list=FALSE)
training<-EnglishMarks[inTrain,]
testing<-EnglishMarks[-inTrain,]
predictionsTree <- predict(treeFit, testdata)
confusionMatrix(predictionsTree, testdata$catgeory)
modFit<-train(Final~UT1+UT2+HalfYearly+UT3+UT4,method="lm",data=training)
pred<-format(round(predict(modFit,testing)))
confusionMatrix(pred,testing$Final)
Run Code Online (Sandbox Code Playgroud)
生成混淆矩阵时会发生错误.两个对象的级别相同.我无法弄清问题是什么.它们的结构和水平如下.它们应该是一样的.任何帮助将非常感谢,因为它让我破解!
> str(pred)
chr [1:148] "85" "84" "87" "65" "88" "84" "82" "84" "65" "78" "78" "88" "85"
"86" "77" ...
> str(testing$Final)
int [1:148] 88 85 86 70 85 85 79 85 62 77 ...
> levels(pred)
NULL
> levels(testing$Final)
NULL
Run Code Online (Sandbox Code Playgroud) artificial-intelligence r classification machine-learning linear-regression
我正在使用批量梯度下降实现逻辑回归.输入样本有两类要分类.类是1和0.在训练数据时,我使用以下sigmoid函数:
t = 1 ./ (1 + exp(-z));
Run Code Online (Sandbox Code Playgroud)
哪里
z = x*theta
Run Code Online (Sandbox Code Playgroud)
我使用以下成本函数来计算成本,以确定何时停止培训.
function cost = computeCost(x, y, theta)
htheta = sigmoid(x*theta);
cost = sum(-y .* log(htheta) - (1-y) .* log(1-htheta));
end
Run Code Online (Sandbox Code Playgroud)
我在每一步的成本都是NaN,因为htheta在大多数情况下,值为1或0.我该怎么做才能确定每次迭代的成本价值?
这是逻辑回归的梯度下降代码:
function [theta,cost_history] = batchGD(x,y,theta,alpha)
cost_history = zeros(1000,1);
for iter=1:1000
htheta = sigmoid(x*theta);
new_theta = zeros(size(theta,1),1);
for feature=1:size(theta,1)
new_theta(feature) = theta(feature) - alpha * sum((htheta - y) .*x(:,feature))
end
theta = new_theta;
cost_history(iter) = computeCost(x,y,theta);
end
end
Run Code Online (Sandbox Code Playgroud) matlab classification machine-learning gradient-descent logistic-regression
我使用scikit-learn训练了ExtraTreesClassifier(gini索引),它非常适合我的需求.准确性不是很好,但使用10倍交叉验证,AUC为0.95.我想在我的工作中使用这个分类器.我对ML很新,所以如果我问你一些概念错误的话,请原谅我.
我绘制了一些ROC曲线,通过它,我似乎有一个特定的阈值,我的分类器开始表现良好.我想在拟合的分类器上设置这个值,所以每次我调用预测时,分类器都会使用该阈值,我可以相信FP和TP的速率.
我也来到这篇文章(scikit .predict()默认阈值),其中声明阈值不是分类器的通用概念.但由于ExtraTreesClassifier的方法是predict_proba,并且ROC曲线也与thresdholds定义有关,所以在我看来我应该可以指定它.
我没有找到任何参数,也没有找到任何类/接口来实现它.如何使用scikit-learn为训练有素的ExtraTreesClassifier(或任何其他人)设置阈值?
非常感谢,科利斯
我有班级不平衡问题,想要用成本敏感的学习来解决这个问题.
题
Scikit learn有2个选项,称为类权重和样本权重.样品重量实际上是选项2)和类重量选项1).选项2)是处理类不平衡的推荐方法.
我见过的用于分类任务的神经网络的大多数例子都使用softmax层作为输出激活函数.通常,其他隐藏单元使用sigmoid,tanh或ReLu函数作为激活函数.据我所知,在这里使用softmax函数也可以用数学方法计算出来.
classification machine-learning neural-network softmax activation-function