machine-learning
Scikit Leren
Zoeken…
Een eenvoudig eenvoudig classificatieprobleem (XOR) met behulp van het algoritme van de dichtstbijzijnde buur
Overweeg dat je het juiste antwoord voor het populaire XOR-probleem wilt voorspellen. Je wist wat XOR is (bijvoorbeeld [x0 x1] => y). bijvoorbeeld [0 0] => 0, [0 1] => [1] en ...
#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]]))
Classificatie in scikit-learn
1. Zakken met beslissingsbomen
Zakken presteren het beste met algoritmen die sterk verschillen. Een populair voorbeeld zijn beslissingsbomen, vaak gebouwd zonder snoeien.
Zie in het onderstaande voorbeeld een voorbeeld van het gebruik van de BaggingClassifier met het algoritme voor classificatie en regressiebomen (DecisionTreeClassifier). Er worden in totaal 100 bomen gemaakt.
Gebruikte dataset: Pima Indians Diabetes Data Set
# 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())
Aan de hand van het voorbeeld krijgen we een robuuste schatting van de modelnauwkeurigheid.
0.770745044429
2. Willekeurig bos
Random forest is een uitbreiding van beslissingsbomen in zakken.
Monsters van de trainingsdataset worden met vervanging genomen, maar de bomen worden op een manier geconstrueerd die de correlatie tussen individuele classificaties vermindert. Specifiek, in plaats van hebzuchtig het beste splitpunt in de constructie van de boom te kiezen, wordt alleen een willekeurige subset van functies voor elke split in overweging genomen.
U kunt een Random Forest-model maken voor classificatie met behulp van de klasse RandomForestClassifier.
Het onderstaande voorbeeld geeft een voorbeeld van Random Forest voor classificatie met 100 bomen en splitpunten gekozen uit een willekeurige selectie van 3 functies.
# 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())
Het uitvoeren van het voorbeeld geeft een gemiddelde schatting van de nauwkeurigheid van de classificatie.
0.770727956254
3. AdaBoost
AdaBoost was misschien het eerste succesvolle boosting-ensemble-algoritme. Het werkt over het algemeen door instanties in de gegevensset te wegen door hoe gemakkelijk of moeilijk ze zijn te classificeren, waardoor het algoritme er aandacht aan kan schenken of er minder aandacht aan kan schenken bij de constructie van volgende modellen.
U kunt een AdaBoost-model voor classificatie maken met behulp van de klasse AdaBoostClassifier.
Het onderstaande voorbeeld toont de constructie van 30 beslissingsbomen in volgorde met behulp van het AdaBoost-algoritme.
# 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())
Het uitvoeren van het voorbeeld geeft een gemiddelde schatting van de nauwkeurigheid van de classificatie.
0.76045796309
4. Stochastische gradiëntversterking
Stochastische Gradient Boosting (ook wel Gradient Boosting Machines genoemd) is een van de meest geavanceerde ensemble-technieken. Het is ook een techniek die misschien wel de beste beschikbare techniek is om de prestaties via ensembles te verbeteren.
U kunt een Gradient Boosting-model voor classificatie maken met de klasse GradientBoostingClassifier.
Het onderstaande voorbeeld toont Stochastic Gradient Boosting voor classificatie met 100 bomen.
# 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())
Het uitvoeren van het voorbeeld geeft een gemiddelde schatting van de nauwkeurigheid van de classificatie.
0.764285714286
Bron: http://machinelearningmastery.com/ensemble-machine-learning-algorithms-python-scikit-learn/