首页 > 解决方案 > TypeError: 'numpy.ndarray' 对象在为逻辑回归执行 RandomizedSearchCV 时不可调用

问题描述

作为 python 的新手,无法弄清楚为什么在 RandomizedSearchCV 中调用数组对象。知道如何解决/解决此错误吗?

X_train 和 y_train 是 numpy ndarray。

tuned_parameters = pd.DataFrame({'C': [10**i for i in range(-4,4,2)]})

#Using RandomizedCV
model =  RandomizedSearchCV(LogisticRegression(), tuned_parameters, 
scoring = 'f1', cv=5, n_jobs=6, random_state = 12)
model.fit(X_train, y_train)

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-144-9f33fbdbb7e4> in <module>()
      8 #Using RandomizedCV
      9 model =  RandomizedSearchCV(LogisticRegression(), tuned_parameters1,  
n_iter = 10, scoring = 'f1', cv=5, n_jobs=6)
---> 10 model.fit(X_train, y_train)
     11 #model.predict(X_test)
     12 print(model.best_estimator_)

~\Anaconda3\lib\site-packages\sklearn\model_selection\_search.py in 
fit(self, X, y, groups, **fit_params)
    616         n_splits = cv.get_n_splits(X, y, groups)
    617         # Regenerate parameter iterable for each fit
--> 618         candidate_params = list(self._get_param_iterator())
    619         n_candidates = len(candidate_params)
    620         if self.verbose > 0:

~\Anaconda3\lib\site-packages\sklearn\model_selection\_search.py in 
__iter__(self)
    236         # in this case we want to sample without replacement
    237         all_lists = np.all([not hasattr(v, "rvs")
--> 238                             for v in 
self.param_distributions.values()])
    239         rnd = check_random_state(self.random_state)
    240 

TypeError: 'numpy.ndarray' object is not callable

标签: pythonscikit-learn

解决方案


不要使用熊猫。


文档

param_distributions : dict 字典,参数名称(字符串)作为键和分布或要尝试的参数列表。发行版必须提供 rvs 抽样方法(例如来自 scipy.stats.distributions 的那些)。如果给出一个列表,则对其进行均匀采样。

你需要定义tuned_parameters不同的。


用这个:

tuned_parameters = {"C": [10**i for i in range(-4,4,2)] }

推荐阅读