machine-learning
Scikit Learn
Sök…
Ett grundläggande enkel klassificeringsproblem (XOR) med k närmaste grannalgoritm
Tänk på att du vill förutsäga det rätta svaret för XOR-populära problem. Du visste vad som är XOR (t.ex. [x0 x1] => y). till exempel [0 0] => 0, [0 1] => [1] och ...
#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]]))
Klassificering i scikit-learning
1. Påsade beslutsträd
Bagging fungerar bäst med algoritmer som har hög varians. Ett populärt exempel är beslutsträd, ofta konstruerade utan beskärning.
I exemplet nedan kan du se ett exempel på att använda BaggingClassifier med algoritmen Classification and Regression Trees (DecisionTreeClassifier). Totalt 100 träd skapas.
Dataset används: 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())
Genom att använda exemplet får vi en robust uppskattning av modellens noggrannhet.
0.770745044429
2. Slumpmässig skog
Slumpmässig skog är en förlängning av påsade beslutsträd.
Prover av träningsdatasättet tas med ersättning, men träden är konstruerade på ett sätt som minskar korrelationen mellan enskilda klassificerare. Specifikt, snarare än att girigt välja den bästa delningspunkten i trädets konstruktion, beaktas endast en slumpmässig delmängd av funktioner för varje delning.
Du kan konstruera en slumpmässig skogsmodell för klassificering med klassen RandomForestClassifier.
Exemplet nedan ger ett exempel på Random Forest för klassificering med 100 träd och delade punkter valda från ett slumpmässigt urval av tre funktioner.
# 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())
Genom att köra exemplet ger en medelbedömning av klassificeringsnoggrannheten.
0.770727956254
3. AdaBoost
AdaBoost var kanske den första framgångsrika boostingensemble-algoritmen. Det fungerar vanligtvis genom att väga instanser i datasättet efter hur enkla eller svåra de är att klassificera, vilket gör att algoritmen kan uppmärksamma eller mindre uppmärksamma dem i konstruktionen av efterföljande modeller.
Du kan konstruera en AdaBoost-modell för klassificering med klassen AdaBoostClassifier.
Exemplet nedan visar konstruktionen av 30 beslutsträd i följd med AdaBoost-algoritmen.
# 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())
Genom att köra exemplet ger en medelbedömning av klassificeringsnoggrannheten.
0.76045796309
4. Stokastisk gradientökning
Stochastic Gradient Boosting (även kallad Gradient Boosting Machines) är en av de mest sofistikerade ensembelteknikerna. Det är också en teknik som visar sig vara den bästa tekniken för att förbättra prestanda via ensembler.
Du kan konstruera en Gradient Boosting-modell för klassificering med klassen GradientBoostingClassifier.
Exemplet nedan visar Stochastic Gradient Boosting för klassificering med 100 träd.
# 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())
Att köra exemplet ger en genomsnittlig uppskattning av klassificeringsnoggrannheten.
0.764285714286
Källa: http://machinelearningmastery.com/ensemble-machine-learning-algorithms-python-scikit-learn/