Tôi đã cố gắng sử dụng GradientBoostingClassifier trong scikit-learn và nó hoạt động tốt với các tham số mặc định của nó. Tuy nhiên, khi tôi cố thay thế BaseEstimator bằng một trình phân loại khác, nó không hoạt động và đưa cho tôi lỗi sau,GradientBoostingClassifier với BaseEstimator trong scikit-learn?
return y - np.nan_to_num(np.exp(pred[:, k] -
IndexError: too many indices
Bạn có giải pháp nào cho vấn đề.
Lỗi này có thể được tái tạo bằng cách sử dụng các đoạn sau:
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'
Đây là HTE hoàn traceback của lỗi:
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
Xin chào, tôi đang gặp phải lỗi rất giống với GBC và LR: y_pred [:, k] + = learning_rate * tree.predict (X) .ravel() IndexError: quá nhiều chỉ mục - đã cố gắng sử dụng ý tưởng bộ điều hợp của bạn nhưng không có, lỗi vẫn còn. Bạn có ý tưởng nào để giải quyết vấn đề này không? – abalogh