Поиск…


Основная задача простой классификации (XOR) с использованием алгоритма k ближайшего соседа

Представьте, что вы хотите предсказать правильный ответ для популярной проблемы XOR. Вы знали, что такое XOR (например, [x0 x1] => y). например [0 0] => 0, [0 1] => [1] и ...

#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]]))

Классификация в scikit-learn

1. Деревянные деревья принятия решений

Сумка лучше всего работает с алгоритмами с высокой дисперсией. Популярным примером являются деревья решений, которые часто создаются без обрезки.

В приведенном ниже примере см. Пример использования BaggingClassifier с алгоритмом Classification and Regression Trees (DecisionTreeClassifier). Создано 100 деревьев.

Используемый набор данных: набор данных диабета индейцев Пимы

# 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())

Запустив пример, мы получим надежную оценку точности модели.

0.770745044429

2. Случайный лес

Случайный лес - это расширение мешковых деревьев решений.

Образцы учебного набора данных берутся с заменой, но деревья построены таким образом, чтобы уменьшить корреляцию между отдельными классификаторами. В частности, вместо того, чтобы жадно выбирать лучшую точку разделения при построении дерева, для каждого раскола рассматривается только случайное подмножество признаков.

Вы можете создать модель Random Forest для классификации с использованием класса RandomForestClassifier.

В приведенном ниже примере приведен пример случайного леса для классификации с 100 деревьями и точками разделения, выбранными из случайного выбора из трех функций.

# 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())

Выполнение примера дает среднюю оценку точности классификации.

0.770727956254

3. AdaBoost

AdaBoost, возможно, был первым успешным алгоритмом ускорительного ансамбля. Обычно он работает путем взвешивания экземпляров в наборе данных тем, насколько легко или сложно классифицировать их, позволяя алгоритму оплачивать или или меньше уделять им внимание при построении последующих моделей.

Вы можете создать модель AdaBoost для классификации с использованием класса AdaBoostClassifier.

Пример ниже демонстрирует построение 30 деревьев решений последовательно с использованием алгоритма 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())

Выполнение примера дает среднюю оценку точности классификации.

0.76045796309

4. Ускорение стохастического градиента

Stochastic Gradient Boosting (также называемое Gradient Boosting Machines) - один из самых сложных методов ансамбля. Это также метод, который, по-видимому, является лучшими технологиями для повышения производительности через ансамбли.

Вы можете построить модель Gradient Boosting для классификации с использованием класса GradientBoostingClassifier.

Пример ниже демонстрирует Stochastic Gradient Boosting для классификации с 100 деревьями.

# 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())

Выполнение примера дает среднюю оценку точности классификации.

0.764285714286

Источник: http://machinelearningmastery.com/ensemble-machine-learning-algorithms-python-scikit-learn/



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow