10. 통합 학습 및 임의 숲

1. 통합 학습은 무엇입니까

우리 모두 예측하는 알고리즘을 사용하기 전에 무슨 일이 필연적으로 "독재"가 느낄 것이다, 통합 학습입니다. 통합 학습이 같은 다음 문제, 다수결을 예측하는 여러 알고리즘과 여러 알고리즘에 통합되어,이 학습의 통합이다.

이 같은 십명 당신이 제품 A를 구입하는 것이 좋습니다 있는지 확인하기 위해 물건을 살 수있는 권장 시간과 학습을 통합 우리의 삶에 많은 예,하지만 한 사람 만이 B 제품을 구입하는 것이 좋습니다, 우리는 B의 제품을 구입하는 경향이있을 것입니다.

우리는 sklearn의 연구는 우리를 위해 통합 된 인터페이스를 제공하는 방법에 대해 알아.

from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
from sklearn.ensemble import VotingClassifier  # ensemble,与集成学习有关的模块

X, y = make_moons(n_samples=500, noise=0.3, random_state=666)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)

from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
# 传入一系列分类器,和Pipeline有点像
voting_clf = VotingClassifier([
    ("log_clf", LogisticRegression()),
    ("svm_clf", SVC()),
    ("dt_clf", DecisionTreeClassifier())
], voting="hard")  # voting="hard"表示少数服从多数

voting_clf.fit(X_train, y_train)
print(voting_clf.score(X_test, y_test))  # 0.888

2.SoftVoting 분류

그것은 무엇 SoftVoting 분류입니까? 그는 다수결에 의해 선택된 우리가 투표를 통합 방법을 사용하는 학습하기 전에 말했다. 하지만 가끔은 대부분은 소위 발생하기 쉬운, 합리적인하지 그것을이다 "민주주의 독재를." 따라서,보다 합리적인 접근 방법은 서로 다른 알고리즘, 투표 수는 무게해야,해야합니다.

이러한 경제 정책, 경제가 충분히 고려되어야한다, 또는 투표 수의 값이 크게 권장 할 권리가있다. 자신의 투표가 이해할 수있는 더 큰 무게를 할당해서는 안 그리고 평범한 사람, 그는 경제와 함께 할 수있는 좋은 공간 과학자,하지만 아무것도,없는 경우에도 마찬가지입니다.

我们实际举例一下

우리는 세 가지 모델은 B, 그래서 2vs3 더 가능성이 예측 예측하는 다섯 개 가지 모델을 보려면, 다음, 최종 결과는 B.이다 그러나 좀 더 자세히 살펴, 당신은 모델 B에 대한 예측이 상대적으로 이해를 말하는 것은 그리 높은 반면 자신의 이해가 매우 높고, 모델 A의 예측, 단서를 찾을 수 있습니다. 그래서 투표가 불공정, 당신은, K 이웃 매우부터 어떻게 생각하십니까, 우리는 또한 간단한 투표 수 있지만 고려되어야 할 거리를 사용합니다. 확실성과 특정 알고리즘은, 다음 할당 큰 값을 가져야 바로 표결에 있다면 통합 학습은 동일합니다.

소프트 투표는 다음 확률 고려의 평균을 사용하는 경우, 다섯 개 모델의 사용은 합계의 확률은 0.616를 산출하기 위해 평균 예측하고, 0.384 B 시간, 우리는 A.의 분류 결과를 믿는다

따라서, SOFTING 투표의 사용은 다음 컬렉션의 각 모델은 확률을 추정 할 수 있어야합니다. 로지스틱 회귀, 예측 자체 확률 모델을 기반으로하는 predict_proba있다. KNN 분명히 가능, K 3 다음 하나가 청색, 두 개의 데이터가 빨간색있다 취할 후 적색 확률은 2/3이다. 의사 결정 나무는 우리가 얻을 해당 확률로 획득 된 훈련 데이터 집합을 기반으로, 리프 노드에 갔다 동일합니다. SVM은 가능하지만 어려울 수 있지만 sklearn 좋은 우리에게 제공하지만 일부 컴퓨팅 자원을 희생.

from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
from sklearn.ensemble import VotingClassifier  # ensemble,与集成学习有关的模块

X, y = make_moons(n_samples=500, noise=0.3, random_state=666)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)

from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
# 传入一系列分类器,和Pipeline有点像
voting_clf = VotingClassifier([
    ("log_clf", LogisticRegression()),
    ("svm_clf", SVC(probability=True)),  # 默认SVM是不支持预测概率的,如果需要的话,要加上这个参数
    ("dt_clf", DecisionTreeClassifier())
], voting="soft")  # voting="soft"表示不是少数服从多数,而是有权值

