The problem is that the LogisticModelParameters serialization didn't setup a
type adapter for Vector.  Using the gson object from
the ModelSerializer resolves that issue.

On Mon, Nov 29, 2010 at 6:43 PM, Lance Norskog <[email protected]> wrote:

> I cannot help with the gson-1.3 problem. But about the gson-1.4
> problem: which vector class is it trying use? All of the Vector
> classes are required to have a no-arg constructor that makes a
> zero-length vector.
>
> Lance
>
> On Mon, Nov 29, 2010 at 3:43 AM, Rohan Anil (JIRA) <[email protected]>
> wrote:
> > In the trainlogistic example the JSON model file which is created is
> missing commas and making it unusable with runLogistic.
> >
> ----------------------------------------------------------------------------------------------------------------------------
> >
> >                 Key: MAHOUT-556
> >                 URL: https://issues.apache.org/jira/browse/MAHOUT-556
> >             Project: Mahout
> >          Issue Type: Bug
> >          Components: Classification
> >    Affects Versions: 0.5
> >         Environment: Ubuntu 10.10, Hadoop-0.20.2
> >            Reporter: Rohan Anil
> >            Priority: Minor
> >
> >
> >
> > Bug related to creation of the model when you run trainlogistic
> >
> >  Its creating the JSON model file  using the toJson function as
> illustrated below
> > --------------------------------
> > In,
> >  LogisticModelParameters.java
> > Function
> > void saveTo(Writer out)
> > {
> > ...
> > ..
> > String savedForm = gson.toJson(this);
> > ...
> > }
> > --------------------------------
> >
> > But this is not working as expected : -  String savedForm =
> gson.toJson(this);
> >
> >
> > For my experiment using a different dataset -
> >
> > I get the following model file :
> >
> >
> > {"targetVariable":"customer","typeMap":{"feature2":"n","feature3":"n",
> >
>  "feature1":"n"},"numFeatures":334,"useBias":true,"maxTargetCategories":
> >
>  2,"targetCategories":["0","1"],"lambda":1.0E-4,"learningRate":0.001,"lr":{
> >    "mu0":0.001,"decayFactor":0.999,"stepOffset":10,"forgettingExponent":
> >    -0.5,"perTermAnnealingOffset":20,"beta":{"rows":1,"cols":334,"data":[[
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
> >          0.0,6.741887291022263E-4,0.0,0.0,-53.6076187622054,0.0,0.0,0.0,
> >
>  0.0,0.0,0.0,0.0,0.0,0.0,0.0,5.031178185395536E-5,0.0,0.0,0.0,0.0,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.04383410529689268,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,
> >          0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]]},
> >    "numCategories":2,"step":260951,"updateSteps":{}"updateCounts":{}
> >    "lambda":1.0E-4,"prior":{}"sealed":true,"gradient":{}}}
> >
> >
> > If you notice the last part,
> >
> >  "numCategories":2,"step":260951,"updateSteps":{}"updateCounts":{}
> >    "lambda":1.0E-4,"prior":{}"sealed":true,"gradient":{}}}
> >
> > are missing commas between updateSteps,updateCounts  and Sealed variables
> >
> > Investigating further,
> > These come from the  AbstractOnlineLogisticRegression.java and the above
> variables are not initialized hence the wrong output by the toJson function.
> >
> > This is a bug with  - > gson.toJson function,  I see that I am using
> gson-1.3 and upgrading to 1.4  by modifying core/pom.xml fixes things, But
> runLogistic then complains about
> >
> > 10/11/29 03:29:43 WARN conf.Configuration: DEPRECATED: hadoop-site.xml
> found in the classpath. Usage of hadoop-site.xml is deprecated. Instead use
> core-site.xml, mapred-site.xml and hdfs-site.xml to override properties of
> core-default.xml, mapred-default.xml and hdfs-default.xml respectively
> > Exception in thread "main" java.lang.RuntimeException: No-args
> constructor for interface org.apache.mahout.math.Vector does not exist.
> Register an InstanceCreator with Gson for this type to fix this problem.
> >        at
> com.google.gson.MappedObjectConstructor.constructWithNoArgConstructor(MappedObjectConstructor.java:64)
> >        at
> com.google.gson.MappedObjectConstructor.construct(MappedObjectConstructor.java:53)
> >        at
> com.google.gson.JsonObjectDeserializationVisitor.constructTarget(JsonObjectDeserializationVisitor.java:41)
> >        at
> com.google.gson.JsonDeserializationVisitor.getTarget(JsonDeserializationVisitor.java:56)
> >        at
> com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:101)
> >        at
> com.google.gson.JsonDeserializationVisitor.visitChild(JsonDeserializationVisitor.java:107)
> >        at
> com.google.gson.JsonDeserializationVisitor.visitChildAsObject(JsonDeserializationVisitor.java:95)
> >        at
> com.google.gson.JsonObjectDeserializationVisitor.visitObjectField(JsonObjectDeserializationVisitor.java:62)
> >        at
> com.google.gson.ObjectNavigator.navigateClassFields(ObjectNavigator.java:156)
> >        at
> com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:123)
> >        at
> com.google.gson.JsonDeserializationVisitor.visitChild(JsonDeserializationVisitor.java:107)
> >        at
> com.google.gson.JsonDeserializationVisitor.visitChildAsObject(JsonDeserializationVisitor.java:95)
> >        at
> com.google.gson.JsonObjectDeserializationVisitor.visitObjectField(JsonObjectDeserializationVisitor.java:62)
> >        at
> com.google.gson.ObjectNavigator.navigateClassFields(ObjectNavigator.java:156)
> >        at
> com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:123)
> >        at
> com.google.gson.JsonDeserializationContextDefault.fromJsonObject(JsonDeserializationContextDefault.java:73)
> >        at
> com.google.gson.JsonDeserializationContextDefault.deserialize(JsonDeserializationContextDefault.java:51)
> >        at com.google.gson.Gson.fromJson(Gson.java:495)
> >        at com.google.gson.Gson.fromJson(Gson.java:444)
> >        at com.google.gson.Gson.fromJson(Gson.java:419)
> >        at
> org.apache.mahout.classifier.sgd.LogisticModelParameters.loadFrom(LogisticModelParameters.java:142)
> >        at
> org.apache.mahout.classifier.sgd.LogisticModelParameters.loadFrom(LogisticModelParameters.java:155)
> >        at
> org.apache.mahout.classifier.sgd.RunLogistic.main(RunLogistic.java:56)
> >        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >        at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> >        at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >        at java.lang.reflect.Method.invoke(Method.java:616)
> >        at
> org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:68)
> >        at
> org.apache.hadoop.util.ProgramDriver.driver(ProgramDriver.java:139)
> >        at
> org.apache.mahout.driver.MahoutDriver.main(MahoutDriver.java:182)
> >        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >        at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> >        at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> >        at java.lang.reflect.Method.invoke(Method.java:616)
> >        at org.apache.hadoop.util.RunJar.main(RunJar.java:156)
> >
> > Which I haven't had the time to investigate yet, Will post more results
> tomorrow.
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > --
> > This message is automatically generated by JIRA.
> > -
> > You can reply to this email to add a comment to the issue online.
> >
> >
>
>
>
> --
> Lance Norskog
> [email protected]
>

Reply via email to