Ignore:
Timestamp:
07/01/13 16:27:24 (10 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Cleanup of TLinearLearner/Classifier.

The training examples are sorted before training so the labels in
LIBLINEAR model match the order of class_var.values.

TLinearClassifier no longer has the 'examples' member, has a changed
constructor and (un)pickle signature.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • source/orange/lib_learner.cpp

    r11607 r11610  
    13291329 
    13301330 
    1331  
    1332 PyObject *LinearClassifier__reduce__(PyObject *self){ 
     1331PyObject * LinearClassifier_new(PyTypeObject* type, PyObject* args, PyObject* kwargs) BASED_ON(ClassifierFD, "(Domain, str) -> LinearClassifier") 
     1332{ 
     1333    PyTRY 
     1334        PDomain domain; 
     1335        char * model_string; 
     1336 
     1337        if (!PyArg_ParseTuple(args, "O&s:__new__", cc_Domain, &domain, &model_string)) { 
     1338            return NULL; 
     1339        } 
     1340        string buf(model_string); 
     1341        struct model * model = linear_load_model_alt(buf); 
     1342 
     1343        PLinearClassifier classifier = mlnew TLinearClassifier(domain, model); 
     1344 
     1345        return WrapOrange(classifier); 
     1346    PyCATCH 
     1347} 
     1348 
     1349 
     1350PyObject *LinearClassifier__reduce__(PyObject *self) 
     1351{ 
    13331352  PyTRY 
    13341353    CAST_TO(TLinearClassifier, classifier); 
     
    13361355    if (linear_save_model_alt(buff, classifier->getModel()) != 0) 
    13371356        raiseError("Could not save the model"); 
    1338     return Py_BuildValue("O(OOOs)N", getExportedFunction("__pickleLoaderLinearClassifier"), 
    1339                                     self->ob_type, 
    1340                                     WrapOrange(classifier->classVar), 
    1341                                     WrapOrange(classifier->examples), 
    1342                                     buff.c_str(), 
    1343                                     packOrangeDictionary(self)); 
    1344   PyCATCH 
    1345 } 
    1346  
    1347 PyObject *__pickleLoaderLinearClassifier(PyObject *, PyObject *args) PYARGS(METH_VARARGS, "(type, packed_data)") 
    1348 { 
    1349   PyTRY 
     1357 
     1358    return Py_BuildValue( 
     1359            "O(Os)N", 
     1360            self->ob_type, 
     1361            WrapOrange(classifier->domain), 
     1362            buff.c_str(), 
     1363            packOrangeDictionary(self)); 
     1364  PyCATCH 
     1365} 
     1366 
     1367/* 
     1368 * Deprecated. Left here so old pickled objects can be restored. 
     1369 * The old pickled arguments were: 
     1370 * 
     1371 *     (type(self), classVar, examples, model_string), 
     1372 */ 
     1373 
     1374PyObject *__pickleLoaderLinearClassifier(PyObject *, PyObject *args) PYARGS(METH_VARARGS, "(type, packed_data) Deprecated!!") 
     1375{ 
     1376  PyTRY 
     1377    //raiseWarning(PyExc_DeprecationWarning, "Deprecated pickle reconstructor") 
    13501378    PyTypeObject* type; 
    13511379    PVariable var; 
     
    13581386    if (!model) 
    13591387        raiseError("Could not load the model"); 
    1360     return WrapNewOrange(mlnew TLinearClassifier(var, examples, model), (PyTypeObject*)&PyOrLinearClassifier_Type); 
    1361   PyCATCH 
    1362 } 
     1388    return WrapNewOrange(mlnew TLinearClassifier(examples->domain, model), (PyTypeObject*)&PyOrLinearClassifier_Type); 
     1389  PyCATCH 
     1390} 
     1391 
     1392 
     1393PyObject * LinearClassifer_get_model_str(PyObject * self, PyObject *) PYARGS(METH_NOARGS, "() -> str") 
     1394{ 
     1395    PyTRY 
     1396        CAST_TO(TLinearClassifier, classifier); 
     1397        string buff; 
     1398        if (linear_save_model_alt(buff, classifier->getModel()) != 0) { 
     1399            raiseError("Could not convert the model to a string"); 
     1400        } 
     1401        return PyString_FromString(buff.c_str()); 
     1402    PyCATCH 
     1403} 
     1404 
    13631405 
    13641406/************* LIBSVM ************/ 
Note: See TracChangeset for help on using the changeset viewer.