voting_clf.fit(X_train, y_train)
print(voting_clf.score(X_test, y_test))  # 0.896

3.Bagging 和 붙여 넣기

기계 학습의 많은 방법이 있지만, 그러나보기 투표의 관점에서 여전히 충분하지 않습니다. 그래서 우리는 더 많은 하위 모델보다 하위 모델의 통합 뷰를 만들려고합니다. 또한 지속적으로 변화를 요구하지 하위 모델 사이의 점에 유의.

그렇다면 당신은 차이를 만들 수 있습니까? 하나의 방법은 동일한 알고리즘이 있지만 인해 다른 샘플에 차이가 있더라도, 그래서, 예를 들어, 각각의 서브 모델의 데이터의 일부를 보면 데이터의 500 개의 샘플 각각의 서브 모델 100 개 샘플을보고 데이터이다. 그러나이 경우, 예측 모델 아이의 정확도를 낮추지된다? 그것은 사실이다, 그 하위 모델의 정확도 비율이 상대적으로 낮지 만 여러 하위 모델은 정확도가 높아지면 결합이 통합 학습의 힘을하지만.

그래서 얼마나 어떻게보고 샘플 데이터 및 샘플 데이터의 부분의 각 하위 모델 부분을 보면? 여기에서 우리는 또한 차이가 있었다, 우리는 두 가지 방법이있다.

  • Bagging:放回取样
  • Pasting:不放回取样

포기할는 더 일반적으로 사용하지만, 때마다 샘플링으로 돌아 있기 때문에, 무작위로 인한 문제를 방지 할 수 있습니다.

from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier

X, y = make_moons(n_samples=500, noise=0.3, random_state=222)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=222)

bagging_clf = BaggingClassifier(
    DecisionTreeClassifier(), # 传入一个分类器,一般我们都会选择决策树
    n_estimators=500,  # 要创建多少个子模型
    max_samples=100,  # 每一个子模型看多少个样本
    bootstrap=True  # 表示是否放回取样,True表示放回,所以在sklearn中只用一个Bagging,通过控制bootstrap来表示是否放回
)

bagging_clf.fit(X_train, y_train)
print(bagging_clf.score(X_test, y_test))  # 0.944

4.oob (의-가방 아웃)과 자루에 넣기에 대한 자세한 논의

우리는 여분으로 샘플링, 샘플의 일부분이 모든 시료에서 선택되기 때문에 그때마다,이 샘플의 일부를 갖는 것이 가능하다 것은 엄격한 증명 한 후, 약 37 %, 적합한 아니다 샘플은하지 않았다. 이 샘플의 37 %는이 촬영 된 적이 있다는 것을 의미에서-의 가방이라고합니다.

경우 인 것을, 그 다음이 데이터의 37 %가 보지 않기 때문에, 태어나 train_test_split를 사용할 필요가 없으며, 우리는 데이터의 37 %가 될 수 있습니다 테스트 사용자를 직접. sklearn는 또한 우리가 직접 점수를 볼 수 있습니다, 우리를 위해 oob_score_를 캡슐화합니다.

from sklearn.datasets import make_moons
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier

X, y = make_moons(n_samples=500, noise=0.3, random_state=222)

bagging_clf = BaggingClassifier(
    DecisionTreeClassifier(),
    n_estimators=500,
    max_samples=100,
    bootstrap=True,
    oob_score=True  # 加上这个参数表示我们要记录哪些样本被取了,这样后续才能使用那些没有被使用的样本
)

# 直接传入所有数据进行训练
bagging_clf.fit(X, y)
# 这个命名方式也不用说了,表示不是由用户传来的,而是中途生成的,可以调用查看的属性
print(bagging_clf.oob_score_)  # 0.902

并且Bagging极易使用并行化处理,可以使用n_jobs参数

아파트는 표본에서, 즉, 모든이 특징의 일부를 보면,이 기능은, 샘플링 될 수있는 샘플의 각 부분 본다. 이러한 화소 식별 등 그 기능의 샘플의 많은 수를 들어, 트루 = bootstrap_features 지정한 랜덤 샘플링의 특성을 사용할 수있다. 또한, 우리는 할 수있는 샘플에 대한 무작위 표본 추출 또는 기능에 대한 무작위 표본 추출 중 하나.

5. 엑스트라 나무와 임의의 숲

