Reputation: 1631
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
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
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
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
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