수색…


k 가장 가까운 이웃 알고리즘을 사용하는 기본 단순 분류 문제 (XOR)

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. 헐렁한 결정 나무

바깅은 분산이 높은 알고리즘에서 가장 잘 수행됩니다. 자주 사용되는 예는 의사 결정 트리이며, 종종 프 i없이 구성됩니다.

아래 예제에서 분류 및 회귀 트리 알고리즘 (DecisionTreeClassifier)과 함께 BaggingClassifier를 사용하는 예를 참조하십시오. 총 100 그루의 나무가 만들어집니다.

사용한 데이터 세트 : 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())

예제를 실행하면 모델 정확도에 대한 견고한 추정치를 얻을 수 있습니다.

0.770745044429

2. 랜덤 포레스트

랜덤 포리스트는 포기 된 의사 결정 트리의 확장입니다.

트레이닝 데이터 세트의 샘플은 대체되어 사용되지만 나무는 개별 분류 기준 간의 상관 관계를 감소시키는 방식으로 구성됩니다. 특히, 나무의 구성에서 가장 좋은 분리 점을 탐욕스럽게 선택하는 대신, 각 분할에 대해 특징의 임의의 부분 집합 만 고려합니다.

RandomForestClassifier 클래스를 사용하여 분류를 위해 Random Forest 모델을 구성 할 수 있습니다.

아래의 예는 임의의 3 가지 피처 중에서 선택된 100 개의 트리와 분리 점으로 분류하기위한 Random Forest의 예입니다.

# 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는 아마도 최초의 성공적인 앙상블 알고리즘이었을 것입니다. 일반적으로 데이터 세트의 인스턴스에 가중치를 적용하여 분류하기가 쉽고 어렵 기 때문에 알고리즘을 지불하거나 후속 모델을 구성하는 데주의를 기울이지 않아도됩니다.

AdaBoostClassifier 클래스를 사용하여 분류를 위해 AdaBoost 모델을 생성 할 수 있습니다.

아래 예제는 AdaBoost 알고리즘을 사용하여 순서대로 30 개의 의사 결정 트리를 구성하는 방법을 보여줍니다.

# 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)은 가장 정교한 앙상블 기법 중 하나입니다. 또한 앙상블을 통해 성능을 향상시키는 데 사용할 수있는 최상의 기술임을 입증하는 기술이기도합니다.

GradientBoostingClassifier 클래스를 사용하여 분류를위한 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