우리는 통합 전에 학습 모델은 의사 결정 나무는이 나무는, 무작위되어 있으며, 나무와 더의 수, 그것은 무엇을이됩니까? 인수의 더 나은 이미지가 그래서 오른쪽, 임의의 숲을했다.

并且sklearn已经为我们封装了随机森林这个算法

from sklearn.datasets import make_moons
from sklearn.ensemble import RandomForestClassifier

X, y = make_moons(n_samples=500, noise=0.3, random_state=666)

rf_clf = RandomForestClassifier(n_estimators=500,  # 多少颗决策树
                                random_state=666,  # 树是随机的
                                oob_score=True,
                                n_jobs=-1
                                )
# 直接传入所有数据进行训练
rf_clf.fit(X, y)
# 这个命名方式也不用说了,表示不是由用户传来的,而是中途生成的,可以调用查看的属性
print(rf_clf.oob_score_)  # 0.892

임의 숲 이외에, 그것은 매우 임의의 숫자입니다 의미 여분 나무가, 수는 복수, 그것은 숫자를 많이 표현했다. 트리에 노드 및에 임의의 확률 임계 특성을 사용합니다. 이것은 오버 피팅 억제 추가 무작위성을 제공하지만 바이어스를 증가시킨다.

from sklearn.datasets import make_moons
from sklearn.ensemble import ExtraTreesClassifier

X, y = make_moons(n_samples=500, noise=0.3, random_state=666)

rf_clf = ExtraTreesClassifier(n_estimators=500,  # 多少颗决策树
                              random_state=666,  # 树是随机的
                              oob_score=True,
                              bootstrap=True,
                              n_jobs=-1
                              )
rf_clf.fit(X, y)
print(rf_clf.oob_score_)  # 0.892

当然除了分类问题,也可以解决回归问题。

6.Ada은 증폭 和 그라데이션을 밀어

여러 모델을 상속 강화, 각 모델 (증폭) 전체적인 효과를 향상시키기 위해 노력하고 있습니다. 밤을 위해

이는 에이다는 새로운 데이터로 좋은 예측 마커를하고 아무 문제가 없을 것이다, 실수를 할 수있는 지점이, 그래서 파란색 점이 깊어 참조, 우리는 먼저 예측됩니다 증폭, 그는에 표현 데이터 모델은 매우 예측하지 않고, 새로운 모델은 모델이 좋은 데이터를 예측하지 않습니다를 들어, 해당 체중이 증가 예측하는 것입니다. 항상 실수가 될 것으로 예상되기 때문에 그래서, 다음 같은 작업을 반복 이후 계속합니다. 그래서 각 모델은 지속적으로 에이다가 증폭되는 전체적인 효과를 향상된다

我们看看sklearn中的Ada Boosting

from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier

X, y = make_moons(n_samples=500, noise=0.3, random_state=666)

ada_clf = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2),
                            n_estimators=500
                            )
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)
ada_clf.fit(X_train, y_train)

print(ada_clf.score(X_test, y_test))  # 0.864

그라디언트 증폭 원리는 그 훈련 모델 에러 E1, E1 훈련, E2 이상, 훈련 E2, E3 에러 최종 예측 : M1 + m2 + m3 + ······마다 있도록 교육 시간은 보상 전에 실수에 대한 것입니다.

from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingClassifier

X, y = make_moons(n_samples=500, noise=0.3, random_state=666)

gb_clf = GradientBoostingClassifier(max_depth=2,  # 这里不需要指定分类器,默认是以决策树作为基础的
                                     n_estimators=500
                                     )
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)
gb_clf.fit(X_train, y_train)

print(gb_clf.score(X_test, y_test))  # 0.896

这些集成算法都可以解决回归问题

7.Stacking

그 전에 투표 분류기를 기억 하는가? 예측 알고리즘을 복수, 복수의 결과를 예측하고이 세 종합 결과의 결과. 그러나 스태킹은 직접 세 가지 결과를 통합하지 않지만, 3 개 개의 입력, 결과를 예측하는 또 다른 레이어를 추가로이 결과,이 스태킹되고, 동일하지 않습니다. 판매용 분류 문제를 해결할 수 스태킹 다시 문제가 해결 될 수있다.

如果再复杂一些的话,我们可以分为三层。这就意味着我们需要把数据集分成三份,第一份训练第一层,第二份训练第二层,第三份训练第三层。其实看到这里就有点像是神经网络了,关于Stacking,sklearn没有提供相应的模型让我们使用,有兴趣的话可以自己实现一下。

추천

출처www.cnblogs.com/traditional/p/11524945.html