如何使这个估计器与scikit-learn兼容?

用户名

我正在尝试使此估算器与scikit-learn兼容,以便可以使用GridSearchCV搜索参数空间。

编辑:

我已按照建议修改了脚本(请参见下文)。

  • 合适的签名被修改为 fit(self, X, y)
  • 所有参数都传入 __init__

GripdSearchCV仍然存在兼容性问题,可能是因为估计器是多标签分类器。

ValueError: Can't handle mix of multilabel-indicator and continuous-multioutput

但这超出了要点;属性错误现在消失了。因此,我们可以安全地得出结论,建议的修改使估算器与scikit-learn兼容。

最终代码脚本:

import numpy as np
from sklearn.grid_search import GridSearchCV
from sklearn.datasets import make_classification
from sklearn.preprocessing import LabelBinarizer
from sklearn.cross_validation import train_test_split
from sklearn.base import BaseEstimator, ClassifierMixin

class LogisticClassifier(BaseEstimator, ClassifierMixin):
    def __init__(self, basis=None, itrs=100, learn_rate=0.1, reg=0.1, momentum=0.5, proj_layer_size=10):
        self.W = []
        self.A = None
        if basis == 'rectifier':
            self.basisfunc = self.rectifier_basis
        else:
            self.basisfunc = self.identity

        self.itrs = itrs
        self.learn_rate = learn_rate
        self.reg = reg
        self.momentum = momentum
        self.proj_layer_size = proj_layer_size

    def identity(self, x):
        return np.hstack((x, 1))

    def rectifier_basis(self, x):
        xn = np.dot(self.A, x)
        return self.identity(np.maximum(xn, 0))

    def basismap(self, X):
        new_dimensions = self.basisfunc(X[0,:]).shape[0]
        Xn = np.zeros((X.shape[0], new_dimensions))
        for i, xi in enumerate(X):
            Xn[i,:] = self.basisfunc(xi)
        return Xn

    def fit(self, X, Y):
        self.A = np.random.uniform(-1, 1, (self.proj_layer_size, X.shape[1]))
        Xn = self.basismap(X)
        self.W = np.array(np.random.uniform(-0.1, 0.1, (Y.shape[1], Xn.shape[1])))
        costs_train, costs_test = [], []
        previous_grad = np.zeros(self.W.shape)
        for i in range(self.itrs):
            grad = self.grad(Xn, Y)
            self.W = self.W - self.learn_rate*(grad+self.momentum*previous_grad)
            previous_grad = grad
            costs_train.append(self.loss(X, Y))
            #costs_test.append(self.loss(Xtest, Ytest))      
        #return (costs_train, costs_test)
        return costs_train

    def softmax(self, Z):
        Z = np.maximum(Z, -1e3)
        Z = np.minimum(Z, 1e3)
        numerator = np.exp(Z)
        return numerator/np.sum(numerator, axis=1).reshape((-1,1))

    def predict(self, X):
        Xn = self.basismap(X)
        return self.softmax(np.dot(Xn, self.W.T))

    def grad(self, Xn, Y):
        Yh = self.softmax(np.dot(Xn, self.W.T))
        return -np.dot(Y.T-Yh.T,Xn)/Xn.shape[0] + self.reg*self.W

    def loss(self, X, Y):
        Yh = self.predict(X)
        return -np.mean(np.mean(Y*np.log(Yh)))-self.reg*np.trace(np.dot(self.W,self.W.T))/self.W.shape[0]

    def get_params(self, deep=True):
        return {"itrs": self.itrs, "learn_rate": self.learn_rate, "reg": self.reg, "momentum": self.momentum,
            "report_cost": self.report_cost, "proj_layer_size": self.proj_layer_size, "iseed": self.iseed}

    def set_params(self, **parameters):
        for parameter, value in parameters.items():
            setattr(self, parameter, value)

#make data
X, Y = make_classification(n_features=2, n_informative=2, n_redundant=0, n_repeated=0, n_classes=3,
                           n_clusters_per_class=1, random_state=31)
lb = LabelBinarizer()
Y = lb.fit_transform(Y)
Xtrain, Xtest, Ytrain, Ytest = train_test_split(X, Y, test_size=0.25, random_state=5)

#model optimization
param_grid = {'learn_rate': [0.1, 0.01, 0.001],
              'reg': [0.001, 0.01]
              }

clf = LogisticClassifier(basis='rectifier')
gs_cv = GridSearchCV(clf, param_grid, scoring='accuracy').fit(Xtrain, Ytrain)
print('Best hyperparameters: %r' % gs_cv.best_params_)
阿特姆·索伯列夫(Artem Sobolev)

get_params您调用方法中self.itrs,但是您的对象没有这样的属性。

此外,我建议你改fit签名喜欢的东西fit(self, X, y)

  1. 传递所有参数 __init__
  2. 拆分X并使用y进行训练和测试sklearn.cross_validation.train_test_split

