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] >
