def port_svm(clf, **kwargs): """Port a SVC / OneClassSVC classifier""" assert isinstance(clf.gamma, float), 'You probably didn\'t set an explicit value for gamma: 0.001 is a good default' support_v = clf.support_vectors_ n_classes = len(clf.n_support_) return jinja('svm/svm.jinja', { 'kernel': { 'type': clf.kernel, 'gamma': clf.gamma, 'coef0': clf.coef0, 'degree': clf.degree }, 'sizes': { 'features': len(support_v[0]), 'vectors': len(support_v), 'classes': n_classes, 'decisions': n_classes * (n_classes - 1) // 2, 'supports': clf.n_support_ }, 'arrays': { 'supports': support_v, 'intercepts': clf.intercept_, 'coefs': clf.dual_coef_ } }, { 'classname': 'OneClassSVM' if check_type(clf, 'OneClassSVM') else 'SVM' }, **kwargs)
def port_rvm(clf, classname, **kwargs): """Port a RVM classifier""" assert classname is None or len(classname) > 0, 'Invalid class name' template_data = { **kwargs, 'kernel': { 'type': clf.kernel, 'gamma': clf.gamma, 'coef0': clf.coef0, 'degree': clf.degree }, 'sizes': { 'features': len(clf.relevant_vectors_[0]), }, 'arrays': { 'vectors': clf.relevant_vectors_, 'coefs': clf.coef_, 'actives': clf.active_, 'intercepts': clf.intercept_, 'mean': clf._x_mean, 'std': clf._x_std }, 'classname': classname if classname is not None else 'RVM', } return jinja('rvm/rvm.jinja', template_data)
def port_svm(clf, classname=None, **kwargs): """Port a SVC / LinearSVC classifier""" assert isinstance( clf.gamma, float ), 'You probably didn\'t set an explicit value for gamma: 0.001 is a good default' assert classname is None or len(classname) > 0, 'Invalid class name' if classname is None: classname = 'OneClassSVM' if isinstance(clf, OneClassSVM) else 'SVM' support_v = clf.support_vectors_ n_classes = len(clf.n_support_) template_data = { **kwargs, 'kernel': { 'type': clf.kernel, 'gamma': clf.gamma, 'coef0': clf.coef0, 'degree': clf.degree }, 'sizes': { 'features': len(support_v[0]), 'vectors': len(support_v), 'classes': n_classes, 'decisions': n_classes * (n_classes - 1) // 2, 'supports': clf.n_support_ }, 'arrays': { 'supports': support_v, 'intercepts': clf.intercept_, 'coefs': clf.dual_coef_ }, 'classname': classname } return jinja('svm/svm.jinja', template_data)
def port_sefr(clf, classname=None, **kwargs): kwargs.update({ 'weights': clf.weights, 'bias': clf.bias, 'classname': classname or 'SEFR' }) return jinja('sefr/sefr.jinja', kwargs)
def port_sefr(clf, classname=None, **kwargs): """Port SEFR classifier""" return jinja('sefr/sefr.jinja', { 'weights': clf.weights, 'bias': clf.bias, 'dimension': len(clf.weights), }, {'classname': 'SEFR'}, **kwargs)
def port_logisticregression(clf, **kwargs): """Port sklearn's LogisticRegressionClassifier""" return jinja( 'logisticregression/logisticregression.jinja', { 'weights': clf.coef_, 'intercept': clf.intercept_, 'classes': clf.classes_, 'n_classes': len(clf.classes_) }, {'classname': 'LogisticRegression'}, **kwargs)
def port_pca(pca, classname=None, **kwargs): """Port a PCA""" template_data = { 'arrays': { 'components': pca.components_, 'mean': pca.mean_ }, 'classname': classname if classname is not None else 'PCA' } return jinja('pca/pca.jinja', template_data)
def port_pca(clf, **kwargs): """Port a PCA""" return jinja('pca/pca.jinja', { 'arrays': { 'components': clf.components_, 'mean': clf.mean_ }, }, { 'classname': 'PCA' }, **kwargs)
def port_linear_regression(clf, classname=None, **kwargs): """Port Linear Regression""" return jinja('linearregression/linearregression.jinja', { 'coefs': clf.coef_, 'intercept': clf.intercept_, 'dimension': len(clf.coef_), 'dtype': 'float' }, { 'classname': 'LinearRegression' }, **kwargs)
def port_gaussiannb(clf, **kwargs): """Port sklearn's GaussianNB""" return jinja('gaussiannb/gaussiannb.jinja', { 'sigma': clf.sigma_, 'theta': clf.theta_, 'prior': clf.class_prior_, 'classes': clf.classes_, 'n_classes': len(clf.classes_) }, { 'classname': 'GaussianNB' }, **kwargs)
def port_wifi_indoor_positioning(samples): classmap = get_classmap(samples) networkmap = get_networkmap(samples) X = get_x(samples, networkmap) y = get_y(samples, classmap) # classmap is flipped wrt the format `port` expects: flip it classmap = {v: k for k, v in classmap.items()} return X, y, classmap, jinja('wifiindoorpositioning/wifiindoorpositioning.jinja', { 'X': X, 'networkmap': networkmap })
def port_decisiontree(clf, **kwargs): """Port sklearn's DecisionTreeClassifier""" return jinja('decisiontree/decisiontree.jinja', { 'left': clf.tree_.children_left, 'right': clf.tree_.children_right, 'features': clf.tree_.feature, 'thresholds': clf.tree_.threshold, 'classes': clf.tree_.value, 'i': 0 }, { 'classname': 'DecisionTree' }, **kwargs)
def port_randomforest(clf, **kwargs): """Port sklearn's RandomForestClassifier""" return jinja( 'randomforest/randomforest.jinja', { 'n_classes': clf.n_classes_, 'trees': [{ 'left': clf.tree_.children_left, 'right': clf.tree_.children_right, 'features': clf.tree_.feature, 'thresholds': clf.tree_.threshold, 'classes': clf.tree_.value, } for clf in clf.estimators_] }, {'classname': 'RandomForest'}, **kwargs)
def port_principalfft(clf, optimize_sin=False, lookup_cos=None, lookup_sin=None, **kwargs): """Port PrincipalFFT classifier""" return jinja( 'principalfft/principalfft.jinja', { 'fft': clf, 'PI': pi, 'size': len(clf.idx), 'optmize_sin': optimize_sin, 'lookup_cos': lookup_cos, 'lookup_sin': lookup_sin, }, **kwargs)
def port_xgboost(clf, **kwargs): """Port a XGBoost classifier""" with NamedTemporaryFile('w+', suffix='.json', encoding='utf-8') as tmp: clf.save_model(tmp.name) tmp.seek(0) decoded = json.load(tmp) trees = [ format_tree(tree) for tree in decoded['learner'] ['gradient_booster']['model']['trees'] ] return jinja( 'xgboost/xgboost.jinja', { 'n_classes': int(decoded['learner']['learner_model_param']['num_class']), 'trees': trees, }, {'classname': 'XGBClassifier'}, **kwargs)
def port_rvm(clf, **kwargs): """Port a RVM classifier""" return jinja( 'rvm/rvm.jinja', { 'n_classes': len(clf.intercept_), 'kernel': { 'type': clf.kernel, 'gamma': clf.gamma, 'coef0': clf.coef0, 'degree': clf.degree }, 'sizes': { 'features': clf.relevant_vectors_[0].shape[1], }, 'arrays': { 'vectors': clf.relevant_vectors_, 'coefs': clf.coef_, 'actives': clf.active_, 'intercepts': clf.intercept_, 'mean': clf._x_mean, 'std': clf._x_std }, }, {'classname': 'RVC'}, **kwargs)