Hi Ted and all,
I've prepared a short document describing the current state of the
classification APIs and the proposed changes.
https://docs.google.com/document/d/1Rqn-8aMgK6g9UZuKyD2fpMOY3FJ1xGzE7HUNPCaSd7I/edit?usp=sharing
I'm eager to hear any feedback about it!
The document does not include anything about task order planning. In
fact I have a couple of questions about that: As we are talking about
refactoring, it would be quite natural to do the changes in a lot of
small commits. But, would that be possible or will the work have to be
packed in a few big commits? Also, will some committer be able to
periodically review the work? And, could the changes interfere with the
next version release?
Thanks!
Angel
El 20/05/2013 10:17, Ángel Martínez González escribió:
Hi,
I'm preparing a short text describing the current state of each
algorithm and the needed changes (also including the data
preprocessing and result evaluation modules). That will answer
question c)
I'll try to answer the other two here:
El 17/05/2013 9:37, Ted Dunning escribió:
Please lay out a plan before coding. The key questions will be
a) can you serialize a model efficiently?
That should not be a problem. The scope of these proposed changes is
only input and output data formats, not including the classification
models, so that would work just as before. Regarding input and output
data, the formats are similar to the ones used for clustering and also
feature hashing will be supported.
b) can you deal with the random forest and SGD models?
I've been looking into possible icompatibilities between classifiers
and I've found the following difficulties related to input format:
- The proposed input for trainers is SequenceFile<IntWritable,
VectorWritable>, where the key would be an instance id and the target
variable (class label) would be inside the vector. But, if feature
hashing is used, conflicts may happen with the target variable that
make it impossible to recover.
- SGD and Naive Bayes need binarized categorical features, while
Random Forests use categorical features encoded as integer levels. In
Random Forests, any categorical feature can be used as target
variable. In SGD and Naive Bayes, the target variable is provided to
the classifier outside the vector. Binarized features are not suitable
as target variables.
Maybe a possible solution for the two interrelated problems could be:
considering binarized categorical features as numerical, while
categorical variables will always be encoded as integer levels and in
SGD and Naive Bayes will only be used as target variables (or
ignored). The feature hashing framework would have to be modified so
that categorical variables have their positions in the vector reserved
and no conflicts involving them are possible. I think this is quite
similar to the case with "a few special fields (categories and such)
and then a bunch of encoded data" you commented in a previous mail.
How does it sound?
c) what are the real changes to the API needed?
On Thu, May 16, 2013 at 10:51 AM, Angel Martinez Gonzalez (JIRA) <
j...@apache.org> wrote:
[
https://issues.apache.org/jira/browse/MAHOUT-1179?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13659764#comment-13659764]
Angel Martinez Gonzalez commented on MAHOUT-1179:
-------------------------------------------------
Hi again,
With the goal of modifying all classifiers to use the formats proposed
above, I've started to work with Naive Bayes. In particular, I've
moved the
code related to evaluation (summary statistics, confusion matrix)
that was
executed at the end of TestNaiveBayesDriver to a separate
ClassifierEvaluationJob. The benefit of this is that
ClassifierEvaluationJob should be able in the future to take input
from any
classifier tester.
The current state of the work may be reviewed here:
https://github.com/amartgon/mahout/commit/519ae529e9932d1e1d0803d0731a7396daaa603b
There are still modifications to be made on Naive Bayes, such as:
-Modifying document id format from Text to IntWritable.
-Moving the "label index" out of TrainNaiveBayesJob.
Should I create a JIRA issue and submit this part? Or go on with the
work
at least till everything related to Naive Bayes is complete? I'd
like to
have some feedback before going on, to have an idea of whether there is
agreement/interest in this before investing a lot of time into possibly
useless work.
GSOC 2013: Refactor and improve the classification APIs
-------------------------------------------------------
Key: MAHOUT-1179
URL:https://issues.apache.org/jira/browse/MAHOUT-1179
Project: Mahout
Issue Type: New Feature
Reporter: Dan Filimon
Labels: gsoc2013, mentor
[via Andy Twigg]
Improve and unify the Mahout classification API. Also related to the
refactoring of the clustering APIs MAHOUT-1177.
The two APIs should be roughly the same, at least in
terms of input/output so that pipelining etc is easier. (cf
scikit-learn clustering/classifier/regression API)
Currently Mahout support:
- logistic regression
- Naive Bayes
- Random Forests
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA
administrators
For more information on JIRA,
see:http://www.atlassian.com/software/jira