当前位置: 首页 > 面试题库 >

在scikit-learn中具有BaseEstimator的GradientBoostingClassifier?

西门安宁
2023-03-14
问题内容

我尝试在scikit-
learn中使用GradientBoostingClassifier,它的默认参数可以正常工作。但是,当我尝试用其他分类器替换BaseEstimator时,它不起作用,并给了我以下错误,

return y - np.nan_to_num(np.exp(pred[:, k] -
IndexError: too many indices

您有解决问题的办法吗?

可以使用以下代码片段重新生成此错误:

import numpy as np
from sklearn import datasets
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.utils import shuffle

mnist = datasets.fetch_mldata('MNIST original')
X, y = shuffle(mnist.data, mnist.target, random_state=13)
X = X.astype(np.float32)
offset = int(X.shape[0] * 0.01)
X_train, y_train = X[:offset], y[:offset]
X_test, y_test = X[offset:], y[offset:]

### works fine when init is None
clf_init = None
print 'Train with clf_init = None'
clf = GradientBoostingClassifier( (loss='deviance', learning_rate=0.1,
                             n_estimators=5, subsample=0.3,
                             min_samples_split=2,
                             min_samples_leaf=1,
                             max_depth=3,
                             init=clf_init,
                             random_state=None,
                             max_features=None,
                             verbose=2,
                             learn_rate=None)
clf.fit(X_train, y_train)
print 'Train with clf_init = None is done :-)'

print 'Train LogisticRegression()'
clf_init = LogisticRegression();
clf_init.fit(X_train, y_train);
print 'Train LogisticRegression() is done'

print 'Train with clf_init = LogisticRegression()'
clf = GradientBoostingClassifier(loss='deviance', learning_rate=0.1,
                             n_estimators=5, subsample=0.3,
                             min_samples_split=2,
                             min_samples_leaf=1,
                             max_depth=3,
                             init=clf_init,
                             random_state=None,
                             max_features=None,
                             verbose=2,
                             learn_rate=None)
 clf.fit(X_train, y_train) # <------ ERROR!!!!
 print 'Train with clf_init = LogisticRegression() is done'

这是错误的完整回溯:

Traceback (most recent call last):
File "/home/mohsena/Dropbox/programing/gbm/gb_with_init.py", line 56, in <module>
   clf.fit(X_train, y_train)
File "/usr/local/lib/python2.7/dist-packages/sklearn/ensemble/gradient_boosting.py", line 862, in fit
   return super(GradientBoostingClassifier, self).fit(X, y)
File "/usr/local/lib/python2.7/dist-packages/sklearn/ensemble/gradient_boosting.py", line 614, in fit random_state)
File "/usr/local/lib/python2.7/dist-packages/sklearn/ensemble/gradient_boosting.py", line 475, in _fit_stage
   residual = loss.negative_gradient(y, y_pred, k=k)
File "/usr/local/lib/python2.7/dist-packages/sklearn/ensemble/gradient_boosting.py", line 404, in negative_gradient
   return y - np.nan_to_num(np.exp(pred[:, k] -
   IndexError: too many indices

问题答案:

正如scikit-learn开发人员所建议的那样,可以通过使用如下适配器来解决该问题:

def __init__(self, est):
   self.est = est
def predict(self, X):
    return self.est.predict_proba(X)[:, 1]
def fit(self, X, y):
    self.est.fit(X, y)


 类似资料:
  • scikit-learn 是一个 Python 的机器学习项目。是一个简单高效的数据挖掘和数据分析工具。基于 NumPy、SciPy 和 matplotlib 构建。 Installation 依赖 scikit-learn 要求: Python (>= 2.7 or >= 3.3) NumPy (>= 1.8.2) SciPy (>= 0.13.3) 运行示例需要 Matplotlib >= 1

  • Introduction to Machine Learning with scikit-learn This video series will teach you how to solve Machine Learning problems using Python's popular scikit-learn library. There are 10 video tutorials tot

  • 你可以使用 Keras 的 Sequential 模型(仅限单一输入)作为 Scikit-Learn 工作流程的一部分,通过在此找到的包装器: keras.wrappers.scikit_learn.py。 有两个封装器可用: keras.wrappers.scikit_learn.KerasClassifier(build_fn=None, **sk_params), 这实现了Scikit-Le

  • 校验者: @小瑶 翻译者: @片刻 Note 如果你想为这个项目做出贡献,建议你 安装最新的开发版本 . 安装最新版本 Scikit-learn 要求: Python (>= 2.7 or >= 3.3), NumPy (>= 1.8.2), SciPy (>= 0.13.3). 如果你已经有一个安全的 numpy 和 scipy,安装 scikit-learn 最简单的方法是使用 pip pip

  • 问题内容: 我正在尝试在Python中使用scikit-learn设计一个简单的决策树(我在Windows OS上将Anaconda的Ipython Notebook与Python 2.7.3结合使用),并将其可视化如下: 但是,出现以下错误: 我使用以下博客文章作为参考:Blogpost链接 以下stackoverflow问题似乎也不适合我:问题 有人可以帮助我如何在scikit-learn中可

  • 问题内容: 我需要使用pca来确定一组特定数据中具有最高方差的维度。我正在使用scikit- learn的pca来执行此操作,但是我无法从pca方法的输出中识别出方差最大的数据成分是什么。请记住,我不想消除这些尺寸,而只是确定它们。 我的数据组织成一个矩阵,其中包含150行数据,每行有4个维度。我正在做如下: 当我打印 pca.explained_variance_ratio_时 ,它会输出从最高

  • 问题内容: 您能否解释一下scikit-learn中的“ fit”方法是什么?为什么有用? 我是机器学习和scikit学习的新手。 问题答案: 简而言之 : 适应 等于 训练 。然后,在对其进行训练之后,通常可以通过方法调用将模型用于进行预测。 详细说明 :使模型适合训练数据(即使用方法)实质上是建模过程中的训练部分。它找到通过使用的算法指定的方程式的系数)。 然后,对于分类器,您可以使用方法对传

  • 问题内容: 我试图在Linux Mint 12上安装scikit-learn,但失败了。我从http://pypi.python.org/pypi/scikit- learn/ 下载了该软件包并安装了 然后,我将目录更改为home并启动python2.7 shell。在导入sklearn时,我得到了: 我认为问题出在scipy的空间。这是因为当我做 我得到与Scikit学习相同的错误。 请帮忙。谢