TypeError:“int”类型的对象没有 len()、LogisticRegression()

数据挖掘 分类 逻辑回归
2022-03-11 01:07:52

我正在尝试拟合我的逻辑回归模型,但我遇到了一个我不理解的错误。环顾四周,并没有找到一个直接的答案。

独立特征的形状 (X):(495,30)

从属特征的形状 (y): (495,)

依赖特征保存二进制值 (0,1),并且这些值当前是“int”类型。这可能是问题发生的地方,但我不明白我需要做什么来解决这个问题。

这是我尝试拟合 sklearn LogisticRegression() 时遇到的错误:

c_param = [1,10,100,1000]

rand_grid = {'kbest__k':list(range(5,10)),
            'log__C':c_param,
            'log__random_state':42}

log_rand = RandomizedSearchCV(pipe_opt('log',LogisticRegression()),rand_grid,n_iter=100,cv=3,
                              random_state=42,n_jobs=-1)
log_rand.fit(X_train,y_train)

在此处输入图像描述

1个回答

RandomizedSearchCV期望您提供要尝试的参数值字典,例如上面的代码:

rand_grid = {'log__C':[1,10,100,1000],
             'log__random_state':42} # values should be in []

由于这个想法是搜索提供最佳性能的值,因此您需要提供几个值,作为values 列表尽管在您的情况下您只提供了一个值,但只要将其写为 list (inside []) 就不会引发错误。

但是,如果您只有一个要搜索的值,那就有点奇怪了。所以最好在初始化估计器时修复这些值(即 LogisticRegression())。例如:

# you want to see which values perform best for params C and max_iter.
rand_grid = {'log__C':[1,10,100,1000]
             'log__max_iter': [100,200,300]}  

# you have fix value for params random_state, penalty and fit_intercept
logReg = LogisticRegression(random_state=42, penalty='l1', fit_intercept=False)

log_rand = RandomizedSearchCV(pipe_opt('log',logReg),
                              rand_grid,n_iter=100,cv=3,
                              random_state=42,n_jobs=-1)