2015-10-20 10 views
6

Mi chiedo come utilizzare sklearn.linear_model.LogisticRegression per addestrare un modello lineare di log NLP per il riconoscimento di entità con nome (NER).Utilizzo di scikit: imparare ad addestrare un modello lineare di log NLP per NER

Un tipico modello log-lineare per definisce una probabilità condizionale come segue:

enter image description here

con:

  • x: la parola corrente
  • y: la classe di una parola essere considerato
  • f: la funzione di funzione vettoriale, che associa una parola x e una classe y a un vettore di scalari.
  • v: il vettore di peso funzione

Can sklearn.linear_model.LogisticRegression treno come un modello?

Il problema è che le funzionalità dipendono dalla classe.

risposta

6

In scikit-learn 0.16 e versioni successive, è possibile utilizzare l'opzione multinomial per sklearn.linear_model.LogisticRegression per addestrare un modello log-lineare (a.k.a. classificatore MaxEnt, regressione logistica multiclasse). Attualmente l'opzione multinomial è supported only dai risolutori 'lbfgs' e 'newton-cg'.

Esempio con il set di dati Iris (4 funzioni, 3 classi, 150 campioni):

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

from __future__ import print_function 
from __future__ import division 

import numpy as np 
import matplotlib.pyplot as plt 
from sklearn import linear_model, datasets 
from sklearn.metrics import confusion_matrix 
from sklearn.metrics import classification_report 

# Import data 
iris = datasets.load_iris() 
X = iris.data # features 
y_true = iris.target # labels 

# Look at the size of the feature matrix and the label vector: 
print('iris.data.shape: {0}'.format(iris.data.shape)) 
print('iris.target.shape: {0}\n'.format(iris.target.shape)) 

# Instantiate a MaxEnt model 
logreg = linear_model.LogisticRegression(C=1e5, multi_class='multinomial', solver='lbfgs') 

# Train the model 
logreg.fit(X, y_true) 
print('logreg.coef_: \n{0}\n'.format(logreg.coef_)) 
print('logreg.intercept_: \n{0}'.format(logreg.intercept_)) 

# Use the model to make predictions 
y_pred = logreg.predict(X) 
print('\ny_pred: \n{0}'.format(y_pred)) 

# Assess the quality of the predictions 
print('\nconfusion_matrix(y_true, y_pred):\n{0}\n'.format(confusion_matrix(y_true, y_pred))) 
print('classification_report(y_true, y_pred): \n{0}'.format(classification_report(y_true, y_pred))) 

L'opzione multinomial per sklearn.linear_model.LogisticRegressionwas introduced in version 0.16:

  • Aggiungi multi_class="multinomial" opzione : class : linear_model.LogisticRegression per implementare un risolutore di regressione logistico che riduce al minimo l'entropia incrociata o la perdita multinomiale invece dell'impostazione predefinita di One-vs-Rest. Supporta i risolutori lbfgs e newton-cg. Per Lars Buitinck _ e Manoj Kumar _. Opzione risolutore newton-cg di Simon Wu.