集成学习
"""
概述
是机器学习的一种思想, 它通过多个模型的组合形成一个精度更高的模型, 参与组合的模型称为 弱学习器(基学习器)
"""
1. 学习分类
"""
学习分类
Bagging
随机森林
采用决策树模型作为每一个弱学习器
训练
1. 有放回的产生训练样本
2. 随机挑选n个特征
预测
平权投票, 多数表决输出预测结果
API
sklearn.ensemble.RandomForestClassifier
n_estimators 决策树数量 default = 10
Criterion: entropy 或者 gini default = gini
max_depth: 指定树的最大深度, default=None
max_features='auto' 决策树构建时使用的最大特征数量
auto
sqrt
log2
None
bootstrap: 是否采用有放回抽样, 如果为False将会使用全部训练样本 default = True
min_samples_split
节点分裂所需最小样本数 default = 2
如果节点样本数少于min_samples_split 则不在进行划分
如果样本量不大, 不需要设置这个值
如果样本量数量级非常大, 则推荐增大这个值
min_samples_leaf
叶子节点的最小样本数 default = 1
如果某叶子节点数目小于样本数, 则会和兄弟节点一起被剪枝
较小的叶子节点样本数量使模型更容易捉捕训练数据中的噪声
min_impurity_split
节点划分最小不纯度
如果某节点的不纯度小于这个阈值, 则该节点不再生成子节点,并变为叶子节点
一般不推荐改动 默认值 1e-7
思想
又称为装袋算法或自举汇聚法
有放回的抽样产生不同的训练集, 从而训练不同的学习器
通过平权投票, 多数表决的方式决定预测结果
分类问题中, 会使用多数投票统计结果
回归问题中, 会使用求平均值统计结果
弱学习器可以并行训练
算法模型
Linear Ridge Lasso Logistic Softmax ID3 C4.5 CART SVM KNN
Boosting
思想
每一个训练器重点关注前一个训练器不足的地方进行训练
通过加权投票的方式 得出预测结果
串行的训练方式
算法模型
Adaboost, GBDT, XGBoost, LightGBM
对比
数据采样
Bagging
对数据进行有放回的采样训练
Boosting
全部样本, 根据前一轮学习结果调整数据的重要性
投票方式
Bagging
所有学习器平权投票
Boosting
对学习器进行加权投票
学习顺序
Bagging
并行的, 每个学习器没有依赖关系
Boosting
串行, 学习有先后顺序
"""
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.metrics import classification_report
from sklearn.ensemble import RandomForestClassifier
import warnings
warnings.filterwarnings('ignore')
def titanicCase():
taitan_df = pd.read_csv("data/train.csv")
print(taitan_df.head())
print(taitan_df.info)
x = taitan_df[['Pclass', 'Age', 'Sex']]
y = taitan_df['Survived']
x['Age'] = x['Age'].fillna(x['Age'].mean())
print('x -->1', x.head(10))
x = pd.get_dummies(x)
print('x -->2', x.head(10))
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.20, random_state