scikit-learn 中的分類

1.袋裝決策樹

Bagging 在具有高差異的演算法中表現最佳。一個流行的例子是決策樹,通常是在沒有修剪的情況下構建的。

在下面的示例中,請參閱使用 BaggingClassifier 和分類和迴歸樹演算法(DecisionTreeClassifier)的示例。共創造了 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 類構建隨機森林模型以進行分類。

下面的示例提供了一個隨機森林的示例,用於對 100 棵樹進行分類,並從隨機選擇的 3 個特徵中選擇分割點。

# 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.隨機梯度提升

隨機梯度增強(也稱為梯度增強機器)是最複雜的整體技術之一。它也是一種被證明可能是通過集合提高效能的最佳技術的技術。

你可以使用 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/