这将使您的代码更像sklearn,并且与库函数更兼容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使这个估计器与scikit-learn兼容?

来自分类Dev

scikit-learn的KNN如何计算概率估计?

来自分类Dev

如何在scikit-learn的TransformedTargetRegressor管道中从训练有素的估计器访问属性?

来自分类Dev

参数不会传递给scikit-learn GridSearchCV中的自定义估计器

来自分类Dev

在 scikit-learn 中自动选择几个估计器中最好的

来自分类Dev

Scikit-Learn KDE中的PDF估计

来自分类Dev

如何克隆包括数据的scikit-learn估算器?

来自分类Dev

scikit-learn的BaggingClassifier和自定义基址估计器出现问题:操作数不能一起广播吗?

来自分类Dev

Scikit Learn Pipeline的定制转换器

来自分类Dev

scikit-learn中的哪些估计量不支持稀疏矩阵?

来自分类Dev

使用scikit-learn在Python中使用稀疏矩阵进行kNN估计?

来自分类Dev

使用scikit-learn在Python中使用稀疏矩阵进行kNN估计?

来自分类Dev

如何将带有keras回归器的scikit-learn管线保存到磁盘上?

来自分类Dev

如何使用scikit-learn执行集成(多分类器)分类?

来自分类Dev

如何获得交叉验证中的Keras scikit-learn包装器的训练和验证损失?

来自分类Dev

如何打印scikit Learn计划的作业数量?

来自分类Dev

如何从github安装scikit-learn

来自分类Dev

如何使用 scikit learn 预测目标标签

来自分类Dev

如何在GridSearchCV(随机森林分类器Scikit)上获得最佳估计器

来自分类Dev

如何获得针对不同类别的scikit-learn分类器的大多数信息功能?

来自分类Dev

如何将scikit-learn仿真器结果留在分布式分布式系统中?

来自分类Dev

scikit-learn中处理nan / null的分类器

来自分类Dev

scikit-learn中多类问题的级联分类器

来自分类Dev

Scikit-learn Ridge分类器:提取类概率

来自分类Dev

Scikit-Learn包装器和RandomizedSearchCV:RuntimeError

来自分类Dev

Scikit-learn Ridge分类器:提取类概率

来自分类Dev

scikit-learn:`gen_batches()` 函数的作用是什么?这个怎么运作?

来自分类Dev

如何使DRF串行器与大写兼容

来自分类Dev

如何使PuTTY与Solaris兼容?

Related 相关文章

  1. 1

    如何使这个估计器与scikit-learn兼容?

  2. 2

    scikit-learn的KNN如何计算概率估计?

  3. 3

    如何在scikit-learn的TransformedTargetRegressor管道中从训练有素的估计器访问属性?

  4. 4

    参数不会传递给scikit-learn GridSearchCV中的自定义估计器

  5. 5

    在 scikit-learn 中自动选择几个估计器中最好的

  6. 6

    Scikit-Learn KDE中的PDF估计

  7. 7

    如何克隆包括数据的scikit-learn估算器?

  8. 8

    scikit-learn的BaggingClassifier和自定义基址估计器出现问题:操作数不能一起广播吗?

  9. 9

    Scikit Learn Pipeline的定制转换器

  10. 10

    scikit-learn中的哪些估计量不支持稀疏矩阵?

  11. 11

    使用scikit-learn在Python中使用稀疏矩阵进行kNN估计?

  12. 12

    使用scikit-learn在Python中使用稀疏矩阵进行kNN估计?

  13. 13

    如何将带有keras回归器的scikit-learn管线保存到磁盘上?

  14. 14

    如何使用scikit-learn执行集成(多分类器)分类?

  15. 15

    如何获得交叉验证中的Keras scikit-learn包装器的训练和验证损失?

  16. 16

    如何打印scikit Learn计划的作业数量?

  17. 17

    如何从github安装scikit-learn

  18. 18

    如何使用 scikit learn 预测目标标签

  19. 19

    如何在GridSearchCV(随机森林分类器Scikit)上获得最佳估计器

  20. 20

    如何获得针对不同类别的scikit-learn分类器的大多数信息功能?

  21. 21

    如何将scikit-learn仿真器结果留在分布式分布式系统中?

  22. 22

    scikit-learn中处理nan / null的分类器

  23. 23

    scikit-learn中多类问题的级联分类器

  24. 24

    Scikit-learn Ridge分类器:提取类概率

  25. 25

    Scikit-Learn包装器和RandomizedSearchCV:RuntimeError

  26. 26

    Scikit-learn Ridge分类器:提取类概率

  27. 27

    scikit-learn:`gen_batches()` 函数的作用是什么?这个怎么运作?

  28. 28

    如何使DRF串行器与大写兼容

  29. 29

    如何使PuTTY与Solaris兼容?

热门标签

归档