Ricerca…


Un semplice problema di classificazione semplice (XOR) utilizzando l'algoritmo k neighbor neighbor

Considera che vuoi pronosticare la risposta corretta per il problema popolare XOR. Sapevi che cos'è XOR (es. [X0 x1] => y). ad esempio [0 0] => 0, [0 1] => [1] e ...

#Load Sickit learn data
from sklearn.neighbors import KNeighborsClassifier

#X is feature vectors, and y is correct label(To train model)
X = [[0, 0],[0 ,1],[1, 0],[1, 1]]
y = [0,1,1,0]

#Initialize a Kneighbors Classifier with K parameter set to 2
KNC = KNeighborsClassifier(n_neighbors= 2)

#Fit the model(the KNC learn y Given X)
KNC.fit(X, y)

#print the predicted result for [1 1]
print(KNC.predict([[1 1]]))

Classificazione in scikit-learn

1. Alberi decisionali insaccati

L'insaccamento si comporta meglio con algoritmi con varianza elevata. Un esempio popolare sono gli alberi decisionali, spesso costruiti senza potatura.

Nell'esempio seguente si vede un esempio di utilizzo del BaggingClassifier con l'algoritmo Classification and Regression Trees (DecisionTeamClassifier). Vengono creati un totale di 100 alberi.

Set di dati utilizzato: set di dati sul diabete Pima Indians

# Bagged Decision Trees for Classification
import pandas
from sklearn import cross_validation
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
num_folds = 10
num_instances = len(X)
seed = 7
kfold = cross_validation.KFold(n=num_instances, n_folds=num_folds, random_state=seed)
cart = DecisionTreeClassifier()
num_trees = 100
model = BaggingClassifier(base_estimator=cart, n_estimators=num_trees, random_state=seed)
results = cross_validation.cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Eseguendo l'esempio, otteniamo una stima attendibile dell'accuratezza del modello.

0.770745044429

2. Foresta casuale

La foresta casuale è un'estensione degli alberi decisionali insaccati.

I campioni dell'insieme di dati sull'addestramento vengono presi con la sostituzione, ma gli alberi sono costruiti in modo da ridurre la correlazione tra i singoli classificatori. In particolare, anziché scegliere avidamente il miglior punto di divisione nella costruzione dell'albero, solo un sottoinsieme casuale di funzionalità viene preso in considerazione per ogni suddivisione.

È possibile costruire un modello Foresta casuale per la classificazione utilizzando la classe RandomForestClassifier.

L'esempio seguente fornisce un esempio di Foresta casuale per la classificazione con 100 alberi e punti di divisione scelti da una selezione casuale di 3 caratteristiche.

# Random Forest Classification
import pandas
from sklearn import cross_validation
from sklearn.ensemble import RandomForestClassifier
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
num_folds = 10
num_instances = len(X)
seed = 7
num_trees = 100
max_features = 3
kfold = cross_validation.KFold(n=num_instances, n_folds=num_folds, random_state=seed)
model = RandomForestClassifier(n_estimators=num_trees, max_features=max_features)
results = cross_validation.cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

L'esecuzione dell'esempio fornisce una stima media dell'accuratezza della classificazione.

0.770727956254

3. AdaBoost

AdaBoost è stato forse il primo algoritmo di ensemble boosting di successo. Funziona generalmente ponderando le istanze nel set di dati in base alla loro facilità o difficoltà di classificazione, consentendo all'algoritmo di pagare o meno attenzione a loro nella costruzione dei modelli successivi.

È possibile costruire un modello AdaBoost per la classificazione utilizzando la classe AdaBoostClassifier.

L'esempio seguente mostra la costruzione di 30 alberi decisionali in sequenza usando l'algoritmo AdaBoost.

# AdaBoost Classification
import pandas
from sklearn import cross_validation
from sklearn.ensemble import AdaBoostClassifier
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
num_folds = 10
num_instances = len(X)
seed = 7
num_trees = 30
kfold = cross_validation.KFold(n=num_instances, n_folds=num_folds, random_state=seed)
model = AdaBoostClassifier(n_estimators=num_trees, random_state=seed)
results = cross_validation.cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

L'esecuzione dell'esempio fornisce una stima media dell'accuratezza della classificazione.

0.76045796309

4. Aumento graduale stocastico

Stochastic Gradient Boosting (chiamato anche Gradient Boosting Machines) è una delle tecniche di ensemble più sofisticate. È anche una tecnica che sta dimostrando di essere forse delle migliori tecniche disponibili per migliorare le prestazioni tramite ensemble.

È possibile costruire un modello Gradient Boosting per la classificazione utilizzando la classe GradientBoostingClassifier.

L'esempio seguente mostra l'aumento graduale stocastico per la classificazione con 100 alberi.

# Stochastic Gradient Boosting Classification
import pandas
from sklearn import cross_validation
from sklearn.ensemble import GradientBoostingClassifier
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
num_folds = 10
num_instances = len(X)
seed = 7
num_trees = 100
kfold = cross_validation.KFold(n=num_instances, n_folds=num_folds, random_state=seed)
model = GradientBoostingClassifier(n_estimators=num_trees, random_state=seed)
results = cross_validation.cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

L'esecuzione dell'esempio fornisce una stima media dell'accuratezza della classificazione.

0.764285714286

Fonte: http://machinelearningmastery.com/ensemble-machine-learning-algorithms-python-scikit-learn/



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow