user3062459
user3062459

Reputation: 1631

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

I am trying to predict economic cycles using Gaussian Naive Bayes "Classifier".

data (input 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

target (output Y) :

    Economy
0   Expansion
1   Expansion
2   Expansion
3   Expansion

Below is my code:

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)

Below is Error:

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'

What am I doing wrong? How can I resolve this issue /error ?

Upvotes: 40

Views: 215432

Answers (5)

Martin Wunderlich
Martin Wunderlich

Reputation: 1884

Just in case someone else stumbles over this, suffering from the same root cause as I did: This error can also occur when you are trying to call the method "fit" as a static method (classmethod) on the class instead of calling it on an instantiated object of the class. This applies also to other classifiers in other frameworks, e.g. PySpark.

E.g. this won't work:

model = LogisticRegression.fit(data)

But this will:

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

Upvotes: 9

Abhimanyu
Abhimanyu

Reputation: 1218

You forgot the parenthesis "()" in:

model = GaussianNB()

Upvotes: 97

Satheesh
Satheesh

Reputation: 131

You just need to add () for the model.

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)

This works..

Upvotes: 2

Sundar Gsv
Sundar Gsv

Reputation: 647

Whenever you try to initialize/ define an object of a class you must call its own constructor to create one object for you. The constructor may have parameters or none. In your case GaussianNB is a class from sklearn which has a non-parametric constructor by default.

obj_model =  GaussianNB()

So simply we do create an object with empty parenthesis which simply means default constructor.

Upvotes: 12

Rami
Rami

Reputation: 1

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)

Good Luck

Upvotes: -3

Related Questions