machine-learning
Scikit Learn
Szukaj…
Podstawowy problem prostej klasyfikacji (XOR) przy użyciu algorytmu k najbliższego sąsiada
Rozważ, że chcesz przewidzieć poprawną odpowiedź na popularny problem XOR. Wiedziałeś, co to jest XOR (np. [X0 x1] => y). na przykład [0 0] => 0, [0 1] => [1] i ...
#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]]))
Klasyfikacja w scikit-learn
1. Drzewa decyzyjne w workach
Pakowanie działa najlepiej w przypadku algorytmów o dużej zmienności. Popularnym przykładem są drzewa decyzyjne, często budowane bez przycinania.
W poniższym przykładzie zobacz przykład użycia BaggingClassifier z algorytmem drzew klasyfikacji i regresji (DecisionTreeClassifier). W sumie powstaje 100 drzew.
Używany zestaw danych: Zestaw danych dotyczących cukrzycy Indian Pima
# 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())
Korzystając z tego przykładu, otrzymujemy dokładne oszacowanie dokładności modelu.
0.770745044429
2. Losowy las
Losowy las jest przedłużeniem workowych drzew decyzyjnych.
Próbki zestawu danych szkoleniowych są pobierane z zamiennikiem, ale drzewa są skonstruowane w sposób, który zmniejsza korelację między poszczególnymi klasyfikatorami. W szczególności, zamiast zachłannie wybierać najlepszy punkt podziału w konstrukcji drzewa, dla każdego podziału brany jest pod uwagę tylko losowy podzbiór cech.
Możesz skonstruować model lasu losowego do klasyfikacji za pomocą klasy RandomForestClassifier.
Poniższy przykład przedstawia przykład losowego lasu do klasyfikacji ze 100 drzewami i punktami podziału wybranymi z losowego wyboru 3 obiektów.
# 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())
Uruchomienie tego przykładu zapewnia średnią ocenę dokładności klasyfikacji.
0.770727956254
3. AdaBoost
AdaBoost był być może pierwszym udanym algorytmem wzmacniającym zespół. Na ogół działa poprzez ważenie instancji w zbiorze danych według tego, jak łatwe lub trudne jest ich sklasyfikowanie, umożliwiając algorytmowi zwracanie na nie uwagi lub mniej uwagi przy budowie kolejnych modeli.
Możesz skonstruować model AdaBoost do klasyfikacji za pomocą klasy AdaBoostClassifier.
Poniższy przykład demonstruje budowę 30 drzew decyzyjnych w sekwencji przy użyciu algorytmu 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())
Uruchomienie tego przykładu zapewnia średnią ocenę dokładności klasyfikacji.
0.76045796309
4. Stochastyczne zwiększenie gradientu
Stochastyczne przyspieszanie gradientu (zwane również maszynami do zwiększania gradientu) jest jedną z najbardziej wyrafinowanych technik zespołowych. Jest to również technika, która okazuje się być być może najlepszą dostępną techniką poprawy wydajności za pomocą zespołów.
Możesz skonstruować model wzmocnienia gradientu do klasyfikacji za pomocą klasy GradientBoostingClassifier.
Poniższy przykład pokazuje Stochastic Gradient Boosting do klasyfikacji ze 100 drzewami.
# 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())
Uruchomienie tego przykładu zapewnia średnią ocenę dokładności klasyfikacji.
0.764285714286
Źródło: http://machinelearningmastery.com/ensemble-machine-learning-algorithms-python-scikit-learn/