Gradient Boosting Classifier sparse matrix issue using pandas and scikit

来源:互联网 发布:博奥软件 编辑:程序博客网 时间:2024/06/02 12:36

I have been using the following code to do multiclass classification which uses GradientBoostingClassifier from scikit-learn. I am facing a known issue with sparse matrix Conversion to dense matrix.

I have applied the following solution stackoverflow but it doesnt work for my case. Although the solution I used is meant for RandomForestClassifier but AFAIK it should work for GradientBoostingClassifier!

Also to add this code works perfectly if I replace GradientBoostingClassifier with RandomForestClassifier.

The data in this case is numeric 93 features with 8 target classes. The data can be fetched fromKaggle

# load datatrain = pd.read_csv('data/train.csv')test = pd.read_csv('data/test.csv')sample = pd.read_csv('submissions/sampleSubmission.csv')labels = train.target.valuesids = train.id.valuestrain = train.drop('id', axis=1)train = train.drop('target', axis=1)train_orig = traintest = test.drop('id', axis=1)# transform counts to TFIDF featurestfidf = feature_extraction.text.TfidfTransformer()train = tfidf.fit_transform(train)test = tfidf.transform(test).toarray() # Update line# encode labels lbl_enc = preprocessing.LabelEncoder()labels = lbl_enc.fit_transform(labels)# train a random forest classifierprint('starting training ... ')clf = ensemble.GradientBoostingClassifier( n_estimators=config.estimators)clf.fit(train, labels)# predict on test setprint('starting prediction ... ')preds = clf.predict_proba(test) # Error on this line even when test is densetrain_pred = clf.predict(tfidf.transform(train_orig))

Traceback:

python boosted_trees.py starting training ... Traceback (most recent call last):  File "boosted_trees.py", line 57, in <module>    clf.fit(train, labels)  File "/usr/local/lib/python2.7/site-        packages/sklearn/ensemble/gradient_boosting.py", line 941, in fit    X, y = check_X_y(X, y, dtype=DTYPE)  File "/usr/local/lib/python2.7/site-packages/sklearn/utils/validation.py", line 439, in check_X_y    ensure_min_features)  File "/usr/local/lib/python2.7/site-packages/sklearn/utils/validation.py",     line 331, in check_array    copy, force_all_finite)  File "/usr/local/lib/python2.7/site-packages/sklearn/utils/validation.py",     line 239, in _ensure_sparse_format    raise TypeError('A sparse matrix was passed, but dense 'TypeError: A sparse matrix was passed, but dense data is required. Use         X.toarray() to convert to a dense numpy array.ere
【解决方法】

Just in case anyone needs. The issue is in these lines.

train = tfidf.fit_transform(train)test = tfidf.transform(test).toarray() # Update line

Both lines should have a toarray() to fix this.

train = tfidf.fit_transform(train).toarray()test = tfidf.transform(test).toarray() # Update line

转自:http://stackoverflow.com/questions/29498106/gradient-boosting-classifier-sparse-matrix-issue-using-pandas-and-scikit

1 0
原创粉丝点击