【问题标题】:TypeError: fit() missing 1 required positional argument: 'y'类型错误:fit() 缺少 1 个必需的位置参数:'y'
【发布时间】:2016-06-30 01:09:15
【问题描述】:

我正在尝试使用高斯朴素贝叶斯“分类器”来预测经济周期。

数据(输入 X):

             SPY    Interest Rate    Unemployment   Employment  CPI
Date                    
1997-01-02   56.05     7.82            9.7           3399.9     159.100
1997-02-03   56.58     7.65            9.8           3402.8     159.600
1997-03-03   54.09     7.90            9.9           3414.7     160.000

目标(输出 Y):

    Economy
0   Expansion
1   Expansion
2   Expansion
3   Expansion

下面是我的代码:

from sklearn.naive_bayes import GaussianNB
from sklearn import metrics
from sklearn.cross_validation import train_test_split
X = data
Y = target
model = GaussianNB
X_train, X_test, Y_train, Y_test = train_test_split(X,Y)
model.fit(X_train, Y_train)

以下是错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-132-b0975752a19f> in <module>()
  6 model = GaussianNB
  7 X_train, X_test, Y_train, Y_test = train_test_split(X,Y)
  ----> 8 model.fit(X_train, Y_train)

  TypeError: fit() missing 1 required positional argument: 'y'

我做错了什么?我该如何解决这个问题/错误?

【问题讨论】:

  • model = GaussianNB()
  • 谢谢.. 但是,我现在又遇到了一个错误。知道如何解决吗? /Users/d/anaconda/lib/python3.4/site-packages/sklearn/utils/validation.py:515: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel(). y = column_or_1d(y, warn=True)
  • 我将第 5 行更改为 Y = target.values.ravel() 并且成功了。

标签: python-3.x pandas scikit-learn


【解决方案1】:

你忘记了括号“()”:

model = GaussianNB()

【讨论】:

    【解决方案2】:

    每当你尝试初始化/定义一个类的对象时,你必须调用它自己的构造函数来为你创建一个对象。构造函数可能有参数,也可能没有。在您的情况下, GaussianNB 是 sklearn 的一个类,默认情况下它具有 非参数构造函数

    obj_model =  GaussianNB()
    

    所以我们只需要创建一个带有空括号的对象,这意味着默认构造函数

    【讨论】:

      【解决方案3】:
      from sklearn.model_selection import train_test_split
      X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.35, `
      `random_state=100)
      from sklearn.linear_model import LinearRegression 
      lm = LinearRegression
      lm.fit(X_test,y_test)
      

      祝你好运

      【讨论】:

      • 仍然缺少括号,我认为这是题外话
      【解决方案4】:

      你忘了在你的模型后面加上()gaussianNB。 尝试在第 6 行执行此操作:

      model = GaussianNB()
      

      我很确定它会解决问题。

      【讨论】:

      • 已经有多个非常相似的近乎重复的答案。这是其中之一。
      【解决方案5】:

      您只需为模型添加 () 即可。

      from sklearn.naive_bayes import GaussianNB
      from sklearn import metrics
      from sklearn.cross_validation import train_test_split
      X = data
      Y = target
      model = GaussianNB()
      X_train, X_test, Y_train, Y_test = train_test_split(X,Y)
      model.fit(X_train, Y_train)
      

      这行得通..

      【讨论】:

        【解决方案6】:

        您只需为模型添加()

        model = GaussianNB()
        

        【讨论】:

        • 已经有多个非常相似的近乎重复的答案。这是其中之一。
        【解决方案7】:

        以防万一其他人绊倒了这个问题,并遭受与我相同的根本原因:当您尝试将方法“fit”作为类上的静态方法(classmethod)而不是在类的实例化对象上调用它。这也适用于其他框架中的其他分类器,例如PySpark。

        例如这行不通:

        model = LogisticRegression.fit(data)
        

        但这会:

        log_reg = LogisticRegression()
        model = log_reg.fit(data)
        

        【讨论】:

          猜你喜欢
          • 2020-10-12
          • 1970-01-01
          • 2020-12-04
          • 2021-10-19
          • 1970-01-01
          • 2019-06-07
          • 2021-08-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多