scikit-learn implements the LogisticRegression class, which can solve this problem using optimized algorithms. Let's consider a toy dataset made of 500 samples:
Dataset employed to test the logistic regression
The dots belong to class 0, while the triangles belong to class 1. To immediately test the accuracy of our classification, it's useful to split the dataset into training and test sets:
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.25)
Now, we can train the model using these default parameters:
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(X_train, Y_train)
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
...