Weka function-based learner wrappers.
weka.classifiers.functions — support vector machines, logistic and linear regression, neural networks — registered under weka. hub keys.Notes
Requires the optional Weka extra: pip install 'tuiml[weka]' plus a Java runtime (11+) on PATH.
These learners apply their own internal preprocessing: SMO and MultilayerPerceptron normalize numeric attributes and binarize nominal ones by default, so results differ from the same nominal encoding fed to a tree.
Classes
SMO — support vector classifier (hub key weka.SMO).
weka.classifiers.functions.SMO, Weka's sequential minimal optimization trainer for support vector machines.__init__( self, c: float = 1.0, kernel: str = 'weka.classifiers.functions.supportVector.PolyKernel', kernel_options: Optional[Sequence[str]] = None, nominal_features: Optional[Sequence[int]] = None, options: Optional[Sequence[str]] = None, )
Parameters
c
-C).
kernel
-K). The common alternatives are ...supportVector.RBFKernel and ...supportVector.Puk.
kernel_options
["-E", "2"] for a quadratic polynomial or ["-G", "0.01"] for an RBF gamma.
nominal_features
options
Notes
SMO is a binary learner; Weka handles multiclass targets internally by pairwise coupling, so no extra wrapping is needed here.
By default SMO normalizes the training data itself and fits a linear PolyKernel, which is why its numbers differ from an unnormalized scikit-learn SVC with the same C.
>>> from tuiml.weka import SMO
>>> from tuiml.datasets import load_iris
>>> data = load_iris()
>>> clf = SMO(c=1.0).fit(data.X, data.y)
>>> clf.predict(data.X[:5]).shape
(5,)
SMOreg — support vector regressor (hub key weka.SMOreg).
weka.classifiers.functions.SMOreg, the regression counterpart of SMO.__init__( self, c: float = 1.0, kernel: str = 'weka.classifiers.functions.supportVector.PolyKernel', kernel_options: Optional[Sequence[str]] = None, nominal_features: Optional[Sequence[int]] = None, options: Optional[Sequence[str]] = None, )
Parameters
c
-C).
kernel
-K).
kernel_options
nominal_features
options
>>> from tuiml.weka import SMOreg
>>> import numpy as np
>>> rng = np.random.default_rng(0)
>>> X = rng.normal(size=(60, 3))
>>> y = 2.0 * X[:, 0] + rng.normal(scale=0.1, size=60)
>>> reg = SMOreg().fit(X, y)
>>> reg.predict(X[:5]).shape
(5,)
Logistic — multinomial logistic regression (hub key weka.Logistic).
weka.classifiers.functions.Logistic, ridge-penalized multinomial logistic regression fitted by quasi-Newton optimization.__init__( self, ridge: float = 1e-08, max_its: int = ..., nominal_features: Optional[Sequence[int]] = None, options: Optional[Sequence[str]] = None, )
Parameters
ridge
-R).
max_its
-M); -1 runs until convergence.
nominal_features
options
>>> from tuiml.weka import Logistic
>>> from tuiml.datasets import load_iris
>>> data = load_iris()
>>> clf = Logistic().fit(data.X, data.y)
>>> clf.predict(data.X[:5]).shape
(5,)
SimpleLogistic — logistic regression fitted by LogitBoost (hub key weka.SimpleLogistic).
weka.classifiers.functions.SimpleLogistic. Fits linear logistic models with LogitBoost over simple regression functions, using cross-validation to pick the number of boosting iterations, which performs built-in attribute selection.__init__( self, num_boosting_iterations: int = 0, use_cross_validation: bool = True, heuristic_stop: int = 50, nominal_features: Optional[Sequence[int]] = None, options: Optional[Sequence[str]] = None, )
Parameters
num_boosting_iterations
-I); 0 selects the count by cross-validation.
use_cross_validation
-S flag to use the training error instead.
heuristic_stop
-H). Set to 0 to disable the heuristic.
nominal_features
options
>>> from tuiml.weka import SimpleLogistic
>>> from tuiml.datasets import load_iris
>>> data = load_iris()
>>> clf = SimpleLogistic().fit(data.X, data.y)
>>> clf.predict(data.X[:5]).shape
(5,)
LinearRegression — least squares with attribute selection (hub key weka.LinearRegression).
weka.classifiers.functions.LinearRegression.__init__( self, attribute_selection: str = 'm5', ridge: float = 1e-08, eliminate_colinear: bool = True, nominal_features: Optional[Sequence[int]] = None, options: Optional[Sequence[str]] = None, )
Parameters
attribute_selection
-S as 0/1/2).
ridge
-R).
eliminate_colinear
-C flag to keep them.
nominal_features
options
Notes
attribute_selection='none' and eliminate_colinear=False for that.>>> from tuiml.weka import LinearRegression
>>> import numpy as np
>>> rng = np.random.default_rng(0)
>>> X = rng.normal(size=(60, 3))
>>> y = 2.0 * X[:, 0] + rng.normal(scale=0.1, size=60)
>>> reg = LinearRegression().fit(X, y)
>>> reg.predict(X[:5]).shape
(5,)
SimpleLinearRegression — least squares on one attribute (hub key weka.SimpleLinearRegression).
weka.classifiers.functions.SimpleLinearRegression. Fits a straight line on whichever single attribute yields the lowest squared error — the regression counterpart of OneR.__init__( self, nominal_features: Optional[Sequence[int]] = None, options: Optional[Sequence[str]] = None, )
Parameters
nominal_features
options
>>> from tuiml.weka import SimpleLinearRegression
>>> import numpy as np
>>> rng = np.random.default_rng(0)
>>> X = rng.normal(size=(60, 3))
>>> y = 2.0 * X[:, 0] + rng.normal(scale=0.1, size=60)
>>> reg = SimpleLinearRegression().fit(X, y)
>>> reg.predict(X[:5]).shape
(5,)
MultilayerPerceptron — backpropagation neural network (hub key weka.MultilayerPerceptron).
weka.classifiers.functions.MultilayerPerceptron.__init__( self, hidden_layers: str = 'a', learning_rate: float = 0.3, momentum: float = 0.2, training_time: int = 500, seed: int = 0, nominal_features: Optional[Sequence[int]] = None, options: Optional[Sequence[str]] = None, )
Parameters
hidden_layers
-H). A comma-separated list of node counts, or one of Weka's shorthands: "a" for (attribs + classes) / 2, "i", "o", "t".
learning_rate
-L).
momentum
-M).
training_time
-N).
seed
-S).
nominal_features
options
Notes
training_time epochs, which makes this the slowest learner in the package on large data.>>> from tuiml.weka import MultilayerPerceptron
>>> from tuiml.datasets import load_iris
>>> data = load_iris()
>>> clf = MultilayerPerceptron(training_time=50).fit(data.X, data.y)
>>> clf.predict(data.X[:5]).shape
(5,)
GaussianProcesses — Gaussian process regression (hub key weka.GaussianProcesses).
weka.classifiers.functions.GaussianProcesses.__init__( self, noise: float = 1.0, kernel: str = 'weka.classifiers.functions.supportVector.PolyKernel', kernel_options: Optional[Sequence[str]] = None, nominal_features: Optional[Sequence[int]] = None, options: Optional[Sequence[str]] = None, )
Parameters
noise
-N).
kernel
-K).
kernel_options
nominal_features
options
Notes
>>> from tuiml.weka import GaussianProcesses
>>> import numpy as np
>>> rng = np.random.default_rng(0)
>>> X = rng.normal(size=(60, 3))
>>> y = 2.0 * X[:, 0] + rng.normal(scale=0.1, size=60)
>>> reg = GaussianProcesses().fit(X, y)
>>> reg.predict(X[:5]).shape
(5,)