From 78cfc5f4ef6daf196819f900234be7d5455bc3a1 Mon Sep 17 00:00:00 2001 From: Gil Date: Sat, 6 Jun 2020 14:50:02 +0100 Subject: [PATCH] Remove Machine subclasses from SWIG (#5057) * remove machine classes from swig * remove multiclass classes --- .ci/docker-steps.yml | 2 +- .../SupportVectorMachines.ipynb | 10 +-- .../multiclass/multiclass_reduction.ipynb | 42 ++++++---- .../src/multiclass/k_nearest_neighbours.sg.in | 6 +- .../large_margin_nearest_neighbours.sg.in | 6 +- .../python/classifier_multiclass_ecoc.py | 15 ++-- .../python/classifier_multiclassocas.py | 12 +-- .../python/kernel_histogram_word_string.py | 20 ++--- .../python/kernel_salzberg_word_string.py | 15 ++-- examples/undocumented/python/metric_lmnn.py | 10 +-- examples/undocumented/python/mkl_binclass.py | 29 +++---- .../undocumented/python/mkl_multiclass.py | 11 ++- ...multitask_clustered_logistic_regression.py | 19 ++--- .../transfer_multitask_logistic_regression.py | 2 +- src/interfaces/swig/Classifier.i | 71 +--------------- src/interfaces/swig/Classifier_includes.i | 37 +-------- src/interfaces/swig/Clustering.i | 9 -- src/interfaces/swig/Clustering_includes.i | 4 - src/interfaces/swig/Ensemble.i | 16 +--- src/interfaces/swig/Ensemble_includes.i | 7 -- src/interfaces/swig/Kernel.i | 43 +--------- src/interfaces/swig/Kernel_includes.i | 1 - src/interfaces/swig/Latent.i | 15 +--- src/interfaces/swig/Latent_includes.i | 7 -- src/interfaces/swig/Machine.i | 1 - src/interfaces/swig/Machine_extensions.i | 50 ----------- src/interfaces/swig/Multiclass.i | 38 +-------- src/interfaces/swig/Multiclass_includes.i | 13 --- src/interfaces/swig/Regression.i | 15 ---- src/interfaces/swig/Regression_includes.i | 9 -- src/interfaces/swig/bagging.i | 8 -- src/interfaces/swig/bagging_includes.i | 4 - src/interfaces/swig/shogun.i | 4 - src/shogun/classifier/mkl/MKL.cpp | 5 +- .../string/HistogramWordStringKernel.cpp | 83 ++++++++++--------- .../kernel/string/HistogramWordStringKernel.h | 6 +- .../string/SalzbergWordStringKernel.cpp | 22 +++-- .../kernel/string/SalzbergWordStringKernel.h | 4 +- src/shogun/machine/DistanceMachine.cpp | 3 - src/shogun/machine/LinearMulticlassMachine.h | 5 +- src/shogun/machine/MulticlassMachine.cpp | 5 -- src/shogun/multiclass/MulticlassOCAS.cpp | 12 +-- 42 files changed, 180 insertions(+), 516 deletions(-) delete mode 100644 src/interfaces/swig/Ensemble_includes.i delete mode 100644 src/interfaces/swig/Regression.i delete mode 100644 src/interfaces/swig/bagging.i delete mode 100644 src/interfaces/swig/bagging_includes.i diff --git a/.ci/docker-steps.yml b/.ci/docker-steps.yml index 66f46c8fd91..9f59a0d478f 100644 --- a/.ci/docker-steps.yml +++ b/.ci/docker-steps.yml @@ -112,7 +112,7 @@ steps: LD_LIBRARY_PATH=/build/src/shogun:$LD_LIBRARY_PATH workDir: '/src/doc/ipython-notebooks' containerCommand: | - /bin/bash -c "export PYTHONPATH=/build/src/interfaces/python:$PYTHONPATH; pip3 install wheel; pip3 install Pillow scikit-learn networkx opencv-python opencv-contrib-python jupyter; /src/scripts/test_notebooks.sh . $(grep -c ^processor /proc/cpuinfo)" + /bin/bash -c "export PYTHONPATH=/build/src/interfaces/python:$PYTHONPATH; pip3 install wheel; pip3 install Pillow scikit-learn networkx opencv-python opencv-contrib-python jupyter; /src/scripts/test_notebooks.sh . 1" detached: false - ${{ if ne(parameters.swig, 'true') }}: diff --git a/doc/ipython-notebooks/classification/SupportVectorMachines.ipynb b/doc/ipython-notebooks/classification/SupportVectorMachines.ipynb index 3c41f3e8e37..6d650463b94 100644 --- a/doc/ipython-notebooks/classification/SupportVectorMachines.ipynb +++ b/doc/ipython-notebooks/classification/SupportVectorMachines.ipynb @@ -555,7 +555,7 @@ " Y_.append(traindata[1][j])\n", " new_labels.append(trainlab[j])\n", " out1=svm1.apply(grid)\n", - " z1=out1.get_labels().reshape((size, size))\n", + " z1=out1.get(\"labels\").reshape((size, size))\n", " plt.jet()\n", " c=plt.pcolor(x1_, x2_, z1)\n", " plt.contour(x1_ , x2_, z1, linewidths=1, colors='black')\n", @@ -933,7 +933,7 @@ "metadata": {}, "outputs": [], "source": [ - "svm=sg.GMNPSVM(1, gaussian_kernel, labels)\n", + "svm=sg.create_machine(\"GMNPSVM\", C=1, kernel=gaussian_kernel, labels=labels)\n", "_=svm.train(feats_train)\n", "\n", "size=100\n", @@ -947,10 +947,10 @@ " for i in range(len(kernels)):\n", " plt.subplot(1,len(kernels),i+1)\n", " plt.title(kernels[i].get_name())\n", - " svm.set_kernel(kernels[i])\n", + " svm.put(\"kernel\", kernels[i])\n", " svm.train(feats_train)\n", " grid_out=svm.apply(grid)\n", - " z=grid_out.get_labels().reshape((size, size))\n", + " z=grid_out.get(\"labels\").reshape((size, size))\n", " plt.pcolor(x, y, z)\n", " plt.contour(x, y, z, linewidths=1, colors='black')\n", " plt.colorbar(c)\n", @@ -1001,7 +1001,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.7.1" } }, "nbformat": 4, diff --git a/doc/ipython-notebooks/multiclass/multiclass_reduction.ipynb b/doc/ipython-notebooks/multiclass/multiclass_reduction.ipynb index b5c5ad32f4f..87bb12448de 100644 --- a/doc/ipython-notebooks/multiclass/multiclass_reduction.ipynb +++ b/doc/ipython-notebooks/multiclass/multiclass_reduction.ipynb @@ -203,10 +203,13 @@ " bin_machine = sg.create_machine(\"LibLinear\", liblinear_solver_type=\"L2R_L2LOSS_SVC\",\n", " use_bias=True, C1=C, C2=C)\n", "\n", - " mc_machine = sg.LinearMulticlassMachine(strategy, feats_train, bin_machine, lab_train)\n", + " mc_machine = sg.create_machine(\"LinearMulticlassMachine\",\n", + " multiclass_strategy=strategy, \n", + " machine=bin_machine, \n", + " labels=lab_train)\n", "\n", " t_begin = time.process_time()\n", - " mc_machine.train()\n", + " mc_machine.train(feats_train)\n", " t_train = time.process_time() - t_begin\n", "\n", " t_begin = time.process_time()\n", @@ -236,11 +239,11 @@ "source": [ "print(\"\\nOne-vs-Rest\")\n", "print(\"=\"*60)\n", - "evaluate(sg.MulticlassOneVsRestStrategy(), 5.0)\n", + "evaluate(sg.create_multiclass_strategy(\"MulticlassOneVsRestStrategy\"), 5.0)\n", "\n", "print(\"\\nOne-vs-One\")\n", "print(\"=\"*60)\n", - "evaluate(sg.MulticlassOneVsOneStrategy(), 2.0)" + "evaluate(sg.create_multiclass_strategy(\"MulticlassOneVsOneStrategy\"), 2.0)" ] }, { @@ -466,7 +469,11 @@ " \n", " classifier = sg.create_machine(\"LibSVM\", epsilon=epsilon)\n", "\n", - " mc_machine = sg.KernelMulticlassMachine(strategy, kernel, classifier, lab_train)\n", + " mc_machine = sg.create_machine(\"KernelMulticlassMachine\",\n", + " multiclass_strategy=strategy, \n", + " kernel=kernel, \n", + " machine=classifier,\n", + " labels=lab_train)\n", "\n", " t_begin = time.process_time()\n", " mc_machine.train()\n", @@ -485,7 +492,7 @@ "\n", "print(\"\\nOne-vs-Rest\")\n", "print(\"=\"*60)\n", - "evaluate_multiclass_kernel(sg.MulticlassOneVsRestStrategy())" + "evaluate_multiclass_kernel(sg.create_multiclass_strategy(\"MulticlassOneVsRestStrategy\"))" ] }, { @@ -599,7 +606,11 @@ " \n", "classifier=sg.create_machine(\"LibSVM\", epsilon=epsilon)\n", "\n", - "mc_machine=sg.KernelMulticlassMachine(sg.MulticlassOneVsRestStrategy(), kernel, classifier, labels)\n", + "mc_machine=sg.create_machine(\"KernelMulticlassMachine\",\n", + " multiclass_strategy=sg.create_multiclass_strategy(\"MulticlassOneVsRestStrategy\"),\n", + " kernel=kernel, \n", + " machine=classifier, \n", + " labels=labels)\n", "\n", "mc_machine.train()\n", "\n", @@ -612,8 +623,8 @@ "out=mc_machine.apply_multiclass(grid) #main output\n", "z=out.get(\"labels\").reshape((size, size))\n", "\n", - "sub_out0=mc_machine.get_submachine_outputs(0) #first submachine\n", - "sub_out1=mc_machine.get_submachine_outputs(1) #second submachine\n", + "sub_out0=sg.as_machine(mc_machine.get(\"machines\", 0)).apply_binary() #first submachine\n", + "sub_out1=sg.as_machine(mc_machine.get(\"machines\", 1)).apply_binary() #second submachine\n", "\n", "z0=sub_out0.get_labels().reshape((size, size))\n", "z1=sub_out1.get_labels().reshape((size, size))\n", @@ -655,14 +666,17 @@ "bin_machine = sg.create_machine(\"LibLinear\", liblinear_solver_type=\"L2R_L2LOSS_SVC\",\n", " use_bias=True, C1=C, C2=C)\n", "\n", - "mc_machine1 = sg.LinearMulticlassMachine(sg.MulticlassOneVsOneStrategy(), feats_tr, bin_machine, labels)\n", - "mc_machine1.train()\n", + "mc_machine1 = sg.create_machine(\"LinearMulticlassMachine\",\n", + " multiclass_strategy=sg.create_multiclass_strategy(\"MulticlassOneVsOneStrategy\"),\n", + " machine=bin_machine, \n", + " labels=labels)\n", + "mc_machine1.train(feats_tr)\n", "\n", "out1=mc_machine1.apply_multiclass(grid) #main output\n", "z1=out1.get_labels().reshape((size, size))\n", "\n", - "sub_out10=mc_machine1.get_submachine_outputs(0) #first submachine\n", - "sub_out11=mc_machine1.get_submachine_outputs(1) #second submachine\n", + "sub_out10=sg.as_machine(mc_machine.get(\"machines\", 0)).apply_binary() #first submachine\n", + "sub_out11=sg.as_machine(mc_machine.get(\"machines\", 1)).apply_binary() #second submachine\n", "\n", "z10=sub_out10.get_labels().reshape((size, size))\n", "z11=sub_out11.get_labels().reshape((size, size))\n", @@ -714,7 +728,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.7.1" } }, "nbformat": 4, diff --git a/examples/meta/src/multiclass/k_nearest_neighbours.sg.in b/examples/meta/src/multiclass/k_nearest_neighbours.sg.in index 26fcb3fe50f..83751db9532 100644 --- a/examples/meta/src/multiclass/k_nearest_neighbours.sg.in +++ b/examples/meta/src/multiclass/k_nearest_neighbours.sg.in @@ -6,8 +6,8 @@ CSVFile f_labels_test("@SHOGUN_DATA@/classifier_4class_2d_linear_labels_test.dat #![create_features] Features features_train = create_features(f_feats_train) Features features_test = create_features(f_feats_test) -MulticlassLabels labels_train(f_labels_train) -MulticlassLabels labels_test(f_labels_test) +Labels labels_train = create_labels(f_labels_train) +Labels labels_test = create_labels(f_labels_test) #![create_features] #![choose_distance] @@ -16,7 +16,7 @@ Distance d = create_distance("EuclideanDistance", lhs=features_train, rhs=featur #![create_instance] int k = 3 -KNN knn(k, d, labels_train) +Machine knn = create_machine("KNN", k=k, distance=d, labels=labels_train) #![create_instance] #![train_and_apply] diff --git a/examples/meta/src/multiclass/large_margin_nearest_neighbours.sg.in b/examples/meta/src/multiclass/large_margin_nearest_neighbours.sg.in index ef0ee038f7f..03f86353276 100644 --- a/examples/meta/src/multiclass/large_margin_nearest_neighbours.sg.in +++ b/examples/meta/src/multiclass/large_margin_nearest_neighbours.sg.in @@ -6,8 +6,8 @@ CSVFile f_labels_test("@SHOGUN_DATA@/classifier_4class_2d_linear_labels_test.dat #![create_features] Features features_train = create_features(f_feats_train) Features features_test = create_features(f_feats_test) -MulticlassLabels labels_train(f_labels_train) -MulticlassLabels labels_test(f_labels_test) +Labels labels_train = create_labels(f_labels_train) +Labels labels_test = create_labels(f_labels_test) #![create_features] #![create_instance] @@ -21,7 +21,7 @@ Distance lmnn_distance = lmnn.get_distance() #![train_metric] #![train_and_apply] -KNN knn(k, lmnn_distance,labels_train) +Machine knn = create_machine("KNN", k=k, distance=lmnn_distance, labels=labels_train) knn.train() MulticlassLabels labels_predict = knn.apply_multiclass(features_test) #![train_and_apply] diff --git a/examples/undocumented/python/classifier_multiclass_ecoc.py b/examples/undocumented/python/classifier_multiclass_ecoc.py index bf33831ff2f..075309d2b3e 100644 --- a/examples/undocumented/python/classifier_multiclass_ecoc.py +++ b/examples/undocumented/python/classifier_multiclass_ecoc.py @@ -12,8 +12,6 @@ def classifier_multiclass_ecoc (fm_train_real=traindat,fm_test_real=testdat,label_train_multiclass=label_traindat,label_test_multiclass=label_testdat,lawidth=2.1,C=1,epsilon=1e-5): - from shogun import ECOCStrategy, LinearMulticlassMachine - from shogun import MulticlassLabels import shogun as sg def nonabstract_class(name): @@ -30,11 +28,11 @@ def nonabstract_class(name): fea_train = sg.create_features(fm_train_real) fea_test = sg.create_features(fm_test_real) - gnd_train = MulticlassLabels(label_train_multiclass) + gnd_train = sg.create_labels(label_train_multiclass) if label_test_multiclass is None: gnd_test = None else: - gnd_test = MulticlassLabels(label_test_multiclass) + gnd_test = sg.create_labels(label_test_multiclass) base_classifier = sg.create_machine("LibLinear", liblinear_solver_type="L2R_L2LOSS_SVC", @@ -54,9 +52,10 @@ def run_ecoc(ier, idr): encoder.put('labels', gnd_train) encoder.put('features', fea_train) - strategy = ECOCStrategy(encoder, decoder) - classifier = LinearMulticlassMachine(strategy, fea_train, base_classifier, gnd_train) - classifier.train() + strategy = sg.ECOCStrategy(encoder, decoder) + classifier = sg.create_machine("LinearMulticlassMachine", multiclass_strategy=strategy, + machine=base_classifier, labels=gnd_train) + classifier.train(fea_train) label_pred = classifier.apply(fea_test) if gnd_test is not None: evaluator = sg.create_evaluation("MulticlassAccuracy") @@ -64,7 +63,7 @@ def run_ecoc(ier, idr): else: acc = None - return (classifier.get_num_machines(), acc) + return (len(classifier.get("machines")), acc) for ier in range(len(encoders)): diff --git a/examples/undocumented/python/classifier_multiclassocas.py b/examples/undocumented/python/classifier_multiclassocas.py index 3a7af56bb30..8febc57ec6a 100644 --- a/examples/undocumented/python/classifier_multiclassocas.py +++ b/examples/undocumented/python/classifier_multiclassocas.py @@ -4,12 +4,12 @@ def classifier_multiclassocas (num_vec=10,num_class=3,distance=15,width=2.1,C=1,epsilon=1e-5,seed=1): from shogun import MulticlassLabels + import shogun as sg try: - from shogun import MulticlassOCAS + sg.create_machine("MulticlassOCAS") except ImportError: print("MulticlassOCAS not available") return - import shogun as sg # reproducible results random.seed(seed) @@ -26,12 +26,12 @@ def classifier_multiclassocas (num_vec=10,num_class=3,distance=15,width=2.1,C=1, feats_train=sg.create_features(fm_train) feats_test=sg.create_features(fm_test) - labels=MulticlassLabels(label_train) + labels=sg.create_labels(label_train) - classifier = MulticlassOCAS(C,feats_train,labels) - classifier.train() + classifier = sg.create_machine("MulticlassOCAS", labels=labels, C=C) + classifier.train(feats_train) - out = classifier.apply(feats_test).get_labels() + out = classifier.apply(feats_test).get("labels") #print label_test #print out return out,classifier diff --git a/examples/undocumented/python/kernel_histogram_word_string.py b/examples/undocumented/python/kernel_histogram_word_string.py index 92b955b63e2..068b16b7cc6 100644 --- a/examples/undocumented/python/kernel_histogram_word_string.py +++ b/examples/undocumented/python/kernel_histogram_word_string.py @@ -9,9 +9,9 @@ def kernel_histogram_word_string (fm_train_dna=traindat,fm_test_dna=testdat,label_train_dna=label_traindat,order=3,ppseudo_count=1,npseudo_count=1): - from shogun import StringCharFeatures, StringWordFeatures, DNA, BinaryLabels - from shogun import HistogramWordStringKernel, AvgDiagKernelNormalizer - from shogun import PluginEstimate#, MSG_DEBUG + from shogun import StringCharFeatures, StringWordFeatures, DNA + from shogun import AvgDiagKernelNormalizer + import shogun as sg charfeat=StringCharFeatures(DNA) #charfeat.io.set_loglevel(MSG_DEBUG) @@ -24,17 +24,15 @@ def kernel_histogram_word_string (fm_train_dna=traindat,fm_test_dna=testdat,labe feats_test=StringWordFeatures(charfeat.get_alphabet()) feats_test.obtain_from_char(charfeat, order-1, order, 0, False) - pie=PluginEstimate(ppseudo_count,npseudo_count) - labels=BinaryLabels(label_train_dna) - pie.set_labels(labels) - pie.set_features(feats_train) - pie.train() + labels=sg.create_labels(label_train_dna) + pie=sg.create_machine("PluginEstimate", pos_pseudo=ppseudo_count, neg_pseudo=npseudo_count, labels=labels) + pie.train(feats_train) - kernel=HistogramWordStringKernel(feats_train, feats_train, pie) + kernel=sg.create_kernel("HistogramWordStringKernel", estimate=pie) + kernel.init(feats_train, feats_train) km_train=kernel.get_kernel_matrix() kernel.init(feats_train, feats_test) - pie.set_features(feats_test) - pie.apply().get_labels() + pie.apply(feats_test).get("labels") km_test=kernel.get_kernel_matrix() return km_train,km_test,kernel diff --git a/examples/undocumented/python/kernel_salzberg_word_string.py b/examples/undocumented/python/kernel_salzberg_word_string.py index 88a4773896e..1c77115bb7b 100644 --- a/examples/undocumented/python/kernel_salzberg_word_string.py +++ b/examples/undocumented/python/kernel_salzberg_word_string.py @@ -10,7 +10,7 @@ def kernel_salzberg_word_string (fm_train_dna=traindat,fm_test_dna=testdat,label order=3,gap=0,reverse=False): from shogun import StringCharFeatures, StringWordFeatures, DNA, BinaryLabels from shogun import SalzbergWordStringKernel - from shogun import PluginEstimate + import shogun as sg charfeat=StringCharFeatures(fm_train_dna, DNA) feats_train=StringWordFeatures(charfeat.get_alphabet()) @@ -20,18 +20,15 @@ def kernel_salzberg_word_string (fm_train_dna=traindat,fm_test_dna=testdat,label feats_test=StringWordFeatures(charfeat.get_alphabet()) feats_test.obtain_from_char(charfeat, order-1, order, gap, reverse) - pie=PluginEstimate() - labels=BinaryLabels(label_train_dna) - pie.set_labels(labels) - pie.set_features(feats_train) - pie.train() + labels=sg.create_labels(label_train_dna) + pie=sg.create_machine("PluginEstimate", labels=labels) + pie.train(feats_train) - kernel=SalzbergWordStringKernel(feats_train, feats_train, pie, labels) + kernel=sg.SalzbergWordStringKernel(feats_train, feats_train, pie, labels) km_train=kernel.get_kernel_matrix() kernel.init(feats_train, feats_test) - pie.set_features(feats_test) - pie.apply().get_labels() + pie.apply(feats_test).get("labels") km_test=kernel.get_kernel_matrix() return km_train,km_test,kernel diff --git a/examples/undocumented/python/metric_lmnn.py b/examples/undocumented/python/metric_lmnn.py index 5c58f6995c4..d8dc8cbfd34 100644 --- a/examples/undocumented/python/metric_lmnn.py +++ b/examples/undocumented/python/metric_lmnn.py @@ -8,7 +8,7 @@ def metric_lmnn(train_fname=traindat,test_fname=testdat,label_train_fname=label_traindat,k=3): try: - from shogun import MulticlassLabels,LMNN,KNN + from shogun import LMNN except ImportError: return import shogun as sg @@ -16,17 +16,17 @@ def metric_lmnn(train_fname=traindat,test_fname=testdat,label_train_fname=label_ # wrap features and labels into Shogun objects feats_train=sg.create_features(sg.read_csv(train_fname)) feats_test=sg.create_features(sg.read_csv(test_fname)) - labels=MulticlassLabels(sg.read_csv(label_train_fname)) + labels=sg.create_labels(sg.read_csv(label_train_fname)) # LMNN - lmnn=LMNN(feats_train,labels,k) + lmnn=sg.LMNN(feats_train,labels,k) lmnn.train() lmnn_distance=lmnn.get_distance() # perform classification with KNN - knn=KNN(k,lmnn_distance,labels) + knn=sg.create_machine("KNN", k=k,distance=lmnn_distance,labels=labels) knn.train() - output=knn.apply(feats_test).get_labels() + output=knn.apply(feats_test).get("labels") return lmnn,output diff --git a/examples/undocumented/python/mkl_binclass.py b/examples/undocumented/python/mkl_binclass.py index 7719b177e54..cfc3bbfd645 100644 --- a/examples/undocumented/python/mkl_binclass.py +++ b/examples/undocumented/python/mkl_binclass.py @@ -1,15 +1,11 @@ #!/usr/bin/env python -from shogun import CombinedFeatures, BinaryLabels -from shogun import CustomKernel -from shogun import MKLClassification import shogun as sg from tools.load import LoadMatrix lm=LoadMatrix() #only run example if SVMLight is included as LibSVM solver crashes in MKLClassification try: - from shogun import create_machine - create_machine("SVMLight") + sg.create_machine("SVMLight") except SystemError: print("SVMLight not available") exit(0) @@ -39,29 +35,30 @@ def mkl_binclass (fm_train_real=traindat,fm_test_real=testdat,fm_label_twoclass K_test = tkernel.get_kernel_matrix() # create combined train features - feats_train = CombinedFeatures() + feats_train = sg.CombinedFeatures() feats_train.append_feature_obj(sg.create_features(fm_train_real)) # and corresponding combined kernel kernel = sg.create_kernel("CombinedKernel") - kernel.add("kernel_array", CustomKernel(K_train)) + kernel.add("kernel_array", sg.CustomKernel(K_train)) kernel.add("kernel_array", sg.create_kernel("PolyKernel", cache_size=10, degree=2)) kernel.init(feats_train, feats_train) # train mkl - labels = BinaryLabels(fm_label_twoclass) - mkl = MKLClassification() + labels = sg.create_labels(fm_label_twoclass) + mkl = sg.create_machine("MKLClassification") # which norm to use for MKL - mkl.set_mkl_norm(1) #2,3 + mkl.put("mkl_norm", 1) #2,3 # set cost (neg, pos) - mkl.set_C(1, 1) + mkl.put("C1", 1) + mkl.put("C2", 1) # set kernel and labels - mkl.set_kernel(kernel) - mkl.set_labels(labels) + mkl.put("kernel", kernel) + mkl.put("labels", labels) # train mkl.train() @@ -73,17 +70,17 @@ def mkl_binclass (fm_train_real=traindat,fm_test_real=testdat,fm_label_twoclass # test # create combined test features - feats_pred = CombinedFeatures() + feats_pred = sg.CombinedFeatures() feats_pred.append_feature_obj(sg.create_features(fm_test_real)) # and corresponding combined kernel kernel = sg.create_kernel("CombinedKernel") - kernel.add("kernel_array", CustomKernel(K_test)) + kernel.add("kernel_array", sg.CustomKernel(K_test)) kernel.add("kernel_array", sg.create_kernel("PolyKernel", cache_size=10, degree=2)) kernel.init(feats_train, feats_pred) # and classify - mkl.set_kernel(kernel) + mkl.put("kernel", kernel) mkl.apply() return mkl.apply(),kernel diff --git a/examples/undocumented/python/mkl_multiclass.py b/examples/undocumented/python/mkl_multiclass.py index 0def7d5fd5c..eb09cdedf8a 100644 --- a/examples/undocumented/python/mkl_multiclass.py +++ b/examples/undocumented/python/mkl_multiclass.py @@ -13,7 +13,6 @@ def mkl_multiclass (fm_train_real, fm_test_real, label_train_multiclass, width, C, epsilon, num_threads, mkl_epsilon, mkl_norm): from shogun import CombinedFeatures, MulticlassLabels - from shogun import MKLMulticlass import shogun as sg kernel = sg.create_kernel("CombinedKernel") @@ -45,18 +44,18 @@ def mkl_multiclass (fm_train_real, fm_test_real, label_train_multiclass, labels = MulticlassLabels(label_train_multiclass) - mkl = MKLMulticlass(C, kernel, labels) + mkl = sg.create_machine("MKLMulticlass", C=C, kernel=kernel, labels=labels, + mkl_eps=mkl_epsilon, mkl_norm=mkl_norm) + + mkl.get("machine").put("epsilon", epsilon) - mkl.set_epsilon(epsilon); mkl.get_global_parallel().set_num_threads(num_threads) - mkl.set_mkl_epsilon(mkl_epsilon) - mkl.set_mkl_norm(mkl_norm) mkl.train() kernel.init(feats_train, feats_test) - out = mkl.apply().get_labels() + out = mkl.apply().get("labels") return out if __name__ == '__main__': diff --git a/examples/undocumented/python/transfer_multitask_clustered_logistic_regression.py b/examples/undocumented/python/transfer_multitask_clustered_logistic_regression.py index 2cd927ebd14..b202cd0782b 100644 --- a/examples/undocumented/python/transfer_multitask_clustered_logistic_regression.py +++ b/examples/undocumented/python/transfer_multitask_clustered_logistic_regression.py @@ -11,34 +11,33 @@ parameter_list = [[traindat,testdat,label_traindat]] def transfer_multitask_clustered_logistic_regression (fm_train=traindat,fm_test=testdat,label_train=label_traindat): - from shogun import BinaryLabels, Task, TaskGroup, MSG_DEBUG + import shogun as sg try: - from shogun import MultitaskClusteredLogisticRegression + sg.create_machine("MultitaskClusteredLogisticRegression") except ImportError: print("MultitaskClusteredLogisticRegression not available") exit() - import shogun as sg features = sg.create_features(hstack((traindat,sin(traindat),cos(traindat)))) - labels = BinaryLabels(hstack((label_train,label_train,label_train))) + labels = sg.BinaryLabels(hstack((label_train,label_train,label_train))) n_vectors = features.get_num_vectors() - task_one = Task(0,n_vectors//3) - task_two = Task(n_vectors//3,2*n_vectors//3) - task_three = Task(2*n_vectors//3,n_vectors) - task_group = TaskGroup() + task_one = sg.Task(0,n_vectors//3) + task_two = sg.Task(n_vectors//3,2*n_vectors//3) + task_three = sg.Task(2*n_vectors//3,n_vectors) + task_group = sg.TaskGroup() task_group.append_task(task_one) task_group.append_task(task_two) task_group.append_task(task_three) - mtlr = MultitaskClusteredLogisticRegression(1.0,100.0,features,labels,task_group,2) + mtlr = sg.MultitaskClusteredLogisticRegression(1.0,100.0,features,labels,task_group,2) #mtlr.io.set_loglevel(MSG_DEBUG) mtlr.set_tolerance(1e-3) # use 1e-2 tolerance mtlr.set_max_iter(100) mtlr.train() mtlr.set_current_task(0) #print mtlr.get_w() - out = mtlr.apply_regression().get_labels() + out = mtlr.apply_regression().get("labels") return out diff --git a/examples/undocumented/python/transfer_multitask_logistic_regression.py b/examples/undocumented/python/transfer_multitask_logistic_regression.py index cef1067dcc7..24991dffbe8 100644 --- a/examples/undocumented/python/transfer_multitask_logistic_regression.py +++ b/examples/undocumented/python/transfer_multitask_logistic_regression.py @@ -34,7 +34,7 @@ def transfer_multitask_logistic_regression (fm_train=traindat,fm_test=testdat,la mtlr.set_tolerance(1e-2) # use 1e-2 tolerance mtlr.train() mtlr.set_current_task(0) - out = mtlr.apply().get_labels() + out = mtlr.apply().get("labels") return out diff --git a/src/interfaces/swig/Classifier.i b/src/interfaces/swig/Classifier.i index e393949873b..9da45046125 100644 --- a/src/interfaces/swig/Classifier.i +++ b/src/interfaces/swig/Classifier.i @@ -23,84 +23,15 @@ /* Remove C Prefix */ %shared_ptr(shogun::Machine) %shared_ptr(shogun::KernelMachine) -%shared_ptr(shogun::SVM) -%shared_ptr(shogun::GNPPSVM) -#ifdef USE_GPL_SHOGUN -%shared_ptr(shogun::GPBTSVM) -#endif //USE_GPL_SHOGUN -%shared_ptr(shogun::LDA) -%shared_ptr(shogun::DenseRealDispatch) %shared_ptr(shogun::LinearMachine) -%shared_ptr(shogun::IterativeMachine) -%shared_ptr(shogun::OnlineLinearMachine) -%shared_ptr(shogun::LPBoost) -%shared_ptr(shogun::LPM) -%shared_ptr(shogun::MPDSVM) -%shared_ptr(shogun::OnlineSVMSGD) -%shared_ptr(shogun::Perceptron) -%shared_ptr(shogun::AveragedPerceptron) -#ifndef HAVE_PYTHON %shared_ptr(shogun::SVM) -#endif -#ifdef USE_GPL_SHOGUN -%shared_ptr(shogun::SVMLin) -%shared_ptr(shogun::SVMOcas) -#endif //USE_GPL_SHOGUN -%shared_ptr(shogun::SVMSGD) -%shared_ptr(shogun::SGDQN) -#ifdef USE_GPL_SHOGUN -%shared_ptr(shogun::WDSVMOcas) -#endif //USE_GPL_SHOGUN -%shared_ptr(shogun::PluginEstimate) -%shared_ptr(shogun::MKL) -%shared_ptr(shogun::MKLClassification) -%shared_ptr(shogun::MKLOneClass) -%shared_ptr(shogun::VowpalWabbit) -#ifdef USE_GPL_SHOGUN -%shared_ptr(shogun::FeatureBlockLogisticRegression) -#endif //USE_GPL_SHOGUN %shared_ptr(shogun::DirectorLinearMachine) %shared_ptr(shogun::DirectorKernelMachine) /* Include Class Headers to make them visible from within the target language */ %include -%include -%include %include -%include -%include %include -%template(LinearIterativeMachine) shogun::IterativeMachine; -%include -%include -#ifdef USE_GPL_SHOGUN -%include -#endif //USE_GPL_SHOGUN -%template(DenseDispatchLDA) shogun::DenseRealDispatch; -%include - -%include -%include -%include -%include -%include -%include -#ifdef USE_GPL_SHOGUN -%include -%include -%include -#endif //USE_GPL_SHOGUN -%include -#ifdef USE_GPL_SHOGUN -%include -#endif //USE_GPL_SHOGUN -%include -%include -%include -%include - -#ifdef USE_GPL_SHOGUN -%include -#endif //USE_GPL_SHOGUN +%include %include %include diff --git a/src/interfaces/swig/Classifier_includes.i b/src/interfaces/swig/Classifier_includes.i index 87879a96096..b49c605757a 100644 --- a/src/interfaces/swig/Classifier_includes.i +++ b/src/interfaces/swig/Classifier_includes.i @@ -1,44 +1,9 @@ %{ #include - #include - #ifdef USE_GPL_SHOGUN - #include - #endif //USE_GPL_SHOGUN - #include - #include -#ifdef USE_SVMLIGHT - #include - #include -#endif //USE_SVMLIGHT + #include #include - #include - #include - #include - #include - #include - #include - #include #include - #include -#ifdef USE_GPL_SHOGUN - #include - #include - #include -#endif //USE_GPL_SHOGUN - #include -#ifdef USE_GPL_SHOGUN - #include -#endif //USE_GPL_SHOGUN - #include - #include - #include - #include - -#ifdef USE_GPL_SHOGUN - #include -#endif //USE_GPL_SHOGUN #include #include - #include %} diff --git a/src/interfaces/swig/Clustering.i b/src/interfaces/swig/Clustering.i index 31481b1dc7f..8029f2d1beb 100644 --- a/src/interfaces/swig/Clustering.i +++ b/src/interfaces/swig/Clustering.i @@ -14,18 +14,9 @@ /* Remove C Prefix */ %shared_ptr(shogun::DistanceMachine) SHARED_RANDOM_INTERFACE(shogun::DistanceMachine) -%shared_ptr(shogun::Hierarchical) -%shared_ptr(shogun::KMeans) -%shared_ptr(shogun::KMeansBase) -%shared_ptr(shogun::KMeansMiniBatch) %shared_ptr(shogun::GMM) /* Include Class Headers to make them visible from within the target language */ -%include %include RANDOM_INTERFACE(DistanceMachine) -%include -%include -%include -%include %include diff --git a/src/interfaces/swig/Clustering_includes.i b/src/interfaces/swig/Clustering_includes.i index 209678a2f8d..85ce19b1b8d 100644 --- a/src/interfaces/swig/Clustering_includes.i +++ b/src/interfaces/swig/Clustering_includes.i @@ -1,8 +1,4 @@ %{ #include -#include -#include -#include -#include #include %} diff --git a/src/interfaces/swig/Ensemble.i b/src/interfaces/swig/Ensemble.i index 9ad27129932..12057610b8b 100644 --- a/src/interfaces/swig/Ensemble.i +++ b/src/interfaces/swig/Ensemble.i @@ -4,21 +4,7 @@ * Authors: Sergey Lisitsyn */ -/* Remove C Prefix */ %shared_ptr(shogun::CombinationRule) -%shared_ptr(shogun::WeightedMajorityVote) - -%shared_ptr(shogun::MajorityVote) - -%shared_ptr(shogun::MeanRule) - - /* Include Class Headers to make them visible from within the target language */ -%include - -%include - -%include - -%include +%include \ No newline at end of file diff --git a/src/interfaces/swig/Ensemble_includes.i b/src/interfaces/swig/Ensemble_includes.i deleted file mode 100644 index 58b79c7f3b0..00000000000 --- a/src/interfaces/swig/Ensemble_includes.i +++ /dev/null @@ -1,7 +0,0 @@ -%{ - #include - #include - #include - #include -%} - diff --git a/src/interfaces/swig/Kernel.i b/src/interfaces/swig/Kernel.i index 61074a4ebd0..7f664d9ff64 100644 --- a/src/interfaces/swig/Kernel.i +++ b/src/interfaces/swig/Kernel.i @@ -28,19 +28,12 @@ /* Remove C Prefix */ %shared_ptr(shogun::Kernel) %shared_ptr(shogun::KernelNormalizer) -%shared_ptr(shogun::PyramidChi2) -%shared_ptr(shogun::ANOVAKernel) -%shared_ptr(shogun::AUCKernel) -%shared_ptr(shogun::BesselKernel) %shared_ptr(shogun::AvgDiagKernelNormalizer) %shared_ptr(shogun::RidgeKernelNormalizer) -%shared_ptr(shogun::CircularKernel) -%shared_ptr(shogun::Chi2Kernel) %shared_ptr(shogun::CombinedKernel) -%shared_ptr(shogun::ProductKernel) %shared_ptr(shogun::CommUlongStringKernel) %shared_ptr(shogun::CommWordStringKernel) -%shared_ptr(shogun::ConstKernel) + PROTOCOLS_CUSTOMKERNEL(CustomKernel, float32_t, "f\0", NPY_FLOAT32) %shared_ptr(shogun::CustomKernel) @@ -49,65 +42,35 @@ PROTOCOLS_CUSTOMKERNEL(CustomKernel, float32_t, "f\0", NPY_FLOAT32) #ifdef USE_GPL_SHOGUN %shared_ptr(shogun::DistantSegmentsKernel) #endif //USE_GPL_SHOGUN -%shared_ptr(shogun::WaveKernel) -%shared_ptr(shogun::CauchyKernel) %shared_ptr(shogun::DiceKernelNormalizer) -%shared_ptr(shogun::ExponentialKernel) %shared_ptr(shogun::ScatterKernelNormalizer) %shared_ptr(shogun::VarianceKernelNormalizer) -%shared_ptr(shogun::DistanceKernel) %shared_ptr(shogun::FixedDegreeStringKernel) -%shared_ptr(shogun::ShiftInvariantKernel) -%shared_ptr(shogun::GaussianCompactKernel) -%shared_ptr(shogun::DirectorKernel) -%shared_ptr(shogun::WaveletKernel) -%shared_ptr(shogun::GaussianShiftKernel) -%shared_ptr(shogun::GaussianShortRealKernel) -%shared_ptr(shogun::HistogramIntersectionKernel) %shared_ptr(shogun::HistogramWordStringKernel) +%shared_ptr(shogun::DirectorKernel) %shared_ptr(shogun::IdentityKernelNormalizer) -%shared_ptr(shogun::InverseMultiQuadricKernel) -%shared_ptr(shogun::LinearKernel) %shared_ptr(shogun::LinearStringKernel) %shared_ptr(shogun::SparseSpatialSampleStringKernel) -%shared_ptr(shogun::SplineKernel) %shared_ptr(shogun::LocalAlignmentStringKernel) %shared_ptr(shogun::LocalityImprovedStringKernel) %shared_ptr(shogun::MatchWordStringKernel) %shared_ptr(shogun::OligoStringKernel) %shared_ptr(shogun::PolyMatchStringKernel) -%shared_ptr(shogun::PowerKernel) -%shared_ptr(shogun::LogKernel) %shared_ptr(shogun::GaussianMatchStringKernel) %shared_ptr(shogun::SNPStringKernel) %shared_ptr(shogun::RegulatoryModulesStringKernel) %shared_ptr(shogun::PolyMatchWordStringKernel) %shared_ptr(shogun::SalzbergWordStringKernel) -%shared_ptr(shogun::SigmoidKernel) -%shared_ptr(shogun::SphericalKernel) %shared_ptr(shogun::SimpleLocalityImprovedStringKernel) %shared_ptr(shogun::SqrtDiagKernelNormalizer) %shared_ptr(shogun::TanimotoKernelNormalizer) %shared_ptr(shogun::TensorProductPairKernel) -%shared_ptr(shogun::TStudentKernel) %shared_ptr(shogun::WeightedCommWordStringKernel) %shared_ptr(shogun::WeightedDegreePositionStringKernel) %shared_ptr(shogun::WeightedDegreeStringKernel) -%shared_ptr(shogun::WeightedDegreeRBFKernel) %shared_ptr(shogun::SpectrumMismatchRBFKernel) %shared_ptr(shogun::ZeroMeanCenterKernelNormalizer) -%shared_ptr(shogun::DotKernel) -%shared_ptr(shogun::RationalQuadraticKernel) -%shared_ptr(shogun::MultiquadricKernel) -%shared_ptr(shogun::JensenShannonKernel) - -%shared_ptr(shogun::ExponentialARDKernel) -%shared_ptr(shogun::GaussianARDKernel) - -%shared_ptr(shogun::GaussianARDSparseKernel) - %shared_ptr(shogun::SubsequenceStringKernel) -%shared_ptr(shogun::PeriodicKernel) #ifdef USE_FLOAT64 %shared_ptr(shogun::StringKernel) @@ -136,8 +99,6 @@ PROTOCOLS_CUSTOMKERNEL(CustomKernel, float32_t, "f\0", NPY_FLOAT32) /* Include Class Headers to make them visible from within the target language */ %include -%include - /* Templated Class SparseKernel */ %include namespace shogun diff --git a/src/interfaces/swig/Kernel_includes.i b/src/interfaces/swig/Kernel_includes.i index d6791bb5ef1..c304d1c1af6 100644 --- a/src/interfaces/swig/Kernel_includes.i +++ b/src/interfaces/swig/Kernel_includes.i @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include diff --git a/src/interfaces/swig/Latent.i b/src/interfaces/swig/Latent.i index a3fb06163d5..2de942a0d19 100644 --- a/src/interfaces/swig/Latent.i +++ b/src/interfaces/swig/Latent.i @@ -5,26 +5,13 @@ */ #if defined(USE_SWIG_DIRECTORS) && defined(SWIGPYTHON) -%feature("director") shogun::CDirectorLatentModel; +%feature("director") shogun::DirectorLatentModel; #endif -/* Remove C Prefix */ %shared_ptr(shogun::LatentModel) - -%shared_ptr(shogun::LinearLatentMachine) - -%shared_ptr(shogun::LatentSVM) - %shared_ptr(shogun::DirectorLatentModel) /* Include Class Headers to make them visible from within the target language */ %include - %include - -%include - -#ifdef USE_GPL_SHOGUN -%include -#endif //USE_GPL_SHOGUN diff --git a/src/interfaces/swig/Latent_includes.i b/src/interfaces/swig/Latent_includes.i index 237cfc16420..b7fd72c47eb 100644 --- a/src/interfaces/swig/Latent_includes.i +++ b/src/interfaces/swig/Latent_includes.i @@ -1,12 +1,5 @@ %{ #include - #include - - #include - -#ifdef USE_GPL_SHOGUN - #include -#endif //USE_GPL_SHOGUN %} diff --git a/src/interfaces/swig/Machine.i b/src/interfaces/swig/Machine.i index 74c85230028..c676dcd49a8 100644 --- a/src/interfaces/swig/Machine.i +++ b/src/interfaces/swig/Machine.i @@ -9,4 +9,3 @@ SHARED_RANDOM_INTERFACE(shogun::Machine) %shared_ptr(shogun::LinearMachine) %shared_ptr(shogun::DistanceMachine) %shared_ptr(shogun::IterativeMachine) - diff --git a/src/interfaces/swig/Machine_extensions.i b/src/interfaces/swig/Machine_extensions.i index db4c6fc314d..0ce26338fa1 100644 --- a/src/interfaces/swig/Machine_extensions.i +++ b/src/interfaces/swig/Machine_extensions.i @@ -61,30 +61,8 @@ } %enddef -APPLY_MULTICLASS(shogun::MulticlassMachine); -APPLY_MULTICLASS(shogun::KernelMulticlassMachine); -APPLY_MULTICLASS(shogun::LinearMulticlassMachine); -APPLY_MULTICLASS(shogun::DistanceMachine); - -APPLY_BINARY(shogun::LinearMachine); -APPLY_BINARY(shogun::KernelMachine); -#ifdef USE_GPL_SHOGUN -APPLY_BINARY(shogun::WDSVMOcas); -#endif //USE_GPL_SHOGUN -APPLY_BINARY(shogun::PluginEstimate); #ifdef USE_GPL_SHOGUN APPLY_BINARY(shogun::GaussianProcessClassification); -#endif //USE_GPL_SHOGUN - -#if USE_SVMLIGHT -APPLY_REGRESSION(shogun::SVRLight); -#endif //USE_SVMLIGHT -APPLY_REGRESSION(shogun::MKLRegression); -#ifdef HAVE_LAPACK -APPLY_REGRESSION(shogun::LeastSquaresRegression); -APPLY_REGRESSION(shogun::LeastAngleRegression); -#endif -#ifdef USE_GPL_SHOGUN APPLY_REGRESSION(shogun::GaussianProcessRegression); #endif //USE_GPL_SHOGUN @@ -99,34 +77,6 @@ APPLY_STRUCTURED(shogun::DualLibQPBMSOSVM); APPLY_LATENT(shogun::LatentSVM); #endif //USE_GPL_SHOGUN -%rename(apply_generic) Machine::apply(std::shared_ptr data=NULL); -%rename(apply_generic) MulticlassMachine::apply(std::shared_ptr data=NULL); -%rename(apply_generic) KernelMulticlassMachine::apply(std::shared_ptr data=NULL); -%rename(apply_generic) LinearMulticlassMachine::apply(std::shared_ptr data=NULL); -%rename(apply_generic) DistanceMachineMachine::apply(std::shared_ptr data=NULL); -%rename(apply_generic) LinearMachine::apply(std::shared_ptr data=NULL); -%rename(apply_generic) KernelMachine::apply(std::shared_ptr data=NULL); -#ifdef USE_GPL_SHOGUN -%rename(apply_generic) WDSVMOcas::apply(std::shared_ptr data=NULL); -#endif //USE_GPL_SHOGUN -%rename(apply_generic) PluginEstimate::apply(std::shared_ptr data=NULL); -#ifdef USE_SVMLIGHT -%rename(apply_generic) SVRLight::apply(std::shared_ptr data=NULL); -#endif //USE_SVMLIGHT -%rename(apply_generic) MKLRegression::apply(std::shared_ptr data=NULL); -#ifdef HAVE_LAPACK -%rename(apply_generic) LeastSquaresRegression::apply(std::shared_ptr data=NULL); -%rename(apply_generic) LeastAngleRegression::apply(std::shared_ptr data=NULL); -#endif -%rename(apply_generic) GaussianProcessRegression::apply(std::shared_ptr data=NULL); - -%rename(apply_generic) StructuredOutputMachine::apply(std::shared_ptr data=NULL); -%rename(apply_generic) LinearStructuredOutputMachine::apply(std::shared_ptr data=NULL); -%rename(apply_generic) KernelStructuredOutputMachine::apply(std::shared_ptr data=NULL); -#ifdef USE_MOSEK -%rename(apply_generic) CPrimalMosekSOSVM::apply(std::shared_ptr data=NULL); -#endif - #undef APPLY_MULTICLASS #undef APPLY_BINARY #undef APPLY_REGRESSION diff --git a/src/interfaces/swig/Multiclass.i b/src/interfaces/swig/Multiclass.i index 979e8e65f3d..ceecbfe8a51 100644 --- a/src/interfaces/swig/Multiclass.i +++ b/src/interfaces/swig/Multiclass.i @@ -34,15 +34,8 @@ SHARED_RANDOM_INTERFACE(shogun::ConditionalProbabilityTree) %shared_ptr(shogun::ThresholdRejectionStrategy) %shared_ptr(shogun::DixonQTestRejectionStrategy) %shared_ptr(shogun::MulticlassStrategy) -%shared_ptr(shogun::MulticlassOneVsRestStrategy) -%shared_ptr(shogun::MulticlassOneVsOneStrategy) -%shared_ptr(shogun::MulticlassMachine) -%shared_ptr(shogun::NativeMulticlassMachine) %shared_ptr(shogun::LinearMulticlassMachine) -%shared_ptr(shogun::KernelMulticlassMachine) -%shared_ptr(shogun::MulticlassSVM) -SHARED_RANDOM_INTERFACE(shogun::MulticlassSVM) -%shared_ptr(shogun::MKLMulticlass) + %shared_ptr(shogun::ECOCStrategy) %shared_ptr(shogun::ECOCEncoder) @@ -64,20 +57,9 @@ SHARED_RANDOM_INTERFACE(shogun::ECOCEncoder) #ifdef USE_GPL_SHOGUN %shared_ptr(shogun::MulticlassTreeGuidedLogisticRegression) %shared_ptr(shogun::MulticlassLogisticRegression) -%shared_ptr(shogun::MulticlassOCAS) #endif //USE_GPL_SHOGUN %shared_ptr(shogun::MulticlassLibLinear) -%shared_ptr(shogun::LaRank) -%shared_ptr(shogun::ScatterSVM) -%shared_ptr(shogun::GMNPSVM) -%shared_ptr(shogun::KNN) -%shared_ptr(shogun::GaussianNaiveBayes) -%shared_ptr(shogun::QDA) -%shared_ptr(shogun::MCLDA) - -%shared_ptr(shogun::ShareBoost) - /* Include Class Headers to make them visible from within the target language */ %include %include @@ -117,15 +99,6 @@ RANDOM_INTERFACE(ConditionalProbabilityTree) %include %include -%include -%include -%include -%include -%include -%include -%include -RANDOM_INTERFACE(MulticlassSVM) -%include %include RANDOM_INTERFACE(ECOCEncoder) @@ -148,13 +121,4 @@ RANDOM_INTERFACE(ECOCEncoder) #ifdef USE_GPL_SHOGUN %include %include -%include -%include #endif // USE_GPL_SHOGUN -%include -%include -%include -%include -%include -%include -%include diff --git a/src/interfaces/swig/Multiclass_includes.i b/src/interfaces/swig/Multiclass_includes.i index 058546a6c54..bfb7929d8c3 100644 --- a/src/interfaces/swig/Multiclass_includes.i +++ b/src/interfaces/swig/Multiclass_includes.i @@ -19,9 +19,6 @@ #include #include - #include - #include - #include #include #include #include @@ -49,15 +46,5 @@ #ifdef USE_GPL_SHOGUN #include #include - #include - #include #endif //USE_GPL_SHOGUN - #include - #include - #include - #include - #include - #include - #include - #include %} diff --git a/src/interfaces/swig/Regression.i b/src/interfaces/swig/Regression.i deleted file mode 100644 index 29c6da2a2fe..00000000000 --- a/src/interfaces/swig/Regression.i +++ /dev/null @@ -1,15 +0,0 @@ -/* - * This software is distributed under BSD 3-clause license (see LICENSE file). - * - * Authors: Sergey Lisitsyn - */ - -/* Remove C Prefix */ -%shared_ptr(shogun::Regression) -%shared_ptr(shogun::MKL) -%shared_ptr(shogun::MKLRegression) - -/* Include Class Headers to make them visible from within the target language */ -%include -%include -%include diff --git a/src/interfaces/swig/Regression_includes.i b/src/interfaces/swig/Regression_includes.i index 80090afff5c..02408186f76 100644 --- a/src/interfaces/swig/Regression_includes.i +++ b/src/interfaces/swig/Regression_includes.i @@ -1,13 +1,4 @@ %{ - #include - #include - #include #include #include - #include - #include -#ifdef USE_SVMLIGHT - #include - #include -#endif //USE_SVMLIGHT %} diff --git a/src/interfaces/swig/bagging.i b/src/interfaces/swig/bagging.i deleted file mode 100644 index 76f40e2ed6a..00000000000 --- a/src/interfaces/swig/bagging.i +++ /dev/null @@ -1,8 +0,0 @@ -/* remove C prefix */ -%shared_ptr(shogun::BaggingMachine) -%shared_ptr(shogun::RandomForest) - -/* include class headers to make them visible from target language */ -RANDOM_INTERFACE(Machine) -%include -%include diff --git a/src/interfaces/swig/bagging_includes.i b/src/interfaces/swig/bagging_includes.i deleted file mode 100644 index b92d487cb91..00000000000 --- a/src/interfaces/swig/bagging_includes.i +++ /dev/null @@ -1,4 +0,0 @@ -%{ - #include - #include -%} diff --git a/src/interfaces/swig/shogun.i b/src/interfaces/swig/shogun.i index 0873970f23a..6da30a8e154 100644 --- a/src/interfaces/swig/shogun.i +++ b/src/interfaces/swig/shogun.i @@ -92,9 +92,7 @@ namespace shogun %include "Metric_includes.i" %include "Minimizer_includes.i" %include "GaussianProcess_includes.i" -%include "Ensemble_includes.i" %include "NeuralNets_includes.i" -%include "bagging_includes.i" %shared_ptr(shogun::Machine) %shared_ptr(shogun::Kernel) @@ -134,7 +132,6 @@ namespace shogun %include "Kernel.i" %include "Distribution.i" %include "Classifier.i" -%include "Regression.i" %include "Clustering.i" %include "Structure.i" %include "Multiclass.i" @@ -147,7 +144,6 @@ namespace shogun %include "GaussianProcess.i" %include "Ensemble.i" %include "NeuralNets.i" -%include "bagging.i" %include "Machine_extensions.i" %include "ParameterObserver.i" diff --git a/src/shogun/classifier/mkl/MKL.cpp b/src/shogun/classifier/mkl/MKL.cpp index e9dcb18b666..2622df91913 100644 --- a/src/shogun/classifier/mkl/MKL.cpp +++ b/src/shogun/classifier/mkl/MKL.cpp @@ -274,7 +274,9 @@ void MKL::register_params() SG_ADD(&svm, "svm", "wrapper svm", ParameterProperties::SETTING); SG_ADD(&C_mkl, "C_mkl", "C mkl", ParameterProperties::HYPER); - SG_ADD(&mkl_norm, "mkl_norm", "norm used in mkl", ParameterProperties::HYPER); + SG_ADD(&mkl_norm, "mkl_norm", "norm used in mkl", + ParameterProperties::HYPER | ParameterProperties::CONSTRAIN, + SG_CONSTRAINT(greater_than_or_equal(1.0))); SG_ADD(&ent_lambda, "ent_lambda", "elastic net sparsity trade-off parameter", ParameterProperties::HYPER); SG_ADD(&mkl_block_norm, "mkl_block_norm", "mkl sparse trade-off parameter", @@ -509,7 +511,6 @@ bool MKL::train_machine(std::shared_ptr data) void MKL::set_mkl_norm(float64_t norm) { - if (norm<1) error("Norm must be >= 1, e.g., 1-norm is the standard MKL; norms>1 nonsparse MKL"); diff --git a/src/shogun/kernel/string/HistogramWordStringKernel.cpp b/src/shogun/kernel/string/HistogramWordStringKernel.cpp index 5ed750fa72c..b14ac30a42c 100644 --- a/src/shogun/kernel/string/HistogramWordStringKernel.cpp +++ b/src/shogun/kernel/string/HistogramWordStringKernel.cpp @@ -21,29 +21,25 @@ HistogramWordStringKernel::HistogramWordStringKernel() init(); } -HistogramWordStringKernel::HistogramWordStringKernel(int32_t size, std::shared_ptr pie) -: StringKernel(size) +HistogramWordStringKernel::HistogramWordStringKernel(int32_t size, const std::shared_ptr& pie) +: HistogramWordStringKernel() { - init(); - - estimate=std::move(pie); - + auto casted_pie = std::dynamic_pointer_cast(pie); + require(casted_pie, "Expected Machine to be PluginEstimate"); + estimate=std::move(casted_pie); + set_cache_size(size); } HistogramWordStringKernel::HistogramWordStringKernel( - const std::shared_ptr>& l, const std::shared_ptr>& r, std::shared_ptr pie) -: StringKernel() + const std::shared_ptr>& l, const std::shared_ptr>& r, + const std::shared_ptr& pie) +: HistogramWordStringKernel(10, pie) { - init(); - - estimate=std::move(pie); init(l, r); } HistogramWordStringKernel::~HistogramWordStringKernel() { - - SG_FREE(variance); SG_FREE(mean); if (sqrtdiag_lhs != sqrtdiag_rhs) @@ -62,6 +58,7 @@ bool HistogramWordStringKernel::init(std::shared_ptr p_l, std::shared_ StringKernel::init(p_l,p_r); auto l=std::static_pointer_cast>(p_l); auto r=std::static_pointer_cast>(p_r); + auto plugin_estimate = std::static_pointer_cast(estimate); ASSERT(l) ASSERT(r) @@ -123,12 +120,12 @@ bool HistogramWordStringKernel::init(std::shared_ptr p_l, std::shared_ num_params=llen*((int32_t) l->get_num_symbols()); num_params2=llen*((int32_t) l->get_num_symbols())+rlen*((int32_t) r->get_num_symbols()); - if ((!estimate) || (!estimate->check_models())) + if ((!plugin_estimate) || (!plugin_estimate->check_models())) { error("no estimate available"); return false ; } ; - if (num_params2!=estimate->get_num_params()) + if (num_params2!=plugin_estimate->get_num_params()) { error("number of parameters of estimate and feature representation do not match"); return false ; @@ -155,13 +152,13 @@ bool HistogramWordStringKernel::init(std::shared_ptr p_l, std::shared_ bool free_vec; uint16_t* vec=l->get_feature_vector(i, len, free_vec); - mean[0]+=estimate->posterior_log_odds_obsolete(vec, len)/num_vectors; + mean[0]+=plugin_estimate->posterior_log_odds_obsolete(vec, len)/num_vectors; for (int32_t j=0; jlog_derivative_pos_obsolete(vec[j], j)/num_vectors; - mean[idx+num_params] += estimate->log_derivative_neg_obsolete(vec[j], j)/num_vectors; + mean[idx] += plugin_estimate->log_derivative_pos_obsolete(vec[j], j)/num_vectors; + mean[idx+num_params] += plugin_estimate->log_derivative_neg_obsolete(vec[j], j)/num_vectors; } l->free_feature_vector(vec, i, free_vec); @@ -174,7 +171,7 @@ bool HistogramWordStringKernel::init(std::shared_ptr p_l, std::shared_ bool free_vec; uint16_t* vec=l->get_feature_vector(i, len, free_vec); - variance[0] += Math::sq(estimate->posterior_log_odds_obsolete(vec, len)-mean[0])/num_vectors; + variance[0] += Math::sq(plugin_estimate->posterior_log_odds_obsolete(vec, len)-mean[0])/num_vectors; for (int32_t j=0; j p_l, std::shared_ } else { - variance[idx] += Math::sq(estimate->log_derivative_pos_obsolete(vec[j], j) + variance[idx] += Math::sq(plugin_estimate->log_derivative_pos_obsolete(vec[j], j) -mean[idx])/num_vectors; - variance[idx+num_params] += Math::sq(estimate->log_derivative_neg_obsolete(vec[j], j) + variance[idx+num_params] += Math::sq(plugin_estimate->log_derivative_neg_obsolete(vec[j], j) -mean[idx+num_params])/num_vectors; } } @@ -225,13 +222,13 @@ bool HistogramWordStringKernel::init(std::shared_ptr p_l, std::shared_ for (int32_t j=0; jlog_derivative_pos_obsolete(avec[j], j)*mean[a_idx]/variance[a_idx] ; - result -= estimate->log_derivative_neg_obsolete(avec[j], j)*mean[a_idx+num_params]/variance[a_idx+num_params] ; + result -= plugin_estimate->log_derivative_pos_obsolete(avec[j], j)*mean[a_idx]/variance[a_idx] ; + result -= plugin_estimate->log_derivative_neg_obsolete(avec[j], j)*mean[a_idx+num_params]/variance[a_idx+num_params] ; } ld_mean_lhs[i]=result ; // precompute posterior-log-odds - plo_lhs[i] = estimate->posterior_log_odds_obsolete(avec, alen)-mean[0] ; + plo_lhs[i] = plugin_estimate->posterior_log_odds_obsolete(avec, alen)-mean[0] ; l->free_feature_vector(avec, i, free_avec); } ; @@ -250,13 +247,13 @@ bool HistogramWordStringKernel::init(std::shared_ptr p_l, std::shared_ for (int32_t j=0; jlog_derivative_pos_obsolete(avec[j], j)*mean[a_idx]/variance[a_idx] ; - result -= estimate->log_derivative_neg_obsolete(avec[j], j)*mean[a_idx+num_params]/variance[a_idx+num_params] ; + result -= plugin_estimate->log_derivative_pos_obsolete(avec[j], j)*mean[a_idx]/variance[a_idx] ; + result -= plugin_estimate->log_derivative_neg_obsolete(avec[j], j)*mean[a_idx+num_params]/variance[a_idx+num_params] ; } ld_mean_rhs[i]=result ; // precompute posterior-log-odds - plo_rhs[i] = estimate->posterior_log_odds_obsolete(avec, alen)-mean[0] ; + plo_rhs[i] = plugin_estimate->posterior_log_odds_obsolete(avec, alen)-mean[0] ; r->free_feature_vector(avec, i, free_avec); } ; } ; @@ -357,6 +354,7 @@ float64_t HistogramWordStringKernel::compute(int32_t idx_a, int32_t idx_b) bool free_avec, free_bvec; uint16_t* avec=std::static_pointer_cast>(lhs)->get_feature_vector(idx_a, alen, free_avec); uint16_t* bvec=std::static_pointer_cast>(rhs)->get_feature_vector(idx_b, blen, free_bvec); + auto plugin_estimate = std::static_pointer_cast(estimate); // can only deal with strings of same length ASSERT(alen==blen) @@ -368,9 +366,9 @@ float64_t HistogramWordStringKernel::compute(int32_t idx_a, int32_t idx_b) if (avec[i]==bvec[i]) { int32_t a_idx = compute_index(i, avec[i]) ; - float64_t dd = estimate->log_derivative_pos_obsolete(avec[i], i) ; + float64_t dd = plugin_estimate->log_derivative_pos_obsolete(avec[i], i) ; result += dd*dd/variance[a_idx] ; - dd = estimate->log_derivative_neg_obsolete(avec[i], i) ; + dd = plugin_estimate->log_derivative_neg_obsolete(avec[i], i) ; result += dd*dd/variance[a_idx+num_params] ; } ; } @@ -436,7 +434,14 @@ void HistogramWordStringKernel::init() /*m_parameters->add_vector(&variance, &num_params2, "variance");*/ watch_param("variance", &variance, &num_params2); - SG_ADD((std::shared_ptr*) &estimate, "estimate", "Plugin Estimate."); + SG_ADD(&estimate, "estimate", "Plugin Estimate."); + + add_callback_function("estimate", [this](){ + if (!std::dynamic_pointer_cast(estimate)) { + error("Expected Machine to be PluginEstimate"); + estimate.reset(); + } + }); } #ifdef DEBUG_HWSK_COMPUTATION @@ -446,11 +451,13 @@ float64_t CHistogramWordStringKernel::compute_slow(int32_t idx_a, int32_t idx_b) bool free_avec, free_bvec; uint16_t* avec=std::static_pointer_cast>(lhs)->get_feature_vector(idx_a, alen, free_avec); uint16_t* bvec=std::static_pointer_cast>(rhs)->get_feature_vector(idx_b, blen, free_bvec); + auto plugin_estimate = std::static_pointer_cast(estimate); + // can only deal with strings of same length ASSERT(alen==blen) - float64_t result=(estimate->posterior_log_odds_obsolete(avec, alen)-mean[0])* - (estimate->posterior_log_odds_obsolete(bvec, blen)-mean[0])/(variance[0]); + float64_t result=(plugin_estimate->posterior_log_odds_obsolete(avec, alen)-mean[0])* + (plugin_estimate->posterior_log_odds_obsolete(bvec, blen)-mean[0])/(variance[0]); result+= sum_m2_s2 ; // does not contain 0-th element for (int32_t i=0; ilog_derivative_pos_obsolete(avec[i], i) ; + float64_t dd = plugin_estimate->log_derivative_pos_obsolete(avec[i], i) ; result += dd*dd/variance[a_idx] ; - dd = estimate->log_derivative_neg_obsolete(avec[i], i) ; + dd = plugin_estimate->log_derivative_neg_obsolete(avec[i], i) ; result += dd*dd/variance[a_idx+num_params] ; } ; - result -= estimate->log_derivative_pos_obsolete(avec[i], i)*mean[a_idx]/variance[a_idx] ; - result -= estimate->log_derivative_pos_obsolete(bvec[i], i)*mean[b_idx]/variance[b_idx] ; - result -= estimate->log_derivative_neg_obsolete(avec[i], i)*mean[a_idx+num_params]/variance[a_idx+num_params] ; - result -= estimate->log_derivative_neg_obsolete(bvec[i], i)*mean[b_idx+num_params]/variance[b_idx+num_params] ; + result -= plugin_estimate->log_derivative_pos_obsolete(avec[i], i)*mean[a_idx]/variance[a_idx] ; + result -= plugin_estimate->log_derivative_pos_obsolete(bvec[i], i)*mean[b_idx]/variance[b_idx] ; + result -= plugin_estimate->log_derivative_neg_obsolete(avec[i], i)*mean[a_idx+num_params]/variance[a_idx+num_params] ; + result -= plugin_estimate->log_derivative_neg_obsolete(bvec[i], i)*mean[b_idx+num_params]/variance[b_idx+num_params] ; } if (initialized) diff --git a/src/shogun/kernel/string/HistogramWordStringKernel.h b/src/shogun/kernel/string/HistogramWordStringKernel.h index b860af419ba..404dc44086c 100644 --- a/src/shogun/kernel/string/HistogramWordStringKernel.h +++ b/src/shogun/kernel/string/HistogramWordStringKernel.h @@ -31,7 +31,7 @@ class HistogramWordStringKernel: public StringKernel * @param size cache size * @param pie plugin estimate */ - HistogramWordStringKernel(int32_t size, std::shared_ptr pie); + HistogramWordStringKernel(int32_t size, const std::shared_ptr& pie); /** constructor * @@ -41,7 +41,7 @@ class HistogramWordStringKernel: public StringKernel */ HistogramWordStringKernel( const std::shared_ptr>& l, const std::shared_ptr>& r, - std::shared_ptr pie); + const std::shared_ptr& pie); virtual ~HistogramWordStringKernel(); @@ -95,7 +95,7 @@ class HistogramWordStringKernel: public StringKernel protected: /** plugin estimate */ - std::shared_ptr estimate; + std::shared_ptr estimate; /** mean */ float64_t* mean; diff --git a/src/shogun/kernel/string/SalzbergWordStringKernel.cpp b/src/shogun/kernel/string/SalzbergWordStringKernel.cpp index ae24f5907ad..6adc6b82551 100644 --- a/src/shogun/kernel/string/SalzbergWordStringKernel.cpp +++ b/src/shogun/kernel/string/SalzbergWordStringKernel.cpp @@ -23,11 +23,15 @@ SalzbergWordStringKernel::SalzbergWordStringKernel() init(); } -SalzbergWordStringKernel::SalzbergWordStringKernel(int32_t size, std::shared_ptr pie, const std::shared_ptr& labels) -: StringKernel(size) +SalzbergWordStringKernel::SalzbergWordStringKernel(int32_t size, const std::shared_ptr& pie, + const std::shared_ptr& labels) +: SalzbergWordStringKernel() { - init(); - estimate=std::move(pie); + auto casted_pie = std::dynamic_pointer_cast(pie); + require(casted_pie, "Expected Machine to be PluginEstimate"); + estimate=std::move(casted_pie); + + set_cache_size(size); if (labels) set_prior_probs_from_labels(labels); @@ -35,15 +39,9 @@ SalzbergWordStringKernel::SalzbergWordStringKernel(int32_t size, std::shared_ptr SalzbergWordStringKernel::SalzbergWordStringKernel( const std::shared_ptr>& l, const std::shared_ptr>& r, - const std::shared_ptr& pie, const std::shared_ptr& labels) -: StringKernel(10),estimate(pie) + const std::shared_ptr& pie, const std::shared_ptr& labels) +: SalzbergWordStringKernel(10, pie, labels) { - init(); - estimate=pie; - - if (labels) - set_prior_probs_from_labels(labels); - init(l, r); } diff --git a/src/shogun/kernel/string/SalzbergWordStringKernel.h b/src/shogun/kernel/string/SalzbergWordStringKernel.h index f34b9209727..7c6ef6ef8d1 100644 --- a/src/shogun/kernel/string/SalzbergWordStringKernel.h +++ b/src/shogun/kernel/string/SalzbergWordStringKernel.h @@ -36,7 +36,7 @@ class SalzbergWordStringKernel: public StringKernel * @param pie the plugin estimate * @param labels optional labels to set prior from */ - SalzbergWordStringKernel(int32_t size, std::shared_ptr pie, const std::shared_ptr& labels=NULL); + SalzbergWordStringKernel(int32_t size, const std::shared_ptr& pie, const std::shared_ptr& labels=NULL); /** constructor * @@ -47,7 +47,7 @@ class SalzbergWordStringKernel: public StringKernel */ SalzbergWordStringKernel( const std::shared_ptr>& l, const std::shared_ptr>& r, - const std::shared_ptr&pie, const std::shared_ptr& labels=NULL); + const std::shared_ptr& pie, const std::shared_ptr& labels=NULL); virtual ~SalzbergWordStringKernel(); diff --git a/src/shogun/machine/DistanceMachine.cpp b/src/shogun/machine/DistanceMachine.cpp index b4a28052fb3..75310c62149 100644 --- a/src/shogun/machine/DistanceMachine.cpp +++ b/src/shogun/machine/DistanceMachine.cpp @@ -148,14 +148,11 @@ float64_t DistanceMachine::apply_one(int32_t num) void DistanceMachine::set_distance(std::shared_ptr d) { - - distance=std::move(d); } std::shared_ptr DistanceMachine::get_distance() const { - return distance; } diff --git a/src/shogun/machine/LinearMulticlassMachine.h b/src/shogun/machine/LinearMulticlassMachine.h index b7270da4124..47fbff4a252 100644 --- a/src/shogun/machine/LinearMulticlassMachine.h +++ b/src/shogun/machine/LinearMulticlassMachine.h @@ -28,7 +28,7 @@ class LinearMulticlassMachine : public MulticlassMachine { public: /** default constructor */ - LinearMulticlassMachine() : MulticlassMachine(), m_features(NULL) + LinearMulticlassMachine() : MulticlassMachine() { SG_ADD(&m_features, "m_features", "Feature object."); } @@ -40,7 +40,7 @@ class LinearMulticlassMachine : public MulticlassMachine * @param labs labels */ LinearMulticlassMachine(std::shared_ptr strategy, std::shared_ptr features, std::shared_ptr machine, std::shared_ptr labs) : - MulticlassMachine(strategy, machine,labs), m_features(NULL) + MulticlassMachine(strategy, machine,labs) { set_features(features->as()); SG_ADD(&m_features, "m_features", "Feature object."); @@ -49,7 +49,6 @@ class LinearMulticlassMachine : public MulticlassMachine /** destructor */ virtual ~LinearMulticlassMachine() { - } /** get name */ diff --git a/src/shogun/machine/MulticlassMachine.cpp b/src/shogun/machine/MulticlassMachine.cpp index 377a38b95e3..96b9800caa9 100644 --- a/src/shogun/machine/MulticlassMachine.cpp +++ b/src/shogun/machine/MulticlassMachine.cpp @@ -22,7 +22,6 @@ MulticlassMachine::MulticlassMachine() : BaseMulticlassMachine(), m_multiclass_strategy(std::make_shared()), m_machine(NULL) { - register_parameters(); } @@ -31,7 +30,6 @@ MulticlassMachine::MulticlassMachine( std::shared_ptr machine, std::shared_ptr labs) : BaseMulticlassMachine(), m_multiclass_strategy(std::move(strategy)) { - set_labels(std::move(labs)); m_machine = std::move(machine); @@ -40,14 +38,11 @@ MulticlassMachine::MulticlassMachine( MulticlassMachine::~MulticlassMachine() { - - } void MulticlassMachine::set_labels(std::shared_ptr lab) { Machine::set_labels(lab); - } void MulticlassMachine::register_parameters() diff --git a/src/shogun/multiclass/MulticlassOCAS.cpp b/src/shogun/multiclass/MulticlassOCAS.cpp index 7357f1906cc..d492deda9b2 100644 --- a/src/shogun/multiclass/MulticlassOCAS.cpp +++ b/src/shogun/multiclass/MulticlassOCAS.cpp @@ -52,11 +52,13 @@ MulticlassOCAS::MulticlassOCAS(float64_t C, const std::shared_ptr& tra void MulticlassOCAS::register_parameters() { - SG_ADD(&m_C, "m_C", "regularization constant", ParameterProperties::HYPER); - SG_ADD(&m_epsilon, "m_epsilon", "solver relative tolerance"); - SG_ADD(&m_max_iter, "m_max_iter", "max number of iterations"); - SG_ADD(&m_method, "m_method", "used solver method"); - SG_ADD(&m_buf_size, "m_buf_size", "buffer size"); + SG_ADD(&m_C, "C", "regularization constant", ParameterProperties::HYPER | + ParameterProperties::CONSTRAIN, + SG_CONSTRAINT(positive<>())); + SG_ADD(&m_epsilon, "epsilon", "solver relative tolerance"); + SG_ADD(&m_max_iter, "max_iter", "max number of iterations"); + SG_ADD(&m_method, "method", "used solver method"); + SG_ADD(&m_buf_size, "buf_size", "buffer size"); } MulticlassOCAS::~MulticlassOCAS()