Grisuji
Grisuji

Reputation: 25

Manually build logistic regression model for prediction in Sklearn

I wonder how to build a LogisticRegression model "m" manually by setting explicit the values for m.coef_ and m.intercept_. This sounds weird but in some cases I try to classify data where all cases are negativ (0) and the fit of the model gives an error so I want to set f.e.

m = LogisticRegression()
m.coef_=np.array([[0,0]]) and
m.intercept_=-1000
m.classes_=np.array([0, 1])
x = np.array([[1, 1],[2, 2]])

m.predict(x) works well as expected, but m.predict_prob(x) gives an error.


*TypeE
rror                                 Traceback (most recent call last)
<ipython-input-78-e122e3e7c447> in <module>()
----> 1 p.predict_proba(x)
~/anaconda3/lib/python3.6/site-packages/sklearn/linear_model/logistic.py in predict_proba(self, X)
   1334         calculate_ovr = self.coef_.shape[0] == 1 or self.multi_class == "ovr"
   1335         if calculate_ovr:
-> 1336             return super(LogisticRegression, self)._predict_proba_lr(X)
   1337         else:
   1338             return softmax(self.decision_function(X), copy=False)
~/anaconda3/lib/python3.6/site-packages/sklearn/linear_model/base.py in _predict_proba_lr(self, X)
    338         prob = self.decision_function(X)
    339         prob *= -1
--> 340         np.exp(prob, prob)
    341         prob += 1
    342         np.reciprocal(prob, prob)
TypeError: ufunc 'exp' output (typecode 'd') could not be coerced to provided output parameter (typecode 'l') according to the casting rule ''same_kind''*

How can I avoid this error, or even better, how persuade the m.fit(X,y) to work also with only one class in the data.

best regards

Upvotes: 1

Views: 1217

Answers (1)

Yilun Zhang
Yilun Zhang

Reputation: 9018

You are setting your coefficients and intercept as integers. I set them as floats and the predict_proba() is working:

m = LogisticRegression()
m.coef_= np.array([[0.,0.]]) and
m.intercept_ = -1000.
m.classes_=np.array([0, 1])
x = np.array([[1, 1],[2, 2]])

Note the . after the zeros.

In [12]: m.predict_proba(x)
Out[12]:
array([[1., 0.],
       [1., 0.]])

Upvotes: 1

Related Questions