machine-learning
Scikit Learn
サーチ…
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.意思決定木が詰まっている
バギングは分散が大きいアルゴリズムで最も効果的です。一般的な例は、しばしばプルーニングなしで構築された意思決定ツリーです。
以下の例では、Classification and Regression Treesアルゴリズム(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クラスを使用して、分類用のランダムフォレストモデルを構築できます。
以下の例は、3つの機能のランダムな選択から選択された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はおそらく最初に成功したブースティングアンサンブルアルゴリズムでした。これは一般に、データセット内のインスタンスに分類するのがどれほど容易か難しいかによって、アルゴリズムに費用をかけることを可能にするか、またはそれに注意を払うことによって、後続のモデルを構築する際にインスタンスに重みを付けることによって行われます。
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.確率的勾配ブースト
確率的勾配ブースト(勾配ブーストマシンとも呼ばれる)は、最も洗練されたアンサンブル手法の1つです。アンサンブルを使用してパフォーマンスを向上させるための最良の技術であることが証明されているテクニックでもあります。
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/