为随机森林分类器运行任何BayesSearchCV函数时出错

问题描述

我正在尝试使用RF分类器,但是每次尝试运行bayessearchCV函数时,都会返回错误。随附的是我的特定示例,以及可以运行和复制的示例。 我怀疑这可能是由于train_test_split函数引起的,但是我不确定如何对此进行分类。请让我知道我的代码中是否有任何明显错误内容...

我目前正在使用sklearn / skopt / numpy等的最新版本

import numpy as np
import pandas as pd
from sklearn import preprocessing
from matplotlib import pyplot as plt
import xgboost as xgb
import sklearn
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import ElasticNet
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score 
from sklearn.metrics import roc_auc_score
from skopt import BayesSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import gridsearchcv
opt = BayesSearchCV(
    RandomForestClassifier(random_state=42),{
        'n_estimators': (5,5000),'max_features': ['auto','sqrt'],'max_depth': (2,90),'min_samples_split': (2,10),'min_samples_leaf': (1,7),'bootstrap': ["True","False"]
    },n_iter=32,cv=3,scoring='roc_auc'
)
opt.fit(full_train,full_y_train)

print("val. score: %s" % opt.best_score_)
print("test score: %s" % opt.score(X_test_red,y_test))

错误

/Users/user/opt/anaconda3/lib/python3.8/site-packages/sklearn/utils/deprecation.py:67: FutureWarning: Class MaskedArray is deprecated; MaskedArray is deprecated in version 0.23 and will be removed in version 0.25. Use numpy.ma.MaskedArray instead.
  warnings.warn(msg,category=FutureWarning)

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-20-8b1596e90c35> in <module>
----> 1 opt.fit(full_train,full_y_train)
      2 
      3 print("val. score: %s" % opt.best_score_)
      4 print("test score: %s" % opt.score(X_test_red,y_test))

~/opt/anaconda3/lib/python3.8/site-packages/skopt/searchcv.py in fit(self,X,y,groups,callback)

~/opt/anaconda3/lib/python3.8/site-packages/skopt/searchcv.py in _step(self,search_space,optimizer,n_points)

~/opt/anaconda3/lib/python3.8/site-packages/skopt/searchcv.py in _fit(self,parameter_iterable)

~/opt/anaconda3/lib/python3.8/site-packages/sklearn/utils/deprecation.py in wrapped(*args,**kwargs)
     66         def wrapped(*args,**kwargs):
     67             warnings.warn(msg,category=FutureWarning)
---> 68             return init(*args,**kwargs)
     69         cls.__init__ = wrapped
     70 

TypeError: object.__init__() takes exactly one argument (the instance to initialize)

一个供您复制的

from skopt import BayesSearchCV
from sklearn.datasets import load_digits
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split

X,y = load_digits(10,True)
X_train,X_test,y_train,y_test = train_test_split(X,train_size=0.75,test_size=.25,random_state=0)

# log-uniform: understand as search over p = exp(x) by varying x
opt = BayesSearchCV(
    SVC(),{
        'C': (1e-6,1e+6,'log-uniform'),'gamma': (1e-6,1e+1,'degree': (1,8),# integer valued parameter
        'kernel': ['linear','poly','rbf'],# categorical parameter
    },cv=3
)

opt.fit(X_train,y_train)

print("val. score: %s" % opt.best_score_)
print("test score: %s" % opt.score(X_test,y_test))

给出与我的计算机上第一个示例相同的错误

解决方法

sklearn> = 0.23.0的问题已在skopt版本0.8.1中修复。 https://pypi.org/project/scikit-optimize/0.8.1/

,

事实证明,目前只能通过使用sklearn 0.23.0中的解决方法来解决此问题

from numpy.ma import MaskedArray
import sklearn.utils.fixes

sklearn.utils.fixes.MaskedArray = MaskedArray

import skopt

,然后从那里运行代码。就我而言,我无法使用conda来安装较旧版本的scikit-learn,因此我很幸运,直到其中一个更新软件包为止。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...