Una forma de entrenar una regresión logística es mediante el uso del descenso de gradiente estocástico, que scikit-learn ofrece una interfaz.
Lo que me gustaría hacer es tomar un clasificador SGDC de scikit-learn y hacer que obtenga el mismo puntaje que una regresión logística aquí . Sin embargo, me faltan algunas mejoras de aprendizaje automático, ya que mis puntajes no son equivalentes.
Este es mi código actual. ¿Qué me falta en el SGDClassifier para que produzca los mismos resultados que una regresión logística?
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier
import numpy as np
import pandas as pd
from sklearn.cross_validation import KFold
from sklearn.metrics import accuracy_score
# Note that the iris dataset is available in sklearn by default.
# This data is also conveniently preprocessed.
iris = datasets.load_iris()
X = iris["data"]
Y = iris["target"]
numFolds = 10
kf = KFold(len(X), numFolds, shuffle=True)
# These are "Class objects". For each Class, find the AUC through
# 10 fold cross validation.
Models = [LogisticRegression, SGDClassifier]
params = [{}, {"loss": "log", "penalty": "l2"}]
for param, Model in zip(params, Models):
total = 0
for train_indices, test_indices in kf:
train_X = X[train_indices, :]; train_Y = Y[train_indices]
test_X = X[test_indices, :]; test_Y = Y[test_indices]
reg = Model(**param)
reg.fit(train_X, train_Y)
predictions = reg.predict(test_X)
total += accuracy_score(test_Y, predictions)
accuracy = total / numFolds
print "Accuracy score of {0}: {1}".format(Model.__name__, accuracy)
Mi salida:
Accuracy score of LogisticRegression: 0.946666666667
Accuracy score of SGDClassifier: 